我有一个MPU-9250通过I2C连接到英特尔爱迪生arduino板(A4 / A5引脚)。
我可以阅读并完美地阅读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位置1,整个I2C总线就会遇到问题, 我测量了AUX_CL和AUX_DA引脚上的信号,它们与SCL和SDA引脚上的信号相同,因此旁路完成了它的工作,但是在旁路开关变为高电平后有一些拉线。我不知道如何禁用它。
如何在I2C旁路模式下正确配置MPU-9250是除了我设置的2位之外必须进行的任何其他设置
USER_CTRL-> I2C_MST_EN = 0
INT_PIN_CFG-> BYPASS_EN = 1
所有其他寄存器均未受影响
答案 0 :(得分:0)
答案可能为时已晚,但是如果有人搜索类似的问题,可能会有所帮助。您需要从MPU-9250的INT_PIN_CFG(0x37)寄存器中读取字节,将其与0b00000010按位或,然后再写回。之后,您可以在0x0C i2c地址上访问磁力计。