MPU-9250如何配置通过I2C

Posted

技术标签:

【中文标题】MPU-9250如何配置通过I2C【英文标题】:MPU-9250 how to configure pass through I2C 【发布时间】:2015-07-11 09:35:48 【问题描述】:

我有一个 MPU-9250 通过 I2C 连接到英特尔爱迪生 arduino 板(引脚 A4/A5)。

我可以阅读,并且可以完美地阅读加速器和陀螺仪

MPU9250_ADDRESS = 0x68

现在我禁用 I2C 主模块

i2c.writeReg(USER_CTRL, 0b00000000) # I2C_MST_EN

# 1 – 启用 I2C 主 I/F 模块;管脚 ES_DA 和 ES_SCL 与管脚 SDA/SDI 和 SCL/ SCLK 隔离。

# 0 – 禁用 I2C 主 I/F 模块;管脚 ES_DA 和 ES_SCL 由管脚 SDA/SDI 和 SCL/ SCLK 逻辑驱动。

现在我启用了 I2C 旁路多路复用器

i2c.address(MPU9250_ADDRESS)

i2c.writeReg(INT_PIN_CFG, 0b00000010) # BYPASS_EN 设置为高 # 置位后,当 i2c 主接口被禁用时,i2c_master 接口引脚(ES_CL 和 ES_DA)将进入“旁路模式”。 如果未启用且禁用 i2c 主接口,则由于内部上拉,引脚将浮高。

所以根据数据表,如果我禁用芯片内的 i2c 主模块并激活旁路,我应该能够通过 I2C 直接访问指南针。

不是不,出于某种原因,我相信这种情况仍然会发生“...由于内部上拉而浮动高...”,我这样说是因为我在激活之前用示波器查看了 2 个信号绕过信号 1 和 0 逻辑点,激活它后 1 逻辑电平上升了几个 mV(还不用担心),但 0 逻辑不在接近 0V 的地方,实际上接近逻辑 1 电压,我仍然可以在示波器屏幕上视觉上在 0 和 1 之间产生差异,但这并不是任何理智的电子设备都可以识别为 0 的。总之长话短说,我相信不知何故内部上拉没有停用。

一旦设置了 BYPASS_EN 位,整个 I2C 总线就会遇到问题, 我测量了 AUX_CL 和 AUX_DA 引脚上的信号,它们与 SCL 和 SDA 引脚上的信号相同,因此旁路可以完美地完成工作,但是在旁路切换到高电平后有一些东西将线路拉动。我不知道如何禁用它。

如何在 I2C 旁路模式下正确配置 MPU-9250 是除了我设置的 2 位之外必须进行的任何其他设置

USER_CTRL->I2C_MST_EN = 0

INT_PIN_CFG->BYPASS_EN = 1

所有其他寄存器都保持不变

【问题讨论】:

你在这方面有什么进展吗?我看到了同样的问题:在从地址 0x0C 开始向磁力计传输时,确认脉冲处于一个奇怪的电压电平,介于 0 和 1 之间。 不是真的,我换了一个刚刚工作的 IC 【参考方案1】:

现在回答可能为时已晚,但如果有人会搜索类似的问题,它可能会有所帮助。您需要从 MPU-9250 的 INT_PIN_CFG (0x37) 寄存器中读取字节,将其与 0b00000010 按位或然后将其写回。之后,您可以访问 0x0C i2c 地址上的磁力计。

【讨论】:

以上是关于MPU-9250如何配置通过I2C的主要内容,如果未能解决你的问题,请参考以下文章

mpu9250陀螺仪折腾小记

MPU9250的dmp移植

MPU9250简单快速更改MPL驱动,方便使用MPL和DMP

Beaglebone Black – 连接 GY-91 MPU9250+BMP280 九轴传感器

项目ES32获取mpu9250数据网页交互显示 (程序1) esp32获取mpu9250数据

MPU9250的MPL移植_HAL库(以STM32F103为主控)