I²CInter-Integrated Circuit)字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫集成电路总线,它是一种串行通讯总线,使用多主从架构,由飞利浦公司在1980年代为了让主板嵌入式系统手机用以连接低速周边装置而发展。I²C的正确读法为“I平方C”("I-squared-C"),而“I二C”("I-two-C")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属装置地址[1]

I2C总线
类别 串列 总线
设计者 飞利浦半导体,现为恩智浦半导体
设计时间 1982年,​42年前​(1982
数据信号 集电极开路
宽度 1-bit (SDA) with separate clock (SCL)
比特率 在不同模式下 0.1, 0.4, 1.0, 3.4 or 5.0Mbit/s
协议 串列, 半双工
I2C bus

设计概说 编辑

  • 一般 I²C 晶片常用的传输格式有下列二种:

(启始)-[控制]-[指令]-[资料]-(结束)
(启始)-[控制0]-[指令]-(r启始)-[控制1]-[资料]-(结束)

 
I²C-Bus
 
一个由单一主控端(一个微控制器)及三个从属节点(一个模拟数字转换器)、一个数字模拟转换器以及一另一个微控制器)所构成,并使用了上拉电阻Rp

I²C只使用两条双向漏极开路(Open Drain)线,其中一条线为传输数据的串行资料线(SDA, Serial DAta line),另一条线是启动或停止传输以及发送时钟序列的串行时脉(SCL, Serial CLock line)线,这两条线上都有上拉电阻[2]。I²C允许相当大的工作电压范围,但典型的电压准位为+3.3V或+5v。

I²C的参考设计使用一个7位元长度的地址空间但保留了16个地址,所以在一组总线最多可和112个节点通讯[a]。常见的I²C总线依传输速率的不同而有不同的模式:标准模式(100 kbit/s)、低速模式(10 kbit/s),但时钟频率可被允许下降至零,这代表可以暂停通讯。而新一代的I²C总线可以和更多的节点(支持10位元长度的地址空间)以更快的速率通讯:快速模式(400 kbit/s)、快速+模式(1 Mbit/s)高速模式(3.4 Mbit/s)超高速模式(5 Mbit/s)。

虽然最大的节点数目是被地址空间所限制住,但实际上也会被总线上的总电容所限制住,一般而言为400 pF。

 
Data transfer sequence

参考设计 编辑

I²C仅使用两个双向开漏线,串行数据线(SDA)和串行时钟线(SCL),以及上拉电阻。使用的典型电压是+5 V或+3.3 V(虽然其他电压系统也是允许的)。

在I²C参考设计中,使用7或10位(取决于所使用的装置)地址空间。普通I²C总线速度为100 kbit / s的标准模式和10 kbit / s的低速模式,但任意低时钟频率也是允许的。 I²C的最新修订可以承载更多的节点,并以更快的速度运行[b]。这些速度被更广泛地使用在嵌入式系统中而不是PC上。I²C也有其他的特性,例如16位寻址。

请注意,这里引用的比特率为主节点和从节点之间没有时钟延长或其他硬件开销的传输比特率。协议开销包括一个字节从地址(或许还有从装置内部寄存器地址)以及每个字节的ACK / NACK位元。因此这意味着,用户数据的实际传输速率要低于峰值比特率。例如,如果与从装置以低效的每次仅一个字节数据进行传输,数据率将比峰值比特率少于一半(因为其余的时钟需要发送一个字节地址和ACK位元)。

节点的最大数量受限于地址空间以及400 pF的总总线电容。400 pF总电容也限制了实际通讯距离只有几米。


如上所述,参考设计为使用串行数据线(SDA)和串行时钟线(SCL)、拥有7位元寻址空间的总线。 总线上有两种类型角色的节点:

  • 主节点 - 产生时钟并发起与从节点的通讯
  • 从节点 - 接收时钟并响应主节点的寻址

该总线是一种多主控总线,即可以在总线上放置任意多主节点。此外,在停止位元(STOP)发出后,一个主节点也可以成为从节点,反之亦然。

总线上有四种不同的操作模式,虽然大部分装置只作为一种角色和使用其中两种操作模式:

  • 主节点发送 - 主节点发送数据给从节点
  • 主节点接收 - 主节点接收从节点数据
  • 从节点发送 - 从节点发送数据给主节点
  • 从节点接收 - 从节点接收主节点数据

一开始,主节点处于主节点发送模式,发送起始位元(START),跟着发送希望与之通讯的从节点的7位元地址,最后再发送1位读写位元,该位元表示主节点想要与从节点进行读(1)还是写(0)操作。

如果从节点在总线上,它将以ACK字符应答(低态触发)该地址。主节点收到应答后,根据它发送的读写位元,处于发送模式或者接收模式,从节点则处于对应的相反模式(接收或发送)。

地址和数据首先发送最高有效位。 起始位元在SCL为高时,由SDA上准位从高变低表示;停止位元在SCL为高时,由SDA上准位从低变高表示。其他SDA上的准位变化在SCL为低时发生。

如果主节点想要向从节点写数据,它将发送一个字节,然后从节点以ACK位元应答,如此重复。此时,主节点处于主节点发送模式,从节点处于从节点接收模式。

如果主节点想要读取从节点数据,它将不断接收从节点发送的一个个字节,在收到每个字节后发送ACK进行应答,除了接收到的最后一个字节。此时,主节点处于主节点接收模式,从节点处于从节点发送模式。

此后,主节点不是发送停止位元终止传输,就是发送另一个起始位元以发起另一次传输(即“组合消息”)。

修订 编辑

I2C规范的历次修订
年份 版本 最高速度 注解 PDF
1982 Original 100 kbit/s 当时的I²C系统是一种简单的内部总线系统,当时主要的用途在于控制由飞利浦所生产的晶片。 n/a
1992 1 400 kbit/s 新增了传输速率为400 kbit/s的快速模式及长度为10位元的地址模式,该模式下可容纳最多1008个节点。这是最初的标准版本。 n/a
1998 2 3.4 Mbit/s 新增了传输速率为3.4Mbit/s的高速模式,并减小总线需要的电压及电流以节省能源。 n/a
2000 2.1 3.4 Mbit/s 仅对2.0版做一些小修正,功能并无变化。 [3]
2007 3 3.4 Mbit/s 新增了高速+模式,这一模式需要20 mA的电流来驱动。添加装置ID机制。 [4]
2012 4 5 Mbit/s 增加5 MHz的超快速模式(UFM),这种模式是单工模式。使用带有推挽输出的新型USDA和USCS线,这两条线上不再有上拉电阻。增加了制造商指定的ID表。 [5]
2012 5 5 Mbit/s 修正错误。 [6]
2014 6 5 Mbit/s 修正两幅图。这是目前最新的标准。 [2]

应用 编辑

 
STMicroelectronics 24C08: Serial EEPROM with I2C bus[7]
 
A 16-bit ADC board with I2C interface

I²C被应用在构造简单且可以牺牲传输速度来降低制造成本的外设上。一些常见的应用如下:

I²C的一个优势在于其接脚数少。通过两个接脚以及相应的软件,微控制器就可以控制某一个网络内的装置,而使用其他技术则需要更多的接脚。而且,较少的接脚数可以减小封装尺寸,进而减少重量及电源的消耗,这对于行动电话及手持式电脑而言格外重要。由于电脑工程师发现到对于集成电路设计而言,许多的制造成本源自于封装尺寸及接脚数量,因而像I²C这样的总线受到了广泛应用。

外设可以在系统仍然在运作的同时加入或移出总线,这代表对于有热插拔需求的装置而言是个理想的总线。

  • arduino mega上的pin脚
  • raspberry pi 4 上的pin脚

可参考arduino mega 转 raspberry pi 4 i2c 3v转5v的转换电路

操作系统的支持 编辑

Linux中,I²C已经列入了内核模块的支持了,更进一步的说明可以参考内核相关的文件及位于/usr/include/linux/i2c.h 的这个头文件OpenBSD则在最近的更新中加入了I²C的架构(framework)以支持一些常见的主控端控制器及传感器。

工具开发 编辑

I²C主机适配器 编辑

I²C协议分析仪 编辑

逻辑分析仪 编辑

限制 编辑

i2c在容易线长导致信号质量不佳,速度越快能用的距离越短(一般约在10公分上下),上拉电阻用小一点可能有帮助

i2c阻抗50,usb阻抗100在做信号转换时阻抗不匹配会造成信号极差

  • 上升电阻计算:

派生技术 编辑

参见 编辑

参考资料 编辑

  1. ^ I2C Licensing Information (PDF). nxp.com. [2018-04-29]. (原始内容存档 (PDF)于2017-01-10). 
  2. ^ 2.0 2.1 I2C-bus specification (PDF). Rev 6. NXP Semiconductors. April 4, 2014 [2015-11-02]. (原始内容存档 (PDF)于2014-07-25). 
  3. ^ I2C-bus specification Rev 2.1; Philips Semiconductors; January 2000; Archived. (PDF). [2007-02-12]. (原始内容存档 (PDF)于2007-02-12). 
  4. ^ I2C-bus specification Rev 3; NXP Semiconductors; June 19, 2007; Archived. (PDF). [2012-02-07]. (原始内容存档 (PDF)于2012-02-07). 
  5. ^ I2C-bus specification Rev 4; NXP Semiconductors; February 13, 2012; Archived. (PDF). [2012-05-02]. (原始内容存档 (PDF)于2012-05-02). 
  6. ^ I2C-bus specification Rev 5; NXP Semiconductors; October 9, 2012; Archived. (PDF). [2012-10-17]. (原始内容存档 (PDF)于2012-10-17). 
  7. ^ 8-Kbit serial I2C bus EEPROM (PDF) (PDF). STMicroelectronics. October 2017 [19 November 2019]. (原始内容存档 (PDF)于2019-10-18).  |url-status=|dead-url=只需其一 (帮助)
  8. ^ Benefits of Power Supplies Equipped with I2C Ethernet Communications. Aegis Power Systems, Inc. Aegis Power Systems, Inc. [2015-12-21]. (原始内容存档于2015-12-22). 

注释 编辑

  1. ^ 应该为27=128个,但是其中16个指令具有特殊定义,所以剩下112。
  2. ^ 400 kbit / s的快速模式,1 Mbit / s的快速模式加上或FM +和3.4 Mbit / s的高速模式

外部链接 编辑