我正在将I2C驱动程序移植到Linux-4。该设备同时为不同功能提供多个I2C地址。
例如:
address 0xAA is for access of SPI flash.
address 0xA0 is for access of EEPROM.
address 0x60 is for normal access (control purpose).
是否可以在单个I2C设备驱动程序中支持访问不同的I2C地址?
任何帮助表示赞赏, 谢谢
答案 0 :(得分:1)
我认为有可能。使用i2c_transfer(),可以在要与之通信的设备的i2c_msg结构中提供特定的地址。因此,您的驱动程序将能够与i2c设备的所有功能进行通信。
答案 1 :(得分:0)
取决于您在说什么类型的I2C驱动程序,总线(适配器)或芯片(客户端)驱动程序?
i2c-dev.c
是一种具有字符设备接口的总线驱动程序,可将内核底层I2C API导出到用户空间。
对于每个已注册的I2C适配器,内核将在i2c-N
用户空间界面中添加/dev
设备节点。
但是您不能像简单字符设备或文件那样读取/写入连接到/dev/i2c-N
的EEPROM芯片。您需要编写一些有关芯片协议的实用程序。
但是在Linux中,有特殊的EEPROM芯片驱动程序,例如eeprom.c
或at24.c
,用于将地址为0x50..0x57(如果我没记错的话)的I2C EEPROM设备注册到内核并创建文件在/sys
用户空间界面中。
您可以在以下位置以文件形式访问它们:/sys/bus/i2c/devices/0-005x/eeprom
答案 2 :(得分:0)
感谢DraženGrašovec和user2699113的帮助。
我正在将I2C设备驱动程序(芯片,客户端)移植到Linux-4.9。 该芯片出于不同目的接受不同的I2C设备地址。 我的目标是在Linux设备树文件(.dts)中仅创建一个I2C设备
我通过使用i2c_new_dummy()解决了我的问题。
在驱动程序探测功能中,
我制作了两个i2c_new_dummy()来创建另外两个i2c客户端。
一个(客户端#1)用于访问I2C地址0xAA,另一个(客户端#2)用于访问I2C地址0xA0。
因此,我可以使用client#1与它的SPI闪存进行通信,并使用client#2访问它的EEPROM。