Linux I2C 驱动移植问题
Linux I2C driver porting issue
我正在将 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地址的访问?
感谢任何帮助,
谢谢
我认为这是可能的。使用 i2c_transfer() 您将在 i2c_msg 结构中为要与之通信的设备提供特定地址。因此您的驱动程序将能够与您的 i2c 设备的所有功能进行通信。
取决于你说的是什么类型的 I2C 驱动程序,总线(适配器)还是芯片(客户端)驱动程序?
i2c-dev.c
是一种具有字符设备接口的总线驱动程序,它将内核低级 I2C API 导出到用户空间。
对于每个已注册的 I2C 适配器,内核将在 /dev
用户空间接口中添加 i2c-N
设备节点。
但是你不能read/writeEEPROM 芯片附加到/dev/i2c-N
,比如简单的字符设备或文件。你需要编写一些关于芯片协议的实用程序。
但在Linux中有特殊的EEPROM芯片驱动程序,如eeprom.c
或at24.c
用于注册地址为0x50..0x57的I2C EEPROM设备(如果我没记错的话) ) 到内核并在 /sys
用户空间界面中创建文件。
您可以将它们作为文件访问:/sys/bus/i2c/devices/0-005x/eeprom
感谢 Dražen Grašovec 和 user2699113 的帮助。
我正在将 I2C 设备驱动程序(芯片、客户端)移植到 Linux-4.9。
该芯片为不同的目的接受不同的 I2C 设备地址。
我的目标是在 Linux 设备树文件 (.dts)
上只创建一个 I2C 设备
我使用 i2c_new_dummy() 解决了我的问题。
在驱动探测函数中,
我做了两个 i2c_new_dummy() 来创建两个额外的 i2c 客户端。
一个(client#1)用于访问 I2C 地址 0xAA,另一个(client#2)用于 I2C 地址 0xA0。
所以我可以使用 client#1 与其 SPI flash 通信并使用 client#2 访问它的 EEPROM。
我正在将 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地址的访问?
感谢任何帮助, 谢谢
我认为这是可能的。使用 i2c_transfer() 您将在 i2c_msg 结构中为要与之通信的设备提供特定地址。因此您的驱动程序将能够与您的 i2c 设备的所有功能进行通信。
取决于你说的是什么类型的 I2C 驱动程序,总线(适配器)还是芯片(客户端)驱动程序?
i2c-dev.c
是一种具有字符设备接口的总线驱动程序,它将内核低级 I2C API 导出到用户空间。
对于每个已注册的 I2C 适配器,内核将在 /dev
用户空间接口中添加 i2c-N
设备节点。
但是你不能read/writeEEPROM 芯片附加到/dev/i2c-N
,比如简单的字符设备或文件。你需要编写一些关于芯片协议的实用程序。
但在Linux中有特殊的EEPROM芯片驱动程序,如eeprom.c
或at24.c
用于注册地址为0x50..0x57的I2C EEPROM设备(如果我没记错的话) ) 到内核并在 /sys
用户空间界面中创建文件。
您可以将它们作为文件访问:/sys/bus/i2c/devices/0-005x/eeprom
感谢 Dražen Grašovec 和 user2699113 的帮助。
我正在将 I2C 设备驱动程序(芯片、客户端)移植到 Linux-4.9。 该芯片为不同的目的接受不同的 I2C 设备地址。 我的目标是在 Linux 设备树文件 (.dts)
上只创建一个 I2C 设备我使用 i2c_new_dummy() 解决了我的问题。
在驱动探测函数中,
我做了两个 i2c_new_dummy() 来创建两个额外的 i2c 客户端。
一个(client#1)用于访问 I2C 地址 0xAA,另一个(client#2)用于 I2C 地址 0xA0。
所以我可以使用 client#1 与其 SPI flash 通信并使用 client#2 访问它的 EEPROM。