在U-Boot中使用I2C读取多个字节

问题描述 投票:3回答:1

我遇到了飞思卡尔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 00EEF0。在该器件的多个读数中,它始终只返回第一个字节值。如果我尝试从地址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通信的飞思卡尔驱动程序的实现,但我没有更改任何内容,它适用于其他设备。我的同事也说同样的代码在他的董事会上工作。有没有人有类似的问题或有任何关于为什么会发生这种情况的理论?

提前致谢。

i2c u-boot
1个回答
0
投票

我遇到了这种情况。我有驱动程序,读取和写入功能,并且它不适用于所有i2c设备。我发现是因为不工作的设备有不同的操作格式进行了多次操作。不幸的是,这种情况发生了,有一种非标准的协议。当您打开问题设备的文档并将其与工作和/或驱动程序实现进行比较时,您很可能会看到差异。

© www.soinside.com 2019 - 2024. All rights reserved.