lzz0609 发表于 2020-9-12 17:28:33

单片机一个IIC连接两个MPU9250,如何设置读取磁力计的模式?

在STM32单片机的一个IIC接口上同时连了两个MPU9250传感器,将两者的AD0分别设为高和低,对于磁力计都设置成Bypass模式,发现两块磁力计的数据都能读出来,Bypass模式不是由单片机直接读取磁力计的数据嘛,两块磁力计的IIC地址都一样,在一个iic总线上不会产生冲突嘛?非常困惑,请各位前辈能帮助指点一下,感激不尽:handshake

corez 发表于 2020-9-28 10:03:27

MPU9250是MPU6500+AK8963。两个I2C地址不同。
对MPU6500的I2C地址及进行操作,读取加速度和陀螺仪数据。按照电路AD0的不同,地址是0x68或者0x69。
对AK8963地址进行操作,读取磁力计数据。在MPU9250中,地址无法更改,为0x0C。
I2C读写为左对齐,第8位要存读写标志位,需要将地址左移一位。MPU6500为0xD0或是0xD2,磁力计为0x18。
磁力计的读取有Passby模式和I2C master两种方式如下:
passby模式:MCU直接对磁力计进行读取,不经过MPU9250。对MPU9250的INT_PIN_CFG寄存器写0x02,然后直接对磁力计地址0x18进行读写。磁力计中的0x00寄存器存储的ID为0x48。
I2C master模式,不直接对磁力计进行操作,先由MPU9250读取磁力计数据暂存,然后MCU读取MPU9250中的磁力计数据。
另外,mpu9250的1脚需要接VDDIO。在设置passby模式下,需要增加设置适当的几毫秒的延时时间。如果软件模拟I2C,在配置引脚时,硬件上拉电阻。并注意将GPIO引脚设置为输出开漏模式。
如不清楚,还可以参考以下文章。
Beaglebone Black – 连接 GY-91 MPU9250+BMP280 九轴传感器https://www.cnblogs.com/leptonation/p/5225889.html
GD32F207E+MPU9255数据读取http://www.cirmall.com/bbs/thread-46005-1-1.html





陌路夕颜 发表于 2020-9-28 09:46:07

用两个IIC总线就解决这个困惑了:lol

freeelectron 发表于 2020-9-28 09:56:45

保证设备地址不一样就可以读取了

butterflyspring 发表于 2020-9-30 11:38:12

从I2C协议上看,只要不同的设备地址,就可以区分开。不是当前访问地址的设备是不会响应当前I2C总线的。一条I2C总线挂多个不同设备地址的从设备是很常见的。

lzz0609 发表于 2020-10-23 11:35:57

corez 发表于 2020-9-28 10:03
MPU9250是MPU6500+AK8963。两个I2C地址不同。
对MPU6500的I2C地址及进行操作,读取加速度和陀螺仪数据。按 ...

您好,您说的是在I2C master模式下,1脚需要接VDDIO嘛,还是两种模式都需要?

corez 发表于 2020-10-27 09:47:13

lzz0609 发表于 2020-10-23 11:35
您好,您说的是在I2C master模式下,1脚需要接VDDIO嘛,还是两种模式都需要? ...

1脚需要接VDDIO。
请参考以下是管脚定义。
页: [1]
查看完整版本: 单片机一个IIC连接两个MPU9250,如何设置读取磁力计的模式?