mpu9250

I2C接口读取MPU9250磁力数值

余生长醉 提交于 2020-01-13 17:26:53
一开始拿到芯片手册云里雾里,根本没有找到关于磁力数据的寄存器,结果上网一查才知道,这芯片竟然是个胶水芯片。。。 MPU9250内部是MPU6050和AK8963两个芯片合并在一起的,感觉傻傻的。 内部的AK8963是负责三轴磁力传感器采样的芯片,它通过I2C总线与MPU9250连接在一起。 如上图所示,MPU9250还集成了一个I2C主机控制器。默认情况下MPU9250用它的I2C主机控制器与AK8963通信,把磁力值读到出放到指定的寄存器中,这需要设置一堆寄存器,真是麻烦得一逼!!! 幸好MPU9250还预留了I2C直通模式,这个模式相当于MPU9250和AK8963共同使用一条I2C总线,因为它们的通信地址不一样, MPU9250的地址:0xD0/0xD1 AK8963的地址:0x18/0x19 在写驱动程序的时候,可以把它们当作硬件上分离的两个芯片挂在同一条I2C总线上。 直通模式需要设置MPU9250的第55号寄存器的Bit1写1即可开启。 有了直通模式我们就可以直接与AK8963通信了,AK8963的寄存器不多。 下面讲讲几个关键寄存器操作: 0x00:这个寄存器是芯片ID=0x48,能读出这个ID证明通信OK了。 0x0A:设置工作模式,建议上电后先写入0x0F,读取出芯片校准系数;然后再写0x01,进行单次采样。 0x02:状态寄存器,BIT0为1表示采样完成