I2C设备、读写地址的关系

本文详细解析了I2C设备地址的确定方法,包括如何通过左移操作获取写地址和读地址,以及如何利用地址线确定具体设备地址。同时介绍了I2C协议中地址的组成,包括器件类型、用户自定义地址码和读写方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结论:

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总线上出现多个地址相同的设备。


————————————————
版权声明:本文为CSDN博主「强强的博客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhijianjingling00/article/details/9294785

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值