通信协议整理(I2C、UART、SPI)

通信特征

(从数据传输方向上):

  • 单工:数据只能单一方向传输;
  • 半双工:数据能在两个方向传输,但同一时刻只能在一个方向;
  • 双工:数据能同时在两个方向传输;

I2C

I2C在物理层上有SCL和SDA两条线将主机和从设备连接,并有上拉电阻连接。

SCL工作逻辑:

  • 空闲时为高电平,通信开始后拉低
  • 通信过程中,SCL低电平时某一设备在SDA上设置数据(电平信号),高电平时另一设备读取SDA的电平信号。

  • 启动条件:SCL处于高电平,把SDA(从高电平)拉低;(多主机占用一个总线时,最先拉低SDA的主机获得总线使用权)
  • 结束条件:SCL处于高电平,把SDA(从低电平)拉高;
  • (其他时刻,SCL高电平时SDA不能发生跳变)
  • 重复启动条件:当某一主设备获取到从机应答后需要立刻做出下一步传输,为避免被其他主机占用总线,主设备接受了应答后应使用启动条件而非结束条件

仲裁

对于多主机、多节点,所有SDA或SCL都会通过上拉电阻连接到高电平,意味着I2C总线在理论上只能由一对主机、节点进行数据传输。各个主机通过监视SDA、SCL,直至停止条件发生、总线进入空闲时才开始传输消息。

如果出现多个主机同时开始传输,就需要进行仲裁:最先将SDA信号电平拉低的主机为仲裁获胜者,失败者立即暂停传输

UART

异步通信协议,物理层上包括TX、RX两条数据传输的接线和共地的接线。

两个设备之间的UART通信需要有相同的波特率,以保持收发速率一致。

UART的传输以数据帧为单位,数据帧格式有两种,分别是无校准位(8位数据位)和有校准位(9位数据位)。

数据帧如下图:( 起始位+8位数据位/9位数据位(带奇偶检验)+停止位(1or2) )image

SPI

SPI是同步、全双工的通信,仅支持一主多从。物理层上包含:

  1. SCK时钟线
  2. MISO、MOSI数据线
  3. CS/NSS/SS片选:每个从机设备都有一个自己的片选线,置低电平时,该设备被选择与主机通信

image
主从设备的shift register通过MISO、MOSI连接成数据传输的回路。此外还有buffer register作为收发数据的缓冲区,发送和接收的数据。

SPI有两个时钟的配置选项,分别是clock polarityclock edge,主从设备进行SPI通信需要这两个时钟配置保持一致:

  • clock polarity 时钟极性:在时钟空闲时的电平(高/低)
    0:空闲时钟电平为0;
    1:空闲时钟电平为1;
  • clock edge 时钟边沿:数据传输(移位)的时钟边沿
    0:数据移位发生在时钟从空闲转换到活动时;
    1:数据移位发生在时钟从活动转换到空闲时;

📊 SPI模式组合:

SPI模式由两个参数决定:

  • CPOL (Clock Polarity):时钟极性
  • CPHA (Clock Phase):时钟相位

组合后的四种模式:

模式 CPOL CPHA 采样时刻 空闲时钟 数据采样边沿
Mode 0 0 1EDGE 第一个边沿 低电平 上升沿
Mode 1 0 2EDGE 第二个边沿 低电平 下降沿
Mode 2 1 1EDGE 第一个边沿 高电平 下降沿
Mode 3 1 2EDGE 第二个边沿 高电平 上升沿

参考:
[I2C] ADI整理发布的I2C,PMbus,SMbus入门教程,难得的好文章(含中文版)
I²C – Inter-Integrated Circuit
SPI – Serial Peripheral Interface

posted on 2024-12-26 22:36  fhbui  阅读(176)  评论(0)    收藏  举报