您的位置:首页 > 其它

I2C设备地址详解

2016-06-17 17:30 274 查看
转自:http://blog.csdn.net/zhijianjingling00/article/details/9294785

结论:

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 源代码情景分析>>里的话:“i2c 设备的7 位地址是就当前i2c 总线而言的,是“相对地址”。不同的i2c 总线上的设备可以使用相同的7 位地址,但是它们所在的i2c 总线不同。所以在系统中一个i2c 设备的“绝对地址”由二元组(i2c 适配器的ID 和设备在该总线上的7 位地址)表示。”,所以这个函数的作用主要是排除同一i2c总线上出现多个地址相同的设备。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: