【发布时间】: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