欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。
本篇主要是IIC协议简单解析
I?C(Inter-Integrated Circuit,常写作I2C)协议是一种非常经典且广泛应用的低速串行通信协议。
概览
I2C协议由飞利浦公司(现恩智浦NXP)开发,其设计哲学是简洁和节省引脚。
物理线路: 仅需两根线,串行数据线(SDA)和串行时钟线(SCL)。
通信模式: 同步、串行、半双工。所有数据传输都与SCL时钟信号同步。
拓扑结构: 多主多从总线。理论上可挂载多达128个设备(使用7位地址时)。
数据传输率: 标准模式:100 kbit/s;快速模式:400 kbit/s;高速模式:3.4 Mbit/s。
电平逻辑: 开漏输出(Open-Drain)。这意味着总线需要通过上拉电阻接到正电源,是实现“线与”功能和多主机仲裁的基础。
地址分配: 每个从设备都有一个唯一的7位或10位地址,由芯片制造商或用户设定。
硬件连接与电平逻辑
两根线:
SDA(Serial Data Line):传输数据的双向线。
SCL(Serial Clock Line):由主设备产生并控制的时钟信号线。
开漏输出与上拉电阻:
总线上所有的设备(主和从)的SDA和SCL引脚都是开漏输出结构。
总线必须通过上拉电阻(Rp) 连接到逻辑高电平(VDD)。 ?开漏输出+上拉电阻实现了两个关键功能: ?线与(Wired-AND):任何设备都可以将总线拉低(输出0),而只有当所有设备都释放总线时,总线才被电阻拉高(为1)。 ?多主仲裁:多个主设备竞争总线控制权时不会损坏硬件。
协议层详解:数据帧格式
一次完整的I2C通信由以下部分组成:
起始条件(START Condition)和停止条件(STOP Condition)
起始条件(S):在SCL为高电平期间,SDA线出现一个从高到低的下降沿。这是一个唯一的信号,通知总线上所有设备:“通信要开始了,请准备好”。
停止条件(P):在SCL为高电平期间,SDA线出现一个从低到高的上升沿。表示本次通信结束,总线恢复空闲状态。
注意:还有一种重复起始条件(Repeated START, Sr)。它既不结束上一个通信,也无需发出停止条件,直接开始下一次传输。常用于切换读写模式。
数据有效性
SDA线上的数据必须在SCL为高电平期间保持稳定。数据线只有在SCL为低电平时才允许变化(建议在低电平中间发生改变)。
字节格式与应答(ACK/NACK)
每个字节(8位)的数据后都会跟一个应答位(ACKnowledge Bit),因此实际上传输一字节数据需要9个时钟脉冲。
数据传送:高位(MSB)在前,低位(LSB)在后。
应答(ACK):在发送完8位数据后,发送端会释放SDA线。在第9个时钟脉冲期间,接收端必须将SDA线拉低,以此表示成功接收了数据。
非应答(NACK):如果在第9个时钟脉冲期间,SDA线仍然为高电平,则表示接收端未成功接收数据(可能是无法响应、读取完成或出错)。
完整的通信序列
本篇内容中有部分资源来源于网络,如有侵权,请联系作者。
如果您觉得本公众号还不错的话,可以推给身边的朋友们,感谢并祝好!
1379