本帖最后由 wangjj19950516 于 2021-6-10 17:17 编辑
最近在学习I2C通信,发现有好几种地址模式,这里将学习到的分享给大家,还望指正。
I2C一般常用的有7位地址,8位地址,和10位地址,除此之外AC780X系列的芯片还支持7位范围地址,这个见的比较少,也不知道其他的芯片有没有这个范围地址功能。下面一一说明下这些不同的地址模式
一、7位地址模式
在7位寻址过程中,从机地址在启动信号后的第一个字节开始传输。改字节的高7位为从机地址,最低位为读写位。
下图是从机地址为0X2C,总线上发送起始信号后,为7bit地址010 1100,最后一位为低电平,为主机写。从机接收到后会回一个应答位ACK。
二、8位地址模式
有些厂商提供的从机地址为“包含了读写位的8bit地址”。其实也是7bit地址加读写位组成8bit。
例如提供的写地址为0X92(1001 0010),读地址为0X93(1001 0011),其实去掉最后一位读写位之后,从机地址为0x49.
三、10位地址模式
10位地址模式下,在发送10bit地址时,第一个字节是一个特殊的保留,来指示当前传输的是10bit地址。
第一个字节由固定序列(11110)+高2bit地址+R/W读写位组成,第二个字节为低8位地址
如下图,主机发送的10bit地址为0X156,在总线上第一个字节为(1111 0010),其中红色的为固定序列,蓝色的为读写位,绿色的才是高2位的地址。
第二个字节为0X56,即为低8位地址。
四、范围地址
AC7801中有个从机范围地址,即接收到的地址在设定的范围内都可以被匹配成功。
上图中两个寄存器设定的地址范围,I2C_ADDR0寄存器的AD[6:0]即为正常从机地址;I2C_ADDR1中RMEN为从机的范围地址使能位,RAD[6:0]为范围地址的值。
当从机接收到的地址大于AD[6:0]并且小于等于RAD[6:0]的值时,会地址匹配成功。
例如,当从机的AD[6:0]=0X20,RAD[6:0]=0X3F时。主机向地址为0X2C的从机发送数据,该从机会地址匹配成功并接收数据;如果主机向地址为0X20的从机发送数据,该从机就不能地址匹配成功。
|