在我们基于 LS1028A 的定制板中,5 个不同的设备通过总线 2 中的 I2C 集线器 (TCA9548APWR) 连接,如附件所示。
我能够在通过 U-Boot 中的 I2C 集线器连接的 i2c 设备中读取和写入,但是当我尝试通过i2ctransfer实用程序和单独的应用程序写入和读取并使资源暂时不可用(使用自己的应用程序)时,Linux 中没有发生 同样 的事情.
在U-Boot 1st 中,我在 i2c 集线器中写入以选择连接到集线器的设备,然后我在设备中写入并获取正确的数据,如下所示:
----------------------
#TO 检查 RTC:
i2c probe
i2c dev 2
i2c probe
i2c mw 0x71 0x0 0x1 (0x71 is I2C Hub address)
i2c probe
i2c mw 0x51 0xa2 0xe(RTC 地址
i2c 中的 0x51 md 0x51 0xa2 0x1
----------------------
#TO 检查 EEPROM2:
i2c mw 0x71 0x0 0x2
i2c 探针
i2c mw 0x50 0x0 0xf
i2c md 0x50 0x0 0x1
但是在下面的 linux 中,我使用下面的实用程序:
i2ctransfer 2 w17@0x71 0x0 0xff- (将 0xff 写入 i2c 集线器地址 0x71 以启用所有 i2c 集线器设备)
2ctransfer 2 w1@0x71 0x0 r1 (读入 i2c 集线器地址 0x71)
i2ctransfer 2 w17@0x51 0x0 0x77-(将 0x77 写入集线器地址 0x51 的 RTC 设备)
2ctransfer 2 w1@0x51 0x0 r1 (读取RTC集线器地址0x51)
但是没有通过实用程序获得正确的数据。
我在这篇文章中附上了所需的文件。
以下是我的问题:
使用 i2ctransfer 实用程序,我能够读取和写入其他 EEPROM(@0x50)设备,但为什么我无法读取和写入通过 i2c 集线器连接的设备,即使在通过写入 i2c 集线器启用 i2c 设备之后?。
dts 和 .config 文件需要进行哪些更改才能访问 i2c 集线器设备?
请帮我解决这个问题。