I2C协议摘要
1、简介
略。
2、特性
-
仅需
2条线:SCL、SDA。 -
支持简单寻址。
-
当多个设备同时发送数据时,可自行进行冲突检测和总线仲裁。
-
连接到总线的设备数量只受限于
最大总线电容值(注: 若考虑到现实业务场景,通常也受限于7比特长度的地址范围)。 -
器件易替换、易升级,仅需将旧版本的器件拆下(
Unclip), 再将新版本的器件挂接(Clip)上去即可(待确认:是否等同于热插拔)。 -
其余特性的描述详见原文档。
3、协议明细
SCL和SDA的基本要求:- 支持双向传输,但只能半双工。
- 多设备场景下应在两条总线上分别接一个上拉电阻,
设备的输出应为
开漏或开集结构,以便能执行“线与”逻辑。 对于单设备场景,由于没有总线竞争,还可以采取推挽输出。 - 由“线与”逻辑可知
0对应低电平、1对应高电平,但由于CMOS、NMOS、 双极晶体管等类型对高/低电平的要求并不一样,所以高/低电平的阈值并不固定, 而是根据Vdd而定,分别为0.7Vdd和0.3Vdd。 SCL对SDA的约束:- 在
SCL为高电平期间才能对数据采样,此期间SDA状态必须保持稳定, 否则可能误判为开始或停止信号,详见后文。 - 只有
SCL为低电平期间,SDA才允许变化。 1个时钟周期对应1个数据比特。
- 在
开始(后文记为START)和停止(后文记为STOP)信号:SCL高电平期间SDA的下降沿为START,总线处于繁忙(busy)状态。 某些时候还允许重复的START。SCL高电平期间SDA的上升沿为STOP,一段特定的时间之后, 总线回到空闲(free)状态。- 若设备硬件不是边沿触发,则需要在一个时钟周期内对
SDA至少采样2次才能察觉电平转变。 - 波形图见
3.1.4小节。
- 字节格式:
1Byte =8bits- 一次传输过程不对字节数进行限制。
- 每个字节后面必须紧跟一个确认/否认信号(见后文),
所以一个字节实际上占用
9个时钟周期。 - 字节内的比特传输顺序是从高到低。
- 如果一个设备由于进行某些操作(例如处理内部中断)而不能继续接收或发送下一个字节,
则可以将时钟线
SCL拉低(收发方均可操作),令控制器进入等待状态(wait state), 直到再次就绪后再释放SCL。 - 波形图见
3.1.5小节。
确认(Acknowledge,后文记为ACK)和不确认(Not-Acknowledge,后文记为NACK)信号:- 均是接收端对发送端的响应,即:接收端是主动方,发送端是被动方。
- 在第
9个时钟周期,先由发送端释放SDA(即拉高), 再由接收端在SCL低电平期间将SDA拉低或不对其操作(即保持高电平), 并且SCL高电平期间保持SDA该状态,即可产生ACK或NACK。 - 如果是
NACK,则控制器接下来既可以发STOP来中止传输,也可发START来启动新一轮传输。
- 时钟同步(
Clock Synchronization):- 即在多设备场景下,每个设备根据所有时钟信号在
SCL的综合结果来对自己的内部时钟进行调整, 最终达到所有时钟的升降沿对齐到同一标准的效果。有2个重点:- 对“线与”逻辑的应用。
- 硬件自动调节。
- 波形图见
3.1.7小节。
- 即在多设备场景下,每个设备根据所有时钟信号在
仲裁(Arbitration):- 当多个设备同时发送消息,需要一种机制来决定哪一个设备能记得总线(
SCL和SDA)使用权, 这就是仲裁。 - 原理不难理解,以下仅强调几个重点:
- 基于对“线与”逻辑的应用,所以发0者获胜。
- 仲裁是按位进行的,所以地址或数据较小者获胜。
- 仲裁落败的设备的待发消息不会丢失,会在获胜者发完一个字节(含
ACK/NACK) 或STOP后(待确认:1Byte还是一整轮,取决于具体实现??)再次尝试——当然, 要先重发START信号。 - 落败者若还具有接收信息的需求,就需要切换成接收方, 并检查获胜者的寻址对象是否是自己。
- 仲裁期间若部分设备发
START或STOP,结果将是未定义的,需要避免。
- 波形图见
3.1.8小节。
- 当多个设备同时发送消息,需要一种机制来决定哪一个设备能记得总线(
- 目标地址(
7位):- 紧跟在
START信号之后。 - 高
7位是实际地址,最低位是读写标志:0表示写,1表示读。 - 虽然一轮完整的传输总是以
STOP为结尾,但当同一设备要对多个目标(亦即涉及多个地址)收/发数据, 在收/发完一个目标的数据后,可以省略该目标对应的STOP,直接发START来开始下一个目标的传输, 直至收/发完最后一个目标的数据再发STOP。 - 注意
读/写操作对ACK/NACK的要求,尤其是读写混合的场景,示意图见3.1.10小节末尾。 - 允许多个设备具有相同的地址,这种就类似于广播,但这些设备要根据具体业务自行控制好交互逻辑。
- 注意几个预留地址:
0000 000&&R/W= 0:用于通用呼叫(General Call),可进行复位、 键盘扫描或设备自定义操作,详见3.1.13、3.1.14、3.1.17小节。1111 1XX:设备身份标识(Device ID)。1111 0XX:表明将使用10位地址。
- 紧跟在
10位地址:- 在
7位地址的基础上进行扩展,占用2个字节,其中1个字节使用预留地址1111_0XX。 - 其余描述略。
- 在
- 以上内容适用于
超快速模式(Ultra Fast Mode)以外的模式。 超快速模式有自己的协议规范,在以上内容的基础上有所不同,不继续展开, 感兴趣的可直接查阅原文档3.2小节。
4、I2C的若干变体
略。
5、不同的总线速率
- 双向模式(向下兼容):
Standard Mode:标准模式,<= 100 kbit/sFast Mode:快速模式,<= 400 kbit/sFast Mode Plus:快速模式增强版,<= 1 Mbit/sHigh-speed Mode:高速模式,<= 3.4 Mbit/s
- 单向模式(与前面不兼容):
Ultra Fast Mode:超快速模式,<= 5 Mbit/s
- 除标准模式之外的其余四种模式的专属特性和时序,以及多种模式共享于同一物理总线上的注意事项, 不在此详述。
6、通信时序及相关的电气规范
略。
7、设备与总线的电气连接规范
略。
8、缩略词
-
I2C-bus:Inter-Integrated Circuit bus,集成电路互连总线。 -
其余略。
9、MIPI-I3C概述
略。