通信协议整理(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:数据移位发生在时钟从活动转换到空闲时;

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

posted on   fhbui  阅读(31)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示