• UART、RS232、RS485、I2C和SPI的介绍


    基本知识

    • 串行通信:多个数据通过一条数据线,依次传输
    • 并行通信:多个数据通过多条数据线,一次性传输
    • 单工通信:只能接收数据或者发送数据(遥控器、收音机)
    • 半双工通信:在同一时刻,只能接收数据或者发送数据(对讲机)
    • 全双工通信:在同一时刻,既可以接收数据,也可以发送数据(电话)
    • 波特率:用于描述通信时的通信速度,其单位是 bps(bit per second),即每秒钟传送 bit 的数量

    UART

    UART(Universal Asynchronous Receiver Transmitter),即通用异步收发器。

    • 特点:
      1、有两根数据线(RXDTXD
      2、串行、异步通信
      3、全双工通信
      4、点对点通信:接收端和发送端(两个设备)

    • 应用:在嵌入式系统中,常用于主机和辅助设备之间的通信

    • 时序图
      在这里插入图片描述
      一次完整的数据传输包括:起始位、数据位、校验位(可有可无)和停止位
      传输数据的时候,高电平(置1)表示空闲
      起始位: 置低电平(0),表示通信的开始
      数据位: 起始位后开始通信,传输数据,先传送数据低位,再传送数据高位(数据位可以发送5-8位,一般发送8位数据(即一个字节))
      校验位:(可有可无) 验证数据是否发送正确,只能检查错误,不能修正,加上后,通信速度变慢
      停止位: 置高电平(置1),表示一次通信的结束(占用1位、1.5位或者2位)

    • UART每次通信只能发送一个字节,不能够累计发送(避免累计误差);若要发送多个字节数据,需要先发送一个字节,然后结束通信,再开始通信,发送下一个字节

    • 因为是异步通信,没有时钟线,所以通过波特率来区分 01还是0011

    • 硬件连接图
      在这里插入图片描述

    • 一般情况下,SOC会集成 UART控制器,在使用UART进行通信的时候只需要对其内部的相关寄存器进行设置,即可完成通信

    USART

    USART是通用同步/异步收发器(带同步时钟线 USART_CK),只是一种协议方式,根据不同电平方式分为 RS232协议和RS485协议。

    UART串口通信存在的问题:
    1、电气接口不统一
    2、抗干扰能力差:UART 直接使用 TTL信号表示 01,但 TTL信号的抗干扰能力很差,传输过程中很容易出错
    3、通信距离短:因为 TTL信号的抗干扰能力较差,所以其通信距离也很短。一般只用于一个电路板上两个不同芯片之间的通信(板载间通信)

    RS232协议:(点对点通信)
    1、基于串口,所以时序图和 UART串口一致
    2、在电气层上做了一些改变,统一电气接口(定义了一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定)
    3、抗干扰能力变强,通信距离变长(一般可达15米)
    4、电气接口为 DB-9,一般使用 RXDTXDGND这三条线
    5、规定逻辑为 1的电平为 -5V到-15V;规定逻辑为 0 的电平为 +5V到+15V

    硬件连接:
    在这里插入图片描述

    RS232协议存在的问题:
    1、接口的信号电平值较高,易损坏接口电路的芯片
    2、与 TTL电平不兼容,需要电平转换芯片才能与 TTL电路连接
    3、通信速度低
    4、易产生共模干扰,抗噪声干扰性弱
    5、通信距离15米,还是较短

    RS485协议
    特点:(半双工通信)
    1、采用差分信号进行数据传输(双绞线),使用两线间电压差为 +2V到+6V表示逻辑0;两线间电压差为 -2V到-6V表示逻辑1,从而实现了远距离通信(1500米);且在电子噪声较大的环境下,能够有效传输信号
    2、允许连接多个收发器,具有多站能力,也就是可以建立一个设备网络
    3、RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片

    硬件连接图(设备网络,RS485总线上挂载多个设备,主从机制参考 I2C总线)
    120Ω电阻用来消除信号线上的共模干扰
    在这里插入图片描述

    I2C

    I2C总线是一种串行、同步、半双工通信的多主机通信总线,有两根数据线:SDA(数据线)、SCL(时钟线);硬件结构简单,成本较低
    应用: 同一块电路上的不同芯片之间进行通信
    特点:
    1、I2C总线是一种多主机总线,连接在 I2C总线上的器件分为主机和从机;
    2、主机有权发起和结束一次通信,而从机只能被主机呼叫;
    3、当总线上有多个主机同时启用总线时,I2C也具备冲突检测和仲裁的功能来防止错误发生;
    4、每个连接到 I2C总线上的器件,都有一个唯一的地址(7位),且每个器件都可以作为主机(同一时刻只有一个主机),也可以作为从机;总线上的器件增加和删除不影响其它器件的正常工作;
    5、I2C总线在通信时,总线上发送数据的器件叫发送器,接收数据的器件叫接收器

    硬件连接图
    在这里插入图片描述通信过程:
    1、主机发送 起始信号,启用总线(这时总线上的所有设备都可以收到,并且其它设备在此器件就不会启用总线了)
    2、主机发送一个字节的数据指明 从机地址 和后续字节的 传送方向(是主机—>从机,还是从机—>主机)
    一个字节的数据:前7位为从机地址,最后一位是传送方向(是0表示主机—>从机,1表示从机—>主机)
    3、被寻址的从机发送 应答信号 回复主机,其它设备查看地址不是自己的地址,并不会理会
    4、发送器发送一个字节数据
    5、接收器发送应答信号回应发送器
    第4、5步 循环…
    6、通信完成后,主机发送 停止信号 释放总线,一次通信完成

    起始信号:SCL处于高电平时,SDA由高变低
    停止信号:SCL处于低电平时,SDA由低变高
    字节传送与应答: 发送器发送一个字节数据(先传送高位,再传送低位);接收器发送 应答位 来回应,(1位低电平应答)
    同步信号:
    传输数据期间,
    SCL低电平期间,发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生改变
    SCL高电平期间,接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生改变(因为SCL高电平时,数据线上信号改变会被认为是起始信号或者停止信号

    SPI

    SPI(Serial Peripheral Interface)是串行外设接口的缩写,是一种高速、全双工、同步的串行通信总线;最少有四根线:MISO(主设备输入、从设备输出),MOSI(主设备输出、从设备输入),SCLK(时钟线),CS(片选线)
    SPI采用主从方式工作,一般有一个主设备和一个或多个从设备

    硬件连接图
    每多连接一个从设备,就要多用连接一条片选线,和I2C利用地址来寻址的方式不同
    在这里插入图片描述通信过程:
    1、SPI总线传输数据:先传送高位,再传送低位;一个字节传送完成后,无需应答,即可开始下一个字节的传送
    2、SPI总线采用同步方式工作,时钟在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿接收器从数据线上读取数据,从而完成一位数据的传送;八个时钟周期即可完成一个字节数据的传送

    极性和相位:根据芯片手册来判断
    SPI总线有四种不同的工作模式,取决于 极性(CPOL)相位(CPHA)

    CPOL表示 SCLK 空闲时的状态:
    CPOL = 0,SCLK低电平表示总线空闲
    CPOL = 1,SCLK高电平表示总线空闲

    CPHA表示采样时刻:
    CPHA = 0,每个周期的第一个时钟沿采样,相位为0,上升沿发数据,下降沿收数据
    CPHA = 1,每个周期的第二个时钟沿采样,相位为1,下降沿发数据,上升沿收数据

    I2CSPI 的异同

    相同点:
    1、均采用串行、同步的方式
    2、均采用 TTL电平,传输距离和应用场景类似(近距离传输,板载通信)
    3、均采用主从方式工作
    不同点:
    1、I2C为半双工通信;SPI为全双工通信
    2、I2C有应答机制;SPI无需应答
    3、I2C通过总线广播 从机地址 来寻址;SPI通过 ** 向片选线发送使能信号** 来寻址
    4、I2C的时钟极性和相位固定;SPI的时钟极性和相位可以调整

  • 相关阅读:
    PS软件下载安装以基本配置
    【C++】动态内存管理 ④ ( 对象的动态创建和释放引申思考 | 基础数据类型 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )
    C++初阶:C/C++内存管理
    为什么 Intent 不能传递大数据
    《HelloGitHub》第 94 期
    C++ 构造函数和析构函数 详解
    编辑距离 只有插入和替换没有删除
    面试篇之HR问什么是静态代理?什么是动态代理?
    批零商企数字化转型与进销存软件的线上线下全赋能
    iNeuOS工业互联网操作系统,设备运维业务和“低代码”表单开发工具
  • 原文地址:https://blog.csdn.net/Sir666888/article/details/125477333