深入理解IIC总线

出处:FPGA设计论坛 发布于:2022-07-20 16:21:51

    1.IIC总线结构
    58ccbe62-07d2-11ed-ba43-dac502259ad0.png
    2.IIC时序
    58dd20a4-07d2-11ed-ba43-dac502259ad0.png
    3.IIC概念
    1、开始条件(start condiTIon):
    为了标识传输正式启动, master 设备会将 SCL 置为高电平(当总线空闲时, SDA 和 SCL 都处于高电平状态),然后将 SDA 拉低,这样,所有 slave 设备就会知道传输即将开始。如果两个 master 设备在同一时刻都希望获得总线的所有权,那么谁先将 SDA 拉低,谁就赢得了总线的控制权。在整个通信期间,可以存在多个 start 来开启每新的通信序列( communicaTIon sequence ),而无需先放弃总线的控制权,后面会讲到这种机制。
    注意,在正常传输数据过程中,当 SCL 处于高电平时,SDA 上的值不应该变化。
    2、地址帧(address frame):
    地址帧总是在通信的开始出现。一个 7-bit 的地址是从位( MSB )开始发送的,这个地址后面会紧跟 1-bit的操作符, 1 表示读操作, 0 表示写操作。
    3、应答 AC K/NACK接下来的一个 bit 是 NACK/ACK ,当这个帧中前面 8bits 发送完后,接收端的设备获得 SDA 控制权,此时接收设备应该在第 9 个时钟脉冲之前回复一个 ACK (将 SDA 拉低)以表示接收正常,如果接收设备没有将 SDA 拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由 master来决定如何处理( stop 或 repeated start condiTIon )。
    4、数据帧(data frames):
    在地址帧发送之后,就可以开始传输数据了。Master 继续产生时钟脉冲,而数据则由 master (写操作)或 slave (读操作)放到 SDA 上。每个数据帧 8bits ,数据帧的数量可以是任意的,直到产生停止条件。每一帧数据传输(即每8-bit )之后,接收方就需要回复一个 ACK 或 NACK (写数据时由 slave 发送 ACK ,读数据时由 master 发送 ACK 。当 master 知道自己读完一个 byte 数据时,可发送 NACK 然后接 stop condiTIon )。
    5、停止条件(stop condition):
    当所有数据都发送完成时, master 将产生一个停止条件。停止条件定义为:在 SDA 置于低电平时,将 SCL 拉高并保持高电平,然后将 SDA 拉高。注意,在正常传输数据过程中,当 SCL 处于高电平时,SDA 上的值不应该变化,防止意外产生一个停止条件。
    6、重复开始条件(repeated start condition):
    有时 master 需要在通信中进行多次消息交换(例如与不同的 slave 传输消息,或切换读写操作),并且期间不希望被其他 master 干扰,这时可以使用“重复开始条件” —— 在通信中, master 可以产生多次 start condition ,来完成多次消息交换,再产生一个 stop condition 结束整个通信过程。由于期间没有 stop condition ,因此 master一直占用总线,其他 master 无法切入。为了产生一个重复的开始条件, SDA 在 SCL 低电平时拉高,然后 SCL 拉高。接着 master 就可以产生一个开始条件继续新的消息传输(按照正常的 7-bit/10-bit 地址传输时序)。重复开始条件的传输时序如下图所示:
    58ec830a-07d2-11ed-ba43-dac502259ad0.png
    7、时钟拉伸(clock stretching)(了解即可):
    有时候,低速 slave 可能由于上一个请求还没处理完,尚无法继续接收 master 的后续请求,即 master 的数据传输速率超过了 slave 的处理能力。这种情况下, slave 可以进行时钟拉伸来要求 master 暂停传输数据 —— 通常时钟都是由 master 提供的, slave 只是在 SDA 上放数据或读数据。而时钟拉伸则是 slave 在 master 释放 SCL 后,将 SCL 主动拉低并保持,此时要求 master 停止在 SCL 上产生脉冲以及在 SDA 上发送数据,直到 slave 释放 SCL ( SCL 为高电平)。之后, master 便可以继续正常的数据传输了。可见时钟拉伸实际上是利用了时钟同步的机制(见下文),只是时钟由 slave 产生。
    如果系统中存在这种低速 slave 并且 slave 实现了 clock stretching ,则 master 必须实现为能够处理这种情况,实际上大部分 slave 设备中不包含 SCL 驱动器的,因此无法拉伸时钟。
    所以更完整的 I2C 数据传输时序图为:
    590b9d76-07d2-11ed-ba43-dac502259ad0.png
    8、10-bit 地址空间(了解即可)
    在 10-bit 地址的 I2C 系统中,需要两个帧来传输 slave 的地址。个帧的前 5 个 bit 固定为 b11110 ,后接 slave 地址的高 2 位,第 8 位仍然是 R/W 位,接着是一个 ACK 位,由于系统中可能有多个 10-bit slave 设备地址的高 2bit相同,因此这个 ACK 可能由多有 slave 设备设置。第二个帧紧接着帧发送,包含 slave 地址的低 8 位( 7:0 ),接着该地址的 slave 回复一个 ACK (或 NACK )。
    注意, 10-bit 地址的设备和 7-bit 地址的设备在一个系统中是可以并存的,因为 7-bit 地址的高 5 位不可能是 b11110 。实际上对于 7-bit 的从设备地址,合法范围为 b0001XXX-b1110XXX ,’ X ’表示任意值,因此该类型地址多有 112个(其他为保留地址 [1] )。
    两个地址帧传输完成后,就开始数据帧的传输了,这和 7-bit 地址中的数据帧传输过程相同。
    5921c48e-07d2-11ed-ba43-dac502259ad0.png
    9、时钟同步和仲裁(了解即可):
    如果两个 master 都想在同一条空闲总线上传输,此时必须能够使用某种机制来选择将总线控制权交给哪个 master ,这是通过时钟同步和仲裁来完成的,而被迫让出控制权的 master 则需要等待总线空闲后再继续传输。在单一 master的系统上无需实现时钟同步和仲裁。
    10、时钟同步(了解即可):
    时钟同步是通过 I2C 接口和 SCL 之间的线“与”( wired-AND )来完成的,即如果有多个 master 同时产生时钟,那么只有所有 master 都发送高电平时, SCL 上才表现为高电平,否则 SCL 都表现为低电平。
    11、总线仲裁(了解即可):
    总线仲裁和时钟同步类似,当所有 master 在 SDA 上都写 1 时, SDA 的数据才是 1 ,只要有一个 master 写 0 ,那此时 SDA 上的数据就是 0 。一个 master 每发送一个 bit 数据,在 SCL 处于高电平时,就检查看 SDA 的电平是否和发送的数据一致,如果不一致,这个 master 便知道自己输掉仲裁,然后停止向 SDA 写数据。也就是说,如果 master一直检查到总线上数据和自己发送的数据一致,则继续传输,这样在仲裁过程中就保证了赢得仲裁的 master 不会丢失数据。
    输掉仲裁的 master 在检测到自己输了之后也不再产生时钟脉冲,并且要在总线空闲时才能重新传输。仲裁的过程可能要经过多个 bit 的发送和检查,实际上两个 master 如果发送的时序和数据完全一样,则两个 master都能正常完成整个的数据传输。
    12.IIC注意项
    在正常传输数据过程中,当 SCL 处于高电平时,SDA 上的值不应该变化,因此利用 SCL处于高电平时,数据变化来区分起始和停止信号,和数据传输得以区分。
    SCL处于高电平时:SDA拉低为起始信号,SDA拉高为停止信号。
关键词:IIC总线

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!