一、数据在I2C总线上的传输协议
(1) I2C通信时的基本数据单位也是以字节为单位的,每次传输的有效数据都是1个字节(8位)。
(2)起始位(S)及其后的8个clk中 (在CLK线的上升沿发送数据)都是主设备在发送(主设备掌控总线),此时从设备只能读取总线,通过读总线来得知主设备发给从设备的信息;然后到了第9周期,按照协议规定从设备需要发送ACK给主设备,所以此时主设备必须释放总线(主设备把总线置为高电平然后不要动,其实就类似于总线空闲状态),同时从设备试图拉低总线发出ACK。如果从设备拉低总线失败,或者从设备根本就没有拉低总线,则主设备看到的现象就是总线在第9周期仍然一直保持高,这对主设备来说,意味着我没收到ACK,主设备就认为刚才给从设备发送的8字节不对(接收失败)
注:
- 一般地址定义为7位(支持127种不同的IIC设备,如果需要更多器件可以扩展地址),第8位表示读还是写,最后还会跟一个ACK或NACK
2)开始条件:SCL high, SDA high-to-low 转换
结束条件:SCL high, SDA low-to-high 转换
![](https://img.haomeiwen.com/i18818407/42517deac9116188.png)
![](https://img.haomeiwen.com/i18818407/238dea4a9123b6f3.png)
注: MSB:最高有效bit位 , 如上图就是bit7
LSB:最低有效bit位 , 如上图就是bit0
![](https://img.haomeiwen.com/i18818407/c09d10c3ecb58ba6.png)
Acknowledge: 以上部分图片和资料来自朱有鹏以及知乎@IC君
网友评论