02、I2C总线标准
一、起始信号和终止信号
所有的交互都是以 START(S)信号开始,并以 STOP(P)信号终止, 具体的起始信号和终止信号通信时序图如下所示:
- 空闲态:SDA、SCL都是高 SCL保持高电平
- 起始:SCL保持高,SDA 拉低
- 停止:SCL保持高,SDA 拉高
起始信号(START): 是由总线控制器生成的,定义为 SDA 线从高电平到低电平的跳变,同时 SCL线保持高电平。
终止信号(STOP): 是由总线控制器生成的,定义为 SDA 线从低电平到高电平的跳变,同时 SCL线保持高电平。
实际波形如下:
注意: 在 START 信号之后,总线被认为是忙碌状态,直到 STOP 信号出现后总线才被认为空闲。
二、数据格式
- 数据必须分成每组8位来发送,可以连续发送多组。
- 每发送完一组8位数据后,必须立即发送一个确认信号(ACK)。
- 发送顺序是从数值最大的位开始(最高位),然后依次发送后面的低位。
- 如果接收设备正忙,会通过时钟线让发送方暂停;当设备准备就绪后,会释放时钟线继续传输。
(每个要点用独立短句说明,关键术语保留但用更通俗的表达方式,通过分点结构让逻辑更清晰)
三、应答信号和非应答信号
- 应答信号的作用
发送设备每发完一个字节数据后,接收设备会通过应答信号告诉对方:"数据已收到,可以继续发下一个字节了"。 - 应答信号的产生方式
当发送设备在第9个时钟脉冲时松开数据线(SDA),接收设备会立刻把数据线拉低,并在整个时钟线(SCL)处于高电平期间保持低电平。这个动作就是应答信号。 - 未收到应答时的处理
如果第9个时钟周期时数据线(SDA)保持高电平(未被拉低),说明接收设备没有响应。此时发送设备有两种选择:
- 直接终止通信(发送停止信号)
- 重新发起新通信(发送启动信号)
(注:SDA是数据传输线,SCL是时钟同步线,两者共同构成I2C通信的基础线路)
应答信号和非应答信号时序如下图所示:
- 设备无响应:发送信号后对方设备没反应
- 设备正忙:对方设备正在处理其他任务,暂时无法接收
- 信息无法识别:对方收到的内容它看不懂或无法处理
- 存储已满:设备内存空间用完了,装不下新数据
- 传输完成:接收方告知发送方数据已全部接收完毕
四、读写方向
数据传输过程如下:
地址与方向:传输开始时,先发送目标设备的7位地址,接着是第8位的读写标志位。
标志位含义:
- 0 = 写操作(向设备发送数据);
- 1 = 读操作(从设备接收数据)。
传输结束与继续:
- 通常传输以一个“停止信号”结束。
- 如果需要继续与总线上的其他设备通信,可以发送“重复开始信号”直接寻址新设备,无需先发送停止信号。这样可以在同一传输过程中混合执行读和写操作。
简单来说:地址+方向位 → 操作类型 → 用停止或重复开始控制传输的终止或继续。
五、实战
示波器的波形:
- 观察I2C 波形的标准
- 只适合细节分析
逻辑分析仪:
- 对协议进行分析
- 对i2c过去一段时间的数据内容进行快速分析