我有一个通过 I2C 连接到英特尔爱迪生 arduino 板(引脚 A4/A5)的 MPU-9250。
我可以阅读,它可以完美地阅读 acc 和 gyro
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
所有其他寄存器都保持不变