1. 引言
I2C总线是事实上的世界标准,现在由超过50家公司制造的1000多种不同的IC实现。此外,多功能I2C总线用于各种控制架构,如系统管理总线(SMBus),电源管理总线(PMBus),智能平台管理接口(IPMI),显示数据通道(DDC)和高级电信计算架构(ATCA))。
在消费者电子电讯和工业电子中看上去不相关的设计里经常有很多相似的地方例如几乎每个系统都包括:
为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips (现NXP)开发了一个简单的双向两线总线实现有效的IC 之间控制这个总线就称为Inter IC 或I2C 总线。所有符合I2C总线的器件组合了一个片上接口使器件之间直接通过I2C 总线通讯。
I2C总线是由飞利浦在80年代早期设计开发的,允许在同一电路板上的组件之间轻松通信,一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。飞利浦半导体于2006年迁移至恩智浦。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。
总线网站:https://www.i2c-bus.org/
官方协议文档:https://www.i2c-bus.org/specification/
CSDN文档地址:https://download.csdn.net/download/xiewinter/11243770
2. 特征
只要求两条总线线路:一条串行数据线(serial data line ,SDA),一条串行时钟线(serial clock line , SCL)
每个连接到总线的器件都可以通过唯一的地址和始终存在的简单的主/从机关系进行软件寻址; 主机可以作为主机发送器或主机接收器
它是真正的多主总线,包括冲突检测和仲裁,以防止两个或多个主设备同时启动数据传输时数据损坏。
串行,8位,双向数据传输在标准模式下最高可达100 kbit / s,在快速模式下最高可达400 kbit / s,在快速+模式下最高可达1 Mbit / s, 或高速模式下高达3.4 Mbit / s。
串行,8位,单向数据传输在超快速模式下高达5 Mbit / s
片上的滤波器,可以滤去总线数据线上的毛刺波保证数据完整
可以连接到同一总线的IC数量仅受最大总线电容的限制。 在某些条件下可能允许更大的电容。详见官方参考手册。
3. 规范
I2C 总线是一个多主机的总线这就是说可以连接多于一个能控制总线的器件到总线。如果两个或多个主机尝试发送信息到总线在其他主机都产生0 的情况下首先产生一个1 的主机将丢失仲裁。仲裁时的时钟信号是用线与连接到SCL 线的主机产生的时钟的同步组合。
在I2C总线上生成时钟信号始终是主设备的责任; 在总线上传输数据时,每个主机都会生成自己的时钟信号。 来自主设备的总线时钟信号只有在被慢速从设备按下时钟线或由仲裁发生时由另一个主设备拉伸时才能被改变。
3.1 SDA 和 SCL 信号
SDA和SCL都是双向线路,通过电流源或上拉电阻连接到正电源电压(见图3)。 当总线空闲时,两条线都是HIGH。 连接到总线的器件的输出级必须具有漏极开路或开路集电极,以执行线与功能。 I2C总线上的数据可以在标准模式下以高达100 kbit / s的速率传输,在快速模式下最高可达400 kbit / s,在快速+模式下最高可达1 Mbit / s或以上 在高速模式下为3.4 Mbit / s。 总线电容限制了连接到总线的接口数量。
对于单个主应用,如果总线上没有可以延长时钟的器件,则主机的SCL输出可以是推挽式驱动器设计。
3.2 SDA 和 SCL 逻辑电平
由于可以连接到I2C总线的各种不同技术设备(CMOS,NMOS,双极),逻辑“0”(低)和“1”(高)的电平不固定,取决于 相关的VDD电平。 输入参考电平设置为VDD的30%和70%; VIL为0.3VDD,VIH为0.7VDD。 请参见图38,时序图。 一些传统器件输入电平固定为VIL = 1.5 V和VIH = 3.0 V,但所有新器件都需要30%/ 70%的规格。
3.3 数据的有效性
SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。为传输的每个数据位生成一个时钟脉冲。
3.4 START and STOP 条件
所有的传输都是所有事务都以START(S)开始,并由STOP(P)终止(见图5)。
SCL 线是高电平时,SDA 线从高电平向低电平切换,表示起始条件。
当SCL 是高电平时,SDA 线由低电平向高电平切换,表示停止条件。
起始和停止条件一般由主机产生总线在起始条件后被认为处于忙的状态在停止条件的某段时间后总线被认为再次处于空闲状态。
如果产生重复起始Sr 条件而不产生停止条件总线会一直处于忙的状态此时的起始条件S和重复起始Sr 条件在功能上是一样的,因此在本文档的剩余部分符号S 将作为一个通用的术语既表示起始条件又表示重复起始条件除非有特别声明的Sr。
如果连接到总线的设备包含必要的接口硬件,则可以轻松检测START和STOP条件。 但是,没有这种接口的微控制器必须在每个时钟周期至少两次采样SDA线来检测是否发生电平转换。
3.5 字节格式
发送到SDA 线上的每个字节必须为8 位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位MSB (见图6 )。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续
3.6 Acknowledge (ACK) and Not Acknowledge (NACK)
响应发生在每个字节之后。 应答位允许接收器向发送器发信号通知该字节已成功接收,并且可以发送另一个字节。 主机产生所有时钟脉冲,包括应答第9个时钟脉冲。
ACK 信号:在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平(见图4) 。当然必须考虑建立和保持时间。
NACK信号:当在第9个时钟脉冲期间SDA保持高电平时,这被定义为非应答信号。主设备可以生成STOP条件以中止传输,或者生成重复的START条件以开始新的传输。 导致生成NACK的条件有五个:
1.总线上没有带有发送地址的接收器,因此没有设备响应确认。
2.接收器无法接收或发送,因为它正在执行某些实时功能,并且尚未准备好开始与主站通信。
3.在传输过程中,接收器获取它不理解的数据或命令。
4.在传输过程中,接收器无法再接收数据字节。
5.主接收器必须发信号通知从发送器的传输结束。
3.7 时钟同步
两个主设备可以同时开始在空闲总线上进行传输,并且必须有一种方法来决定哪个控制总线并完成其传输。 这是通过时钟同步和仲裁完成的。 在单主系统中,不需要时钟同步和仲裁。
时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL线保持这种状态直到到达时钟的高电平。但是,如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL线的状态。因此,SCL线被有最长低电平周期的器件保持低电平,此时,低电平周期短的器件会进入高电平的等待状态。
当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后器件时钟和SCL线的状态没有差别。而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。
这样,产生的同步SCL时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。
3.8 仲裁
仲裁与同步一样,只有在系统中使用多个主设备时才需要协议的一部分。主机只能在总线空闲的时侯启动传输。两个或多个主机可能在起始条件的最小持续时间(tHD;STA)内产生一个起始条件,结果在总线上产生一个规定的起始条件。
当SCL 线是高电平时,仲裁在SDA 线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。
仲裁是逐位进行的,在每个位期间,当SCL为高电平时,每个主器件都会检查SDA电平是否与它发送的电平相匹配。 此过程可能需要很多位。 只要传输完全相同,两个主设备实际上可以无错误地完成整个事务。 主设备第一次尝试发送HIGH,但检测到SDA电平为低电平,主机知道它已经丢失仲裁并关闭其SDA输出驱动器。
因为,I2C 总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机,可以产生时钟脉冲直到丢失仲裁的该字节末尾。
如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁的主机在寻址的器件。因此,丢失仲裁的主机必须立即切换到它的从机模式。
由于I2C总线的控制仅取决于竞争主机发送的地址和数据,因此没有中央主机,也没有总线上的任何优先级顺序。
如果在一个主设备发送重复START或STOP条件而另一个主设备仍在发送数据时仲裁过程仍在进行中,则存在未定义的条件。 换句话说,仲裁在不能下面情况之间进行:
•重复起始条件和数据位:主设备1发送重复的START条件,主设备2发送数据位。
•停止条件和数据位:主设备1发送STOP条件,主设备2发送数据位。
•重复起始条件和停止条件:主站1发送重复的START条件,主站2发送STOP条件。
3.9 Clock stretching
时钟延长通过将SCL线保持为低电平来暂停事务。 在该行再次释放HIGH之前,该事务不能继续。 时钟延长是可选的,事实上,大多数从设备不包括SCL驱动程序,因此它们无法延长时钟。
在字节级,设备可能能够以快速速率接收数据字节,但需要更多时间来存储接收到的字节或准备另一个要传输的字节。 然后,从器件可以在接收和确认一个字节后将SCL线保持为低电平,以强制主器件进入等待状态,直到从器件准备好在一种握手过程中进行下一个字节传输。
在位级,诸如具有或不具有用于I2C总线的有限硬件的微控制器的设备可以通过延长每个时钟LOW周期来减慢总线时钟。 任何主站的速度都适合该设备的内部运行速率。
3.9 从机地址和R/W位
数据传输遵循图9中所示的格式。在START条件(S)之后,发送从地址。 该地址长7位,后跟第8位,即数据方向位(R / W) - “0”表示传输(WRITE),“1”表示数据请求(READ)(参见图)10)。数据传输总是由主机产生的STOP条件(P)终止。 但是,如果主设备仍希望在总线上进行通信,则它可以生成重复的START条件(Sr)并在不首先生成STOP条件的情况下寻址另一个从设备。在这种传输中,可以进行不同读/写格式的各种组合。
可能的数据传输格式是:
主发送器发送到从接收器。 传输方向没有改变(见图11)。 从接收器确认每个字节。
主机在第一个字节后立即读取从机(参见图12)。 在第一次确认时,主发送器变为主接收器,从接收器变为从发送器。 第一次确认仍由从机生成。 主设备生成后续确认。 STOP条件由主机产生,它在STOP条件之前发送一个非应答(A)。
组合格式(见图13)。 在传输改变方向时候,START条件和从地址都重复,但R / W位反转。 如果主接收器发送重复START条件,它会在重复START条件之前发送一个非应答(A)
注意:
复合格式可以用于例如控制一个串行存储器。在第一个数据字节期间,要写内部存储器的位置,在重复起始条件和从机地址后,数据可被传输。
自动增加或减少之前访问的存储器位置等所有决定都由器件的设计者决定
每个字节都跟着一个响应位,在序列中用A 或A 模块表示
兼容I2C 总线的器件在接收到起始或重复起始条件时必须复位它们的总线逻辑,甚至在这些起始条件没有根据正确的格式放置,它们也都期望发送从机地址。
起始条件后面立即跟着一个停止条件报文为空是一个不合法的格式
连接到总线的每个设备都可以通过唯一的地址寻址。 通常存在简单的主/从关系,但是可以具有多个可以同时接收和响应的相同从属,例如在组广播中。
3.10 10位地址
10位寻址扩展了可能的地址数量。 具有7位和10位地址的器件可以连接到同一个I2C总线,7位和10位寻址都可以用于所有总线速度模式。 目前,10位寻址没有被广泛使用。
10位从地址由START条件(S)或重复START条件(Sr)之后的前两个字节构成。
第一个字节的前七位是组合1111 0XX,其中最后两位(XX)是10位地址的两个最高有效位(MSB); 第一个字节的第八位是决定消息方向的R / W位。
尽管保留地址位1111XXX有八种可能的组合,但只有四种组合1111 0XX用于10位寻址。 其余四种组合1111 1XX保留用于未来的I2C总线增强。
之前针对7位寻址描述的读/写格式的所有组合都可以通过10位寻址实现。 这里有两个详细说明:
主机发送器传输10位从地址发送到从接收器。
主接收器使用10位从地址读取从发送器。
3.11 保留地址
3.12 广播呼叫地址
广播呼叫地址是用来寻址连接到I2C 总线上的每个器件。但是,如果器件在广播呼叫结构中不需要任何数据,它可以通过不发出响应来忽略这个地址。如果器件要求从广播呼叫地址得到数据,它会响应这个地址并作为从机接收器运转。第二个和接下来的字节会被能处理这些数据的每个从机接收器响应。广播呼叫地址的含意通常在第二个字节说明(图16)
这里要考虑两种情况
• 当最低位B 是0
• 当最低位B 是1
当位B 是0 时,第二个字节的定义如下
0000 0110 (06h): 通过硬件写入和复位从机地址的可编程部分。接收到这个两字节序列时所有打算响应这个广播呼叫地址的器件将复位并接受它们地址的可编程部分。要采取预防措施确保器件不会在加上电源电压后将SDA 或SCL 线拉低因为这些低电平会阻塞总线。
0000 0100 (04h): 通过硬件写从机地址的可编程部分。所有通过硬件定义地址可编程部分和响应广播呼叫地址的器件会在接收这两个字节序列时锁存可编程的部分。器件不会复位。
0000 0000 (00h): 这个代码不允许在第二个字节使用
3.13 软件复位
在广播呼叫(0000 0000)之后,发送0000 0110(06h)作为第二个字节会导致软件复位。 此功能是可选的,并非所有设备都响应此命令。 在接收到这个2字节序列时,所有设计用于响应广播呼叫地址的设备都会复位并接收其地址的可编程部分。 必须采取预防措施以确保器件在施加电源电压后不会下拉SDA或SCL线路,因为这些低电平会阻塞总线。
3.14 起始字节
微控制器可以通过两种方式连接到I2C总线。 具有片上硬件I2C总线接口的微控制器可以编程为仅被来自总线的请求中断。 当设备没有这样的接口时,它必须通过软件持续监控总线。 显然,微控制器监控或轮询总线的次数越多,执行其预期功能所花费的时间就越少。
因此,快速硬件设备和依赖软件轮询的相对较慢的微控制器之间存在速度差异。
在这种情况下,数据传输之前可以有一个比正常情况长得多的启动程序(参见图19)。 启动程序包括:
• A START condition (S)
• A START byte (0000 0001)
• An acknowledge clock pulse (ACK)
• A repeated START condition (Sr).
在要求总线访问的主机发送起始条件S 后,发送起始字节(00000001), 因此另一个微控制器可以采样以低采样速率采样SDA 线,直到在启动字节检测到7 个0 。在SDA 线检测到这个低电平后,微控制器切换到一个更高的采样速率寻找用于同步的重复起始条件Sr。
接收到重复起始条件Sr 后硬件接收器会复位,从而忽略了起始字节。
3.15 总线清除
在极少数情况下,时钟(SCL)被置为低电平,如果您的I2C器件具有硬件复位输入,则优先过程是使用HW复位信号复位总线。 如果I2C器件没有硬件复位输入,则重启器件电源以激活强制内部上电复位(POR)电路。
如果数据线(SDA)保持低电平,主机应发送9个时钟脉冲。 保持总线为低电平的器件应该在这九个时钟内的某个时间释放它。 如果没有,则使用硬件复位或循环电源清除总线。
4. 超快速模式I2C总线协议
略
5. I2C总线通信协议的其他用途
I2C总线用作多个系统架构的通信协议。 除基本I2C规范外,这些体系结构还添加了命令集和特定于应用程序的扩展。 通常,由于协议和物理接口相同,因此可以在这些架构中的任何一个中使用简单的I2C总线设备,例如I / O扩展器。
5.1 CBUS 兼容性
CBUS接收器可以连接到标准模式I2C总线。 但是,必须连接称为DLEN的第三条总线,并省略应答位。 通常,I2C传输是8位字节的序列; 兼容CBUS设备具有不同的格式。
在混合总线结构中,I2C总线设备不得响应CBUS消息。 因此,保留了没有I2C总线兼容设备响应的特殊CBUS地址(0000 001X)。 在传输CBUS地址之后,可以激活DLEN线路并发送CBUS格式传输。 在STOP条件之后,所有设备都准备好接受数据。
主发送器可以在发送CBUS地址后发送CBUS格式。 传输以STOP条件结束,由所有设备识别。
备注:如果CBUS配置已知,并且未预见到与CBUS兼容设备的扩展,则允许设计人员根据所用设备的特定要求调整保持时间。
5.2 SMBus - 系统管理总线
SMBus使用I2C硬件和I2C硬件寻址,但增加了用于构建特殊系统的二级软件。 特别是,其规范包括可以进行动态地址分配的地址解析协议。
硬件和软件的动态重新配置允许总线设备“热插拔”并立即使用,无需重新启动系统。 设备会自动识别并分配唯一的地址。 这种优势导致即插即用的用户界面。 在这两种协议中,系统主机和系统中可以具有主设备或从设备的名称和功能的所有其他设备之间存在非常有用的区别。
SMBus现在在大多数PC中用作系统管理总线。 它由英特尔和其他公司于1995年开发,它修改了一些I2C电气和软件特性,以便与便携式设备快速降低的电源预算更好地兼容。 SMBus还具有“高功率”版本2.0,包括4 mA吸收电流,除非上拉电阻的大小符合I2C总线电平,否则不能由I2C芯片驱动。
未完待续。。。
6. 总线速度
最初,I2C总线限制为100 kbit / s操作。 随着时间的推移,规范已经增加了几个,因此现在有五种运行速度类别。 标准模式,快速模式(Fm),快速模式加(Fm +)和高速模式(Hs模式)设备向下兼容 - 任何设备都可以在降低总线速度。
超快速模式设备与以前的版本不兼容,因为总线是单向的。
双向总线:
- 标准模式(Sm),比特率高达100 kbit / s
- 快速模式(Fm),比特率高达400 kbit / s
- 快速模式加(Fm +),比特率高达1 Mbit / s
- 高速模式(Hs模式),比特率高达3.4 Mbit / s。
单向总线:
- 超快速模式(UFm),比特率高达5 Mbit / s
未完待续。。。
上一篇:串口接收数据并对数据进行处理
下一篇:SPI总线详解笔记
推荐阅读最新更新时间:2024-11-10 11:36