目录
一、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及可配置地址码需要看对应数据手册。