I2C总线的10bit地址以及通用广播地址

接口/总线/驱动

1122人已加入

描述

  一、I2C支持两种数据格式:

  7bit/10bit寻址数据格式

  7bit/10bit寻址和重复开始信号的格式

  从设备地址:

  总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.

  系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。

  I2C总线

  二、10bit地址

  10bit的寻址扩展可能寻址的数目。有7bit地址和10bit地址的设备可以连接到相同的I2C总线上,而且7bit寻址和10bit寻址都可以用在所有的总线速度模式下。不过,10bit寻址用的不多。

  10bit的从机地址由开始条件(S)或重复开始条件(Sr)后的两个字节组成。第一个字节的前7位是1111 0XX,XX是10bit地址的最高有效位的前两位。第一个字节的第8bit是读写位,决定传输方向。

  尽管1111 XXX有8种可能的组合,然后只有1111 0XX这四种可以用于10bit寻址。剩下的1111 1XX这四种是为将来I2C扩展用的。

  前面描述的用于7bit寻址的读写格式都适用于10bit寻址。详情如下:

  1.主-发送器传输到从-接收器(10bit从机地址)

  I2C总线

  从图中看出传输方向不变。当接收到开始条件后的10bit地址,从机就和它自己的地址比较从机地址的第一个字节(1111 0XX),并检查第八个bit(读写位)是否为0.有可能多个设备都匹配并产生应答(A1)。接下来所有从机开始匹配自己地址与第二个字节的8个bit(XXXX XXXX),这时就只有一个从机匹配并产生应答(A2)。被主机寻址匹配的从机会保持被寻址的状态直到接收到终止条件或者是重复开始条件后跟着一个不同的从机地址。

  2.主-接收器从从-发送器接收数据(10bit从地址)

  在第二个读写位之后传输方向就会改变。

  I2C总线

  在第二个应答A2之前,处理过程与上面的主-发送器寻址从-接收器一致。在重复开始条件(Sr)之后,匹配的从机会保持被寻址上的状态。这个从机会检查Sr之后的第一个字节的前7bit是否正确,然后测试第8bit是否为1(读)。如果这也匹配的话,从机就认定它被作为一个发送器被寻址到了并产生应答A3.从-发送器会保持被寻址的状态知道接收到终止条件(P)或者重复开始条件(Sr)跟着一个不同的从机地址。然后这个时候的重复开始条件下,所有的从机会比较它们的地址与11110XX比较并测试第八位(读写位)。然而它们不会寻址到,因为对于10bit设备,读写位是1,或者对于7bit的设备,1111 0XX的从机地址不匹配。

  三、保留地址

  下表是保留的两组地址的描述:

  I2C总线

  [1]通用广播地址是用来包括软件复位的几个功能

  [2]没有设备可以应答开始字节

  [3]CBUS地址是保留的,使得同一个系统可CBUS总线兼容的设备和I2C总线兼容的设备.I2C兼容的设备不允许响应这个地址

  [4]为不同总线格式保留的

  四、通用广播地址

  通用广播地址是用来同时寻址所有连接到I2C总线上的设备。如果一个设备在广播地址时不需要数据,它可以不产生应答来忽略。如果一个设备从通用广播地址请求数据,它可以应答并当作一个从-接收器。当一个或多个设备响应时主机并不知道有多少个设备应答了。每一个可以处理这个数据的从-接收器可以响应第二个字节。从机不处理这些字节的话,可以响应NA.如果一个或多个从机响应,主机就无法看到NA.通用广播地址的含义一般在第二个字节中指明。

  I2C总线

  有两种情况需要考虑:

  1.最低有效位B是0

  2.最低有效位B是1

  当B是0,第二个字节有如下的定义:

  1.0000 0110(06h):复位并通过硬件写从机地址的可编程部分。在接收到这样的2个字节时,所有可以响应这个广播地址的设备将复位并进入地址的可编程部分。要采取预防措施来确保设备不会在加上电源电压后将SDA或SCL拉低,因为这些低电平会阻塞总线。

  2.0000 0100(04h):通过硬件写从机地址的可编程部分。行为同上,但设备不复位

  3.0000 0000(00h):这个不应该作为第二个字节使用

  编程过程的顺序参考相应设备的datasheet

  软件复位

  在通用广播(0000 0000)之后发送0000 0010(06h)作为第二个字节会引起软件复位。这个特性是可选的,不是所有的设备都会响应这个命令。在接收到这样的2个字节时,所有可以响应这个广播地址的设备将复位并进入地址的可编程部分。要采取预防措施来确保设备不会在加上电源电压后将SDA或SCL拉低,因为这些低电平会阻塞总线。

  开始字节

  微控制器有两种方式连接到I2C总线上。有片上的硬件I2C总线接口的微控制器可以变成为只接收总线的中断请求。当设备没有这样的接口,它必须要通过软件手段来检测总线。很明显,微控制器检测的时间或者轮询总线的时间越多,实现自己功能的时间就越少。

  因此快速硬件设备和依赖软件轮询的相对慢速微控制器是有速度差别的。

  在这种情况下,数据传输前有一个比正常时间长很多的起始过程。起始过程组成如下:

  一个开始条件(S)

  一个开始字节(0000 0001)

  应答位(ACK)

  重复的开始条件(Sr)

  I2C总线

  主机发送完开始条件后,发送开始字节(0000 0001)。另外的微控制器可以以低采样率来采样SDA线知道开始字节的7个0中的一个被侦测到。在侦测到SDA线的低电平后,微控制器可以切换到更高的采样率来探测用于同步的重复开始条件。

  在开始字节后一个应答相关的时钟脉冲产生。设备不允许应答开始字节.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分