I2C设备地址

目录

一、I2C设备地址

二、I2C器件地址与读、写地址

三、示例


一、I2C设备地址

I2C设备地址也就是器件地址:也叫chip address

I2C总线上可以接多个I2C设备,为了区分总线到底访问哪个设备,不同类型的I2C器件都会定义自己独特的I2C地址。

I2c从设备地址:也叫slave address。

I2C协议格式中slave address = chip address由7位地址D[7:1]组成 + 1位R/W读写位D[0]组成的。

I2C通用器件的器件地址=种类型号(D[7:4])+及寻址码D[3:1]组成的,共7位。

1、高4位代表器件类型:由D7-D4 决定的。

      这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。

 2、低3位:用户自定义地址码。

      这也是为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。

二、I2C器件地址与读、写地址

R/W位表示i2c总线上数据的传输方向,“0”表示写,数据写入i2c设备,“1”表示读,从i2c设备中读取数据放入总线。

所以I2C设备通常有两个地址,即读地址和写地址,这两个地址统称为i2c设备的slave addr。

固件给内核传参所用的ACPI表,其中关于i2c设备信息的传参用的是I2C设备地址chip addr,内核i2c底层驱动真正使用的地址是slave addr。

器件地址是I2C总线上的设备ID。

读地址表示总线对指定ID的i2c器件发起读寄存器操作访问。

写地址表示总线对指定ID的i2c器件发起写寄存器操作访问。

三、示例

顺芯的Es8388 codec芯片,提供了i2c接口用于对该芯片进行配置访问。

Es8388 codec芯片中关于chip addr的描述如下:

The chip address must be 001000x,where x equals AD0。

根据手册种的定义,ES8388芯片工作在I2c模式时,管脚CE作为AD0使用。因此该芯片的最终I2C设备地址由AD0也就是CE管脚决定,是可自定义的。如图:

CE接地时,对应AD0为0,此时ES8388的chip addr为0010000:也就是0x10;

如果将CE管脚拉高,那么chip addr为0010001,也就是0x11。

不同型号的I2c设备,器件类型值不同,所使用的可配置自定义地址码个数也不同,如es8388只使用了1位,最多配置2种不同的ID。

对于其他I2C设备的chip addr及可配置地址码需要看对应数据手册。

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在软件模拟I2C的情况下,你需要自己编写代码来模拟I2C设备地址和寄存器地址。 首先,你需要定义一个I2C设备地址,这个地址通常由I2C设备的硬件地址引脚决定。在软件模拟I2C的情况下,你需要自己指定一个地址。 其次,你需要定义I2C设备的寄存器地址。这些地址通常是由设备厂商提供的数据手册中给出的。在软件模拟I2C的情况下,你需要根据设备手册中给出的地址来定义寄存器地址。 最后,你需要编写I2C的读写函数。这些函数需要模拟I2C总线的传输过程,包括开始信号、设备地址、寄存器地址、数据传输以及停止信号等步骤。你可以使用GPIO模拟I2C总线的SCL和SDA信号。 下面是一个基本的软件模拟I2C读取寄存器的例子: ```c #define I2C_DEVICE_ADDR 0x50 #define I2C_REG_ADDR 0x01 void i2c_start(void) { // 发送开始信号 // ... } void i2c_stop(void) { // 发送停止信号 // ... } void i2c_write_byte(uint8_t data) { // 发送一个字节 // ... } uint8_t i2c_read_byte(void) { // 读取一个字节 // ... } uint8_t i2c_read_reg(void) { uint8_t data; i2c_start(); i2c_write_byte(I2C_DEVICE_ADDR); i2c_write_byte(I2C_REG_ADDR); i2c_start(); i2c_write_byte(I2C_DEVICE_ADDR | 0x01); // 设备地址加读标志 data = i2c_read_byte(); i2c_stop(); return data; } ``` 注意,上面只是一个简单的例子,实际使用中需要根据具体的设备手册来编写相应的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值