1205463_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1205463_zh-CN

1205463_zh-CN

从 MMA8652 读取任何寄存器都会返回最大值

您好,恩智浦社区!: )

我有一块带有 MMA8652 加速器的定制板,连接到 RPi4。问题是,当我尝试读取任何寄存器时,其值总是最大的,即 0xFF。我的测试程序是将 CTRL_REG1 设置为 0b1 以启动设备,然后请求 WHO_AM_I(或者基本上是任何寄存器)。如果我在设置 CTRL_REG1 后留出一些时间,不管是 1us、1ms 还是......100ms,都没有关系。100毫秒

最让我困惑的是,这种情况只发生在 C++ 中!我在 Python 中尝试了同样的程序,得到的是正常值,即 WHO_AM_I 为 0b1001010。

我知道我的I2C包装器可能是造成这个问题的原因,但问题是它适用于同一总线上的其他I2C设备。

我也尝试过使用第二块板,但问题仍然存在,所以它可能不是 IC 的损坏或损坏的副本,而是他们的操作方式出了问题。

编辑:我还附上了范围图像,但只看到 2 个操作!难道不应该有第三个(国际会议的答复)吗?

mma8652.jpg


加速度传感器Re: Reading any register from the MMA8652 returns a maxed-out value

接得好,@TomasVaverka! 谢谢!

实际上,问题在于我处理 I2C 总线的方式。我修复了封装程序,现在我可以顺利地与 MM8652 通信了!

Re: Reading any register from the MMA8652 returns a maxed-out value

你好,@SpyrosRallis、


首先,我为稍有延迟的回复表示歉意。

查看您的示波器图像,第二和第三字节之间的停止条件不正确。

您需要修改 C++ 源代码,使 SDA 在 SCL 变为高电平之前过渡到高电平,以消除此停止条件。

下图说明了 WHO_AM_I 寄存器(0x0D)的读取过程。正如你所注意到的,第二个 (0x0D) 和第三个 (0x3B) 字节之间没有停止条件。


I2C Read.JPG


顺祝商祺!

托马斯

 



Tags (1)
No ratings
Version history
Last update:
‎02-04-2026 08:42 AM
Updated by: