NXP:I2C总线技术规范和用户手册(中文版)(二)
本文是对NXP I2C-bus specification and user manual/UM10204/Rev. 6 — 4 April 2014的英文翻译。
3 I2C总线协议
3.1 标准模式,快速模式和快速加模式的I2C总线协议
二线,串行数据SDA和串行时钟SCL,在连接到总线上的设备之间传输信息。每个设备都通过唯一的地址识别(无论是微控制器,LCD驱动器,内存或键盘接口),并且运行作为一个传送器或接收器,这个依赖于设备的功能。一个LCD驱动器可能仅仅是一个接收器,然而一个内存可能传送或接收数据。除了传送器和接收器,当执行数据传输的时候,设备可能被考虑作为一个master或slave(参看表1)。一个master作为一个在总线上发送数据,生成时钟信号去允许传输的设备。那时,任何被寻址的设备都被当做一个slave。
表1. I2C总线术语的定义
术语 | 描述 |
---|---|
发送器 | 发送数据到总线的设备 |
接收器 | 从总线上接收数据的设备 |
Master | 启动一个传输,生成时钟信号,终止一个传输的设备 |
Slave | 被master寻址的设备 |
多主机 | 超过一个master同时试图控制总线而不破坏信息 |
仲裁 | 一个程序确保如果超过一个master同时想去控制总线,只有一个被允许这样做,获胜信息不会被破坏 |
同步 | 一个程序确保两个或多个设备同步时钟信号 |
I2C总线是一个多master总线。这意味着超过一个设备有能力控制总线。因为master通常是微控制器,让我们考虑连接到I2C总线上的两个微控制器的数据传输的情况(参看图2)。 | |
这个例子突出了I2C总线上master-slave和receiver-transmitter的关系。需要注意的是这些关系不是永久的,而是取决于当时数据传输的方向。数据的传输按如下方式执行: | |
1.假设微控制器A想发送信息给为控制器B: | |
微控制器A(master),寻址微控制器B(slave); | |
微控制器A(master发送器),发送数据给微控制器B(slave接收器); | |
微控制器A中止传输。 | |
2.如果为控制器A想从微控制器B接收信息; | |
微控制器A(master)寻址微控制器B(slave); | |
微控制器A(master发送器),从微控制器B(slave接收器)接收数据; | |
微控制器A中止传输。 | |
即使在这种情况下,主控器(微控制器A)也会产生定时并终止传输。 | |
连接超过一个微控制到I2C总线上意味着超过一个master同时启动数据传输。为了避免这样的事件可能带来的混乱,开发了一个仲裁程序。这样的程序依赖于I2C总线上所有的I2C接口线与连接。 | |
如果两个或更多的master试图发送信息到总线上,第一个产生1而另一个产生0的则丢失仲裁。在仲裁期间的时钟信号是一个同步的使用连接到SCL线的线与master产生的时钟组合(关于仲裁的更详细信息参考3.1.8部分)。 | |
I2C总线上时钟信号的产生一直是master设备的职责;当总线上传送数据时,每一个mater产生自己的时钟信号。当仲裁发生时,它们被一个慢速的从设备按住时钟线或被另一个主设备拉伸,Master上的总线时钟信号只能被改变。 | |
表2总结了I2C总线技术规范中强制和选择部分的使用,以及哪一个系统配置使用它们。 | |
[1]也指作为slave的master | |
[2]时钟拉伸是一些slave的特性。如果在一个系统中没有slave拉伸时钟(维持SCL为低),master不需要被设计去处理这个程序。 | |
[3]位敲击(软件仿真)多master系统应该考虑一个START字节。参考3.1.15部分。 |
3.1.1 SDA和SCL信号
SDA和SCL两个是双向线,通过一个电流源或上拉电阻连接到正的电源电压(参看图3)。当总线是空闲的时候,两个线是为高。连接到总线上的设备的输出级必须有开路漏极或开路集电极来执行线与功能。I2C总线上的数据能以标准模式最高100kbit/s,快速模式最高400kbit/s,快速加模式最高1Mbit/s,高速模式最高3.4Mbit/s的速率传输。总线电容限制了连接到总线上的接口的数量。
如果在总线上没有设备拉伸时钟,对于单一master的应用,master的SCL输出可能是一个推拉驱动器设计。
3.1.2 SDA和SCL逻辑等级
由于各种可能连接到I2C总线上不同设备(CMOS, NMOS和两极),逻辑等级0(低)和1(高)是不固定的,依赖于相关的Vdd的等级。输入参考等级被设定为Vdd的30%和70%。参考图38,时序图。一些遗留设备输入等级是固定在Vil=1.5v,Vih=3.0v,但是所有新设备要求这个30%/70%的规格。参考第6部分电气规格。
3.1.3 数据有效性
SDA线上的数据在时钟为高时必须稳定。数据线上高或低的状态仅仅在时钟信号SCL为低时改变(参看图4)。每一个数据位的传输都有一个时钟脉冲产生。
3.1.4 START和STOP条件
所有事务都是以START(S)开始和STOP(P)结束(参看图5)。当SCL是高时,在SDA线上一个从高到低的转变定义了一个开始条件。当SCL是高时,在SDA线上一个从低到高的转变定义了一个停止条件。
开始和停止条件一直有master生成。开始条件以后,总线被认为是忙的状态。停止条件以后的一段时间内,总线被认为是空闲的。总线空闲状况是专门在第6部分说明。
如果重复的开始(Sr)条件生成代替停止条件,总线保持忙碌。在这方面,START (S)和重复的START (Sr)条件在功能上是相同的。因此,在本文档的其余部分中,除非Sr特别相关,否则S符号将作为通用术语来表示START和重复START条件。
如果它们包含必要的硬件接口,通过设备对START和STOP条件的检测是容易的。然而,没有这种接口的微控制器必须在每个时钟周期内至少采样两次SDA线,以感知过渡。
3.1.5 字节格式
放置在SDA线上的每一个字节必须是8bit宽。每一次传输可以被传输的字节数是没有严格限制的。每一个字节后面必须跟一个ACK bit位。数据的最高位首先被传输(参看图6)。如果一个slave不能接收或发送另一个完整的字节数据,直到它已经执行了一些其他的功能,例如服务内部中断,它可以保持时钟线SCL低,迫使主机进入一个等待状态。当从机准备好接收另一个字节的数据并释放时钟线SCL时,数据传输就会继续。
3.1.6 ACK和NACK
确认发生在每一个字节之后。该确认位允许接收方向发送方发出信号,表示该字节已被成功接收,并且可以发送另一个字节。Master生成时钟脉冲,包括告知收到第九个时钟脉冲。
确认信号定义如下:在确认时钟脉冲期间,传送器释放SDA线,因此接收器置SDA线为低。在时钟脉冲为高期间,接收器保持稳定的低(参看图4)。建立和保持时间(在第6部分指定)必须考虑在内。
在第九个时钟脉冲期间,当SDA保持为高,这个被定义为非确认Not Acknowledge。然后master生成一个stop位来退出传输或重新生成一个开始位开始一个新的传输。有五种状况可能导致生成NACK位:
1.在总线上没有传送器指定地址的接收器,因此没有设备响应一个确认位;
2.接收器不能接收或传送,因为它正在执行一些实时的功能,没有准备好与master开始通信;
3.在传输期间,接收器得到不能理解的数据或命令;
4.在传输期间,接收器不能接收更多的数据字节;
5.一个master接收器必须发送slave传送器传输结束的信号。
3.1.7 时钟同步
两个master可以同时开始在总线上开始传输,因此必须有一种方法决定哪一个master控制总线,完成传输。这个是被时钟同步和仲裁完成。在单一master系统中,不需要时钟同步和仲裁。
时钟同步是通过I2C接口到SCL线的线与连接实现的。这意味着SCL线上的HIGH到LOW的过渡会导致相关的主时钟开始计算它们的LOW周期,一旦主时钟变为LOW,它就会保持SCL线上的这个状态,直到时钟达到HIGH状态(图7)。然而,如果另一个时钟仍然在它的LOW周期内,这个时钟的LOW到HIGH的过渡可能不会改变SCL线的状态。因此SCL线被具有最长低周期的master保持为低。具有更短low周期的master在这段时间内进入一个为高的等待状态。
当所有相关的master已经计算了它们低周期的数时,时钟线释放,置高。在master时钟和SCL线的状态是没有不同的,所有的master开始计算置高的周期。完成高周期的第一个master再次拉SCL为低。
通过这种方式,一个同步的SCL时钟产生,它的LOW周期由时钟LOW周期最长的master决定,它的HIGH周期由时钟HIGH周期最短的master决定。
3.1.8 仲裁
仲裁,像同步一样,指的是协议的一部分要求,只有在系统中超过一个主机时才需要。Slave不参与仲裁过程。只有在总线空闲时,master才可以开始一个传输。两个master在START条件的最小保持时间(tHD;STA)产生一个START条件,从而在总线上产生一个总线START条件。然后,仲裁决定哪一个master完成它的传输。
仲裁逐比特进行。在每一个比特中,当SCL为高,每个master将检查SDA是否和它发送的相匹配。这个过程可能发送很多bit。只要传输时相同的,两个master实际可能完成一个完整的没有错误的传输。Master第一次试着发送一个高,但是检测到SDA是低,master知道它已经丢失了仲裁,然后关闭它的SDA输出驱动。另外一个maser继续完成它的传输。
仲裁过程不会丢失信息。丢失仲裁的master能产生时钟脉冲,直到丢失仲裁的一个字节结束,并且必须在总线空闲时,重新启动它的事务。
如果主机同时具有从机功能,主机在寻址阶段丢失了仲裁,那么获胜的主机可能正在寻址它。因此,丢失的master必须立即转换到slave模式。
图8显示了两个master仲裁的过程。更多的master可能参与到仲裁中,这取决于有多少个master连接到总线上。当生成DATA1的master内部数据的电平和SDA线上实际的电平出现差异时,DATA1输出关闭。这不影响获胜master启动的数据传输。
因为I2C总线的控制完全取决于竞争master发送的地址和数据,因此没有中心master,也没有任何优先级顺序。
如果仲裁过程在当一个master发送重复的START或STOP的状况而另外一个master仍然在发送数据的时刻发生,这是一个未定义的状况。换句话说,以下情况结合在一起导致一个未定义的状况。
1.Master1发送重复的START且Master2发送一个数据位;
2.Master1发送一个STOP且Master2发送一个数据位;
3.Master1重复发送START且Master2发送STOP;
3.1.9 时钟拉伸
时钟拉伸通过保持SCL为低暂停一个事务。事务直到SCL重新释放为高,事务才可以继续。时钟拉伸是可选择的,实际上,大多数的salve设备不包括一个SCL驱动,因此它不能拉伸时钟。
在字节级,一个设备能以较快速度接收数据字节,但是需要时间去存储一个接收的字节或准备另一个要传输的字节。在接收并确认一个字节后,Slave可以将SCL线保持在LOW状态,迫使Master进入等待状态,直到Slave在握手过程中准备好进行下一个字节的传输。
在bit级,像微控制器这样的具有或没有I2C有限硬件的device能通过延长每个时钟低周期来降低总线时钟。任何master和此device内部的运行速度相适应。
在高速模式,握手特性只能在字节级中使用。
3.1.10 slave时钟和R/W位
数据传输遵循以下图9显示的格式。START后,发送slave的地址。地址是7bit,第8bit为数据方向位(R/W)-0表示写传输,1表示读数据(参考图10)。数据传输一直通过master发送STOP结束。然而,如果一个master仍然希望在总线上通信,它能产生一个重复的START(Sr)并在不首先生成STOP条件的情况下访问另一个从服务器。在这样的一个传输内,多种读写格式的结合是可能的。
可能的数据传输是:
1.Master-传送器传送给Slave-接收器。传输的方向不改变。Slave接收器确认每一个字节。
2.第一个字节后,Master立即读Slave(参考图12)。在第一次确认的时刻,master-发送器变为master接收器,slave接收器变为slave-发送器。第一次确认仍然由salve产生。master随后产生确认。STOP由master产生,它在STOP条件之前发送一个not-acknowledge (a)。
3.结合的格式(参考图13)。在一个传输的方向改变过程中,START和Slave地址都是重复的,但是R/W位翻转。如果master接收器发送一个重复的START,在重复的START之前发送一个not-acknowledge (a)。
注意:
1.例如,可以使用结合的格式去控制一个串行内存。内部memory位置必须在第一个数据字节期间写入。START和地址重复之后,数据可以传输。
2.所有对先前访问的内存位置的自动递增或递减的决定,等等,都是由设备的设计者做出的。
3.每一个字节都跟着一个确认位,在序列中用A或A-表示。
4.I2C总线兼容设备必须在接收到START或重复START时复位它们的总线逻辑,以便它们都预期的发送slave地址,即使这些START条件没有按照适当的格式定位。
5.START之后立即跟着一个STOP是不合法的。然而,许多设备被设计成在这种条件下正常工作。
6.每一个连接到总线上的设备是可以通过一个独特的地址寻址。通常存在一个简单的master/slave关系,但是有能同时接收和响应的多个相同的slave是可能的,例如在组广播中。
这种技术在使用总线转换设备时效果最好,像PCA9546A,其中所有四个通道是打开的,同时配置相同的设备,理解决定每一个slave确认,然后依次打开一个通道从而读回每一个单独设备的配置去确认编程是不可能的。参考单个元件data sheets。
3.1.11 10bit寻址
10bit扩展了可能地址的数量。具有7bit和10bit地址的设备可以连接到相同的I2C总线,而且7bit和10bit的寻址可以在所有的总线速度中使用。当前,10bit寻址没有被广泛使用。
10bit slave地址由跟在START或重复START后的前两个字节组成。
第一个字节的前7个bit是1111_0XX,最后两个bit XX是两个10bit地址的最高位,第一个字节的第8个bit是R/W位,这一位决定信息的方向。
尽管预留地址位1111_XXXX是由八种可能的组合,但是10bit寻址只使用四种1111_0XX组合。剩下的四种组合1111_1XX是为将来的I2C总线增强预留。
之前描述的7bit地址的所有读写格式的组合可能具有10bit地址。详细描述如下两个:
1.Master-传送器传送给具有10bit slave地址的slave-接收器。传送方向不改变(参看图14)。当一个10bit地址符合START条件时,每一个slave将salve地址(1111_0XX)第一个字节的前7个bit和它自己的地址比较,检测第8个bit(R/W方向位)是否是0。超过一个device发现匹配并产生一个确认(A1)是可能的。发现匹配的所有slave将slave地址的第二个字节的8个bit(XXXX_XXXX)和自己的地址比较,但是只有一个slave发现匹配,并且产生一个确认(A2)。匹配的slave保持被master寻址,直到它接收一个STOP或一个重复的START,后面跟着一个不同的slave地址。
2.Master-接收器读取具有10bit地址的slave-发送器。第二个(R/W)位后,传输方向改变(参考图15)。直到并包括确认位A2,这个步骤是和描述一个master-传送寻址slave-接收相同。重复的START之后(Sr),一个匹配的slave会记住它之前被寻址过。这个slave然后检查Sr后面的slave地址的第一个字节的前7位是否与START条件(S)之后的7位相同,并测试第8位(R/W)是否为1。如果匹配,slave认为它作为一个传送器寻址,且生成一个确认A3。slave保持被寻址直到它接收一个STOP或直到它接收另外一个重复START,这个重复START后面跟着一个不同的salve地址。一个重复START后,所有其它slave设备也将把slave地址(1111_0XX)的第一个字节的前7个bit和它们自己的地址比较,和测试第8bit(R/W)。然而,它们都不会被寻址,因为R/W(对10bit设备)或1111_0XX slave地址(对7bit设备)不匹配。
具有10bit地址的salve设备具有和7bit地址的salve设备以相同的方式响应广播呼叫。硬件master能在广播呼叫后传送它的10bit地址。在这种情况下,广播呼叫的地址字节后面跟着两个连续字节,包含master-传送器的10bit地址。这种格式显示在图15中,第一个DATA字节包含master地址的低8bit。
START字节0000_0001(01h)像在7bit寻址一样在10bit寻址之前。
3.1.12 预留地址
两组八位地址(0000_XXX和1111_XXX)为将来可能的用于预留,显示在表3。
[1] 广播地址为包括软件复位的几个功能使用。
[2] 不允许在START字节接收时确认。
[3] 预留CBUS地址,使CBUS兼容设备和I2C-bus兼容设备能够在同一系统中混合使用。I2C总线的兼容设备不允许在这个地址接收时响应。
[4] 其中包括为不同总线格式保留的地址,以使I2C和其他协议能够混合使用。只有能和这样格式工作的I2C兼容设备允许对这样的地址响应。
本地系统内的地址分配由系统架构师负责,系统架构师必须考虑总线上使用的设备以及未来与其他传统i2c总线的任何交互。例如,有7个用户可分配的地址pin脚的设备允许分配所有的128个地址。如果知道保留地址永远不会被用于它的预期目的,保留地址可以被用作从地址。
3.1.13 广播呼叫地址
广播呼叫地址是对连接到I2C总线上的每一个设备同时进行寻址。然而,如果一个设备不需要广播呼叫结构提供的任何数据,它能通过不发送确认来忽略这个地址。如果一个设备确实需要从广播地址获取数据,它对这个地址发出确认,并且行为表现像一个salve-接收器。如果超过一个设备响应,Master事实上不知道有多少个设备确认。第二个和后面的字节被每一个可以处理这个数据的slave-接收器确认。不能处理这些字节中的任何一个字节的slave通过不确认忽略它。同样,如果一个或多个slave进行了应答,那么不应答将不会被master看到。广播呼叫地址的含义一直在第二个字节中指定(参看图16)。
有两种情况需要考虑:
1.当低位bit B是0;
2.当低位bit B是1。
当bit B是0时,第二个字节有如下的定义:
1.0000_0110(06h):通过硬件对slave地址可编程部分进行复位和写入。在接收到这两个字节序列时,对所有被设计为可以对广播呼叫地址响应的设备复位并接收它们地址的可编程部分。必须采取预防措施,以确保设备在施加电源电压后,设备不会拉下SDA或SCL线,因为它们低电平会阻塞总线。
2.0000_0100(04h):通过硬件写入slave地址的可编程部分。行为如上,但设备不会复位。
3.0000_0000(00h):此代码不允许作为第二个字节使用。
编程程序的序列在适当的设备数据表中公布。剩余的代码还没有被修复,设备必须忽略它们。
当bit B是1时,两个字节序列是一个硬件广播呼叫。这意味着这个序列被硬件master设备发送,例如键盘扫描仪,可以通过编程传送一个需要的salve地址。因为一个硬件master不会事先知道要传输的信息发送给哪一个设备,它只能产生这个硬件广播呼叫和它本身的地址---向系统标识自己(参看图17)。
保留在第二个字节的7个bit包含硬件master的地址。这个地址被连接到总线上的智能设备识别(例如,微控制器),然后总线接收来自硬件master的信息。如果硬件master也作为slave,slave地址与master地址相同。
在一些系统中,另一种选择可能是硬件master传送器以slave-接收器的模式设置。通过这种方式,配置master的系统可以告诉硬件主发送器(现在处于从接收模式)必须向哪个地址数据发送(参见图18)。在这个编程过程之后,硬件主机保持在master-发送器模式。