Skip to content

概念

image-20250627210232290

image-20250627210609672

image-20250627210844394

通信过程

  • 这个传送方向是0主机到从机还是1从机到主机,加上地址刚好8位
  • 首个字节一定是主机到从机,后续发送器【此时不一定是主机】和接收器取决于传输方向(1则是从机发送到主机)
  • 可以连续发送
  • 发送过程中不允许修改方向
  • 主机发送停止信号

image-20250627211214937

image-20250627213219310

信号

  • 起始信号
  • 发送信号
  • 应答信号
  • 停止信号
  • 空闲状态SDA和SCL【用于什么时候发送,什么时候接收】都是1
  • 起始和停止主机发出

image-20250627214635269

image-20250627214455230

image-20250627215216083

通信问题

1.时钟需要相同【SCL线】,不然不知道什么时候开始

2.如何识别111000还是10这样的数据

发送开始,SCL【用于什么时候发送,什么时候接收】拉低期间,SDA才可以发送数据(修改01),然后SCL高电平期间,从机读取数据(注意,读取的是低电平期间的数据)

image-20250627220516696

3.如果我要收发(不单向,会怎么样)

  • 只能分两次
  • 但是总线可能会被抢走怎么办(不要释放总线,直接开一个新的发就行)

仲裁,谁抢到了主机

1.IIC设置开漏输出,只能输出高电平

2.线与逻辑,设备拉低为0,则整个SDA为0

  • 如果多个设备同时尝试发送起始信号,它们会进入仲裁阶段。

  • I²C 总线协议要求设备在发送数据时同时监控 SDA 的实际电平。如果设备发送的电平与 SDA 总线的实际电平不一致(例如,设备发送高电平但总线是低电平),该设备就退出仲裁。

假设有两个设备 A 和 B,同时尝试发送数据:

  • 设备 A 和设备 B都同时发送数据位。
  • 如果设备 A发送的是逻辑 1(高电平),而设备 B发送的是逻辑 0(低电平),由于线与逻辑的特性,总线上的 SDA 会变为逻辑 0。
  • 设备 A监控总线发现 SDA 电平与自己发送的不一致(A想发送高电平,但总线是低电平),于是设备 A退出仲裁。
  • 设备 B继续传输,抢到了主机权。

仲裁的结果:

  • 仲裁的优先级由设备发送的地址或数据决定。发送低电平(逻辑 0)的设备优先级更高,因为它可以拉低 SDA 总线。