I2C设备地址的设定

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

### I2C 设备地址与寄存器地址的区别 #### I2C 设备地址 I2C 设备地址用于唯一标识连接到同一 I2C 总线上的不同设备。每个设备都有一个唯一的7位或10位地址,这个地址由硬件设计者预先设定好并固定下来。当主机想要与某个特定的从机通信时,会先发送该从机的地址作为消息的一部分。 在 `.dts` 文件中可以查找到与 I2C 相关的节点,从而确定设备所处的具体总线编号及其对应的设备地址[^1]。例如,在 `i2c-5` 总线上找到了两个具有不同 ID 的设备,分别是 `0x11` 和 `0x50` [^2]。 #### 寄存器地址 而寄存器地址则是指位于被选中的 I2C 设备内部的数据存储位置。这些寄存器保存着各种状态信息、控制参数或是传感器采集到的实际数值等重要数据。为了访问指定的功能模块或者获取所需的信息,就需要通过向相应的寄存器发出读取命令来获得其当前值;反之亦然,可以通过写入指令改变某些设置项的内容。 对于支持 8 位寄存器寻址模式下的 I2C 设备而言,通常情况下只需要提供单字节长度的目标寄存器偏移量即可完成一次完整的操作过程。 ```python def read_register(i2c_bus, device_address, register_address): """Read a single byte from the specified register of an I2C device.""" data = i2c_bus.read_byte_data(device_address, register_address) return data def write_register(i2c_bus, device_address, register_address, value): """Write a single byte to the specified register of an I2C device.""" i2c_bus.write_byte_data(device_address, register_address, value) ``` 以上代码片段展示了如何定义简单的 Python 函数来进行基本的寄存器级别的读写动作。这里假设已经有一个有效的 I2C 接口对象 (`i2c_bus`) 可供调用,并且知道目标器件的确切物理地址 (`device_address`) 以及要交互的那个具体寄存器的位置 (`register_address`)。 #### 使用方法总结 综上所述,I2C 地址用来选择哪个外设参与通讯对话,而寄存器地址则决定了在这次交流过程中实际关心的是对方哪一部分的状态或者是希望修改哪些配置选项。两者共同作用才能实现精确无误地操控各个独立组件之间的协作关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值