I2C设备、读写地址的关系

结论:

I2C设备的写地址 = I2C设备地址 << 1
I2C设备的读地址 = (I2C设备地址 << 1) + 1

例如:
#define     MAX_17040_BATTERY_I2C_ADDR        (0x36)
#define     MAX_17040_BATTERY_WRITE_ADDR    (MAX_17040_BATTERY_I2C_ADDR << 1)
#define     MAX_17040_BATTERY_READ_ADDR      ((MAX_17040_BATTERY_I2C_ADDR << 1) + 1)

AT24C02有三根地址线来进一步确定I2C设备的地址。说是进一步确定,是因为对于这类的I2C设备来说
其地址的一部分已经是确定好了的。

例如:数据手册上写道:
Device Address
1K/2K              1     0     1     0     A2    A1    A0    R/W

也就是说对于改I2C设备来说,地址的高8位已经确定了为1010,
而低四位则有A2 ----A0来确定  R/W来确定读写方向,读还是写。

例如,我们把A0 --A3全部拉低,则该设备的地址为0xA0.

在ARM中,读写方向是用寄存器的单独一位来确定的,有一个7位的域用来保存设备地址。
所以该I2C设备在ARM  I2C总线上的地址为
0xA0  右移一位 0x50.

如果A0--A2 有其他选择的话,则可以根据上述原则求得设备地址。

 

I2C设备地址

协议格式中第一个字节(为slave address)由7位地址和一位R/W读写位组成的,这字节是个器件地址。

 

常用IIC接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位。

如格式如下:

D7 D6 D5 D4 D3 D2 D1 D0

1、器件类型:D7-D4 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。

 

2、用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。所以为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。

 

3、最低一位就是R/W位,,“0”表示写,“1”表示读(通常读写信号中写上面有一横线,表示低电平)。所以I2C设备通常有两个地址,即读地址和写地址。

引用<>里的话:“i2c 设备的7 位地址是就当前i2c 总线而言的,是“相对地址”。不同的i2c 总线上的设备可以使用相同的7 位地址,但是它们所在的i2c 总线不同。所以在系统中一个i2c 设备的“绝对地址”由二元组(i2c 适配器的ID 和设备在该总线上的7 位地址)表示。”,所以这个函数的作用主要是排除同一i2c总线上出现多个地址相同的设备。


 

你可能感兴趣的:(I2C设备、读写地址的关系)