您好,
在尝试通过 I2C 读取 WHO_AM_I 寄存器时,MMA8452Q 遇到了问题。我们使用的是基于 iMX28 的平台,运行 Linux 2.6.35。设备驱动程序读取的值为 0,而不是预期的 0x2A。我已经看到,在I2C总线上,控制器在写入要读取的寄存器后发送停止条件,然后再开始读取实际值。它不使用重复启动。
MMA8452Q 数据表指出".... MM8452Q 希望使用重复启动来随机读取特定寄存器" 。它还指出(在 “单字节读取” 下)" 主机(或 MCU)传输重复启动条件 (SR),并将读取位设置为 " 1 " 的 MMA8452Q ($1D) 从先前选择的寄存器读取。
这是否意味着在读取随机寄存器值时,我们必须使用重复启动,并且 MMA8452 不支持在写入寄存器地址后使用停止条件,然后再启动/停止以读取实际值?
谢谢!
布鲁诺
谢谢你,托马斯、
我也是这么想的,只是想确认一下。
布鲁诺
你好,布鲁诺、
是的,MMA8452Q 使用组合的 I 2 C 数据传输格式,需要在第二个字节(寄存器地址)之后重复启动条件。
从 WHO_AM_I 寄存器 0x0D 读取的单字节如下所示(请注意,它是针对我办公桌上的 MMA8652FC 的):
如果您还有其他问题,请告诉我。
此致,
托马斯
PS:如果我的回答有助于解决您的问题,请标记为"正确" 。谢谢。