我的 Freescale p1022tw 板的 I2C 驱动程序有问题。 U-Boot 的控制台上有一个从 I2C 设备读取的命令:
i2c md chip address[.0, .1, .2] [# of objects]
当我从 id 为 0x60、地址为 0x0 的设备读取 4 个字节时,我得到:
tw=>i2c md 60 0 4
0000: 45 45 45 45 EEEE
它返回的这些值是错误的。如果我当时读取一个字节,我可以获得正确的值:
tw=>i2c md 60 0 1
0000: 45 E
tw=>i2c md 60 1 1
0001: 45 E
tw=>i2c md 60 2 1
0002: 46 F
tw=>i2c md 60 3 1
0003: 00 .
我应该得到45 45 46 00
or EEF0
在第一个命令中。在此设备的多次读取中,它始终仅返回第一个字节值。如果我尝试获取从地址 0x2 开始的 6 个字节,则输出如下:
tw=>i2c md 60 2 6
0002: 46 46 46 46 46 46 FFFFFF
总线上的其他设备不会出现此问题。例如,在 id 0x4F 的设备中,会打印正确的值:
tw=>i2c md 4F 0.2 6
0000: 18 00 f6 48 00 00 ...H..
上一条命令中的地址有一个“.2”,因为芯片使用 2 个字节作为地址。第一个设备仅使用 1,因此无需输入“.1”(我已经测试过)。
我完成了用于 I2C 通信的飞思卡尔驱动程序的实现,但我没有对其进行任何更改,并且它适用于其他设备。我的同事还说,同样的代码可以在他的主板上运行。有人遇到过类似的问题或者有任何关于为什么会发生这种情况的理论吗?
提前致谢。