摘自 广州周立功单片机发展有限公司 《 I2C 总线规范》
I2C 总线支持任何 IC 生产过程( NMOS 、 CMOS 、双极性)。两线——串行数据( SDA )和串行时钟( SCL )线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器(由器件的功能决定)。很明显, LCD 驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。
表 1 I2C 总线术语
术语 |
描述 |
发送器 |
发送数据到总线的器件 |
接收器 |
从总线接收数据的器件 |
主机 |
初始化发送产生时钟信号和终止发送的器件 |
从机 |
被主机寻址的器件 |
多主机 |
同时有多于一个主机尝试控制总线但不破坏报文 |
仲裁 |
是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程 |
同步 |
两个或多个器件同步时钟信号的过程 |
I2C 总线是一个多主机的总线,这就是说,可以连接多于一个能控制总线的器件到总线。由于主机通常是微控制器,让我们考虑以下数据在两个连接到 I2C 总线的微控制器之间传输的情况。
这突出了 I2C 总线的 [ 主机—从机 ] 和 [ 接收器—发送器 ] 的关系。应当注意的是:这些关系不是持久的,只由当时传输的方向决定。
传输数据的过程如下:
1) 假设微控制器 A 要发送信息到微控制器 B
a) 微控制器 A (主机)寻址微控制器 B (从机)
b) 微控制器 A (主机 - 发送器)发送数据到微控制器 B (从机 - 接收器)
c) 微控制器 A 终止传输
2) 假设微控制器 A 想从微控制器 B 接收信息
a) 微控制器 A (主机)寻址微控制器 B (从机)
b) 微控制器 A (主机 - 接收器)从微控制器 B (从机 - 发送器)接收数据
c) 微控制器 A 终止传输
在 I2C 总线上产生时钟信号通常是主机器件的责任;当在总线上传输数据时,每个主机产生自己的时钟信号。
SDA 和 SCL 都是双向线路都通过一个电流源或上拉电阻连接到正的电源电压,如图 1 。 当总线空闲时,这两条线路都是高电平。连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。 I2C 总线上数据的传输速率在标准模式下可达 100kbit/s , 在快速模式下可达 400kbit/s , 在高速模式下可达 3.4Mbit/s 。 连接到总线的接口数量只由总线电容是 400pF 的限制决定。
图 1 标准模式器件和快速模式器件连接到 I2C 总线
由于连接到 I2C 总线的器件有不同种类的工艺( CMOS 、 NMOS 、双极性),逻辑‘ 0 ’和‘ 1 ’的电平不是固定的,它由 VDD 的相关电平决定。每传输一个数据位就产生一个时钟脉冲。
SDA 线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变,如图 2 。
图 2 I2C 总线的位传输
起始( S )条件:当 SCL 线是高电平时, SDA 线从高电平向低电平切换。
停止( P )条件 : 当 SCL 线 是高电平时, SDA 线由低电平向高电平切换。
起始和停止条件一般由主机产生。总线在起始条件后被认为处于忙的状态。在停止条件的某段时间后,总线被认为再次处于空闲状态。
如果产生重复起始条件( Sr ) 而不产生停止条件总线会一直处于忙的状态此时的起始条件( S ) 和重复起始条件( Sr )在功能上是一样的。
ü 发送到 SDA 线上的每个字节必须为 8 位。
ü 每次传输可以发送的字节数量不受限制。
ü 每个字节后必须跟一个响应位。
ü 首先传输的是数据的最高位( MSB )。
图 3 I2C 总线的数据传输
如果从机要完成一些其它功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线 SCL 保持低电平,迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线 SCL 后,数据传输继续。
ü 数据传输必须带响应。
ü 相关的响应时钟脉冲由主机产生。
ü 在响应的时钟脉冲期间,发送器释放 SDA 线(高)。
在响应的时钟脉冲期间,接收器必须将 SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。当然,必须考虑建立和保持时间。
图 4 I2C 总线的响应
通常,被寻址的接收器在接收到的每个字节后,除了用 CBUS 地址开头的报文,必须产生一个响应。
当从机不能响应从地址时(例如它正在执行一些实时函数,不能接收和发送),从机必须使数据线保持高电平。主机然后产生一个停止条件终止传输,或者产生重复起始条件开始新的传输。
如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示,从机使数据线保持高电平,主机产生一个停止或重复起始条件。
如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或者重复起始条件。