我正在将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地址的访问?
感谢您的帮助,谢谢
发布于 2018-12-10 01:30:32
感谢Dražen Grašovec和ž的帮助。
我正在将一个I2C设备驱动程序(芯片,客户端)移植到Linux4.9.该芯片接受不同的I2C设备地址,用于不同的用途。我的目标是在Linux设备树文件(.dts)上只创建一个.dts设备。
我通过使用i2c_new_dummy()解决了我的问题。
在驱动程序探测函数中,我创建了两个i2c_new_dummy()来创建两个额外的i2c客户机。
一个(client#1)用于访问I2C地址0xAA,另一个(client#2)用于访问I2C地址0xA0。
因此,我可以使用client#1与其SPI闪存通信,并使用client#2访问它。
发布于 2018-12-03 05:50:27
我认为这是可能的。使用i2c_transfer(),您将在要与之通信的设备的i2c_msg结构中提供特定地址。因此,您的驱动程序将能够与您的i2c设备的所有功能通信。
发布于 2018-12-06 13:14:27
取决于您所说的I2C驱动程序的类型,总线(适配器)还是芯片(客户端)驱动程序?
i2c-dev.c是一种具有字符设备接口的总线驱动程序,它将内核底层的I2C API输出到用户空间。
对于每个注册的I2C适配器,内核将在/dev用户空间接口中添加i2c-N设备节点。
但是不能像简单的字符设备或文件那样读写附加到/dev/i2c-N上的EEPROM芯片。您需要编写一些有关芯片协议的实用程序。
但是在Linux中有一些特殊的EEPROM芯片驱动程序,如eeprom.c或at24.c,用于将地址为0X50.0x57的I2C EEPROM设备注册到内核,并在/sys用户空间接口中创建文件。
您可以在:/sys/bus/i2c/devices/0-005x/eeprom中以文件形式访问它们
https://stackoverflow.com/questions/53586863
复制相似问题