我遇到了飞思卡尔p1022tw板的I2C驱动程序问题。 U-Boot控制台上有一个命令可以从I2C设备读取:
i2c md chip address[.0, .1, .2] [# of objects]
当我从ID为0x60的设备读取4个字节时,地址为0x0,我得到:
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
或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通信的飞思卡尔驱动程序的实现,但我没有更改任何内容,它适用于其他设备。我的同事也说同样的代码在他的董事会上工作。有没有人有类似的问题或有任何关于为什么会发生这种情况的理论?
提前致谢。
答案 0 :(得分:0)