i2cset 0x68 0x6B 0
i2cset 0x68 0x6A 0x20
i2cset 0x68 0x24 0x0D //只设置速率or
i2cset 0x68 0x24 0x4D //设置速率同时,设置子模块数据等待中断
i2cset 0x68 0x25 0x1E //写or
i2cset 0x68 0x25 0x9E //读读写是由0x25寄存器的bit7控制的。
i2cset 0x68 0x26 0x02 //HMC5883L的工作模式寄存器
i2cset 0x68 0x63 0x00 //HMC5883L连续测量
i2cset 0x68 0x27 0x01 //我要写一个数据到HMC5883L
i2cset 0x68 0x27 0x81 //这里8是为了使能,1还是操作个数的意思,为了保险,这样肯定行,亲测有效~这里需要注意的是:在使能子设备后,MPU6050会以MASTER的身份去对HMC5883L进行操作,这个时候如果用i2cdump等对MPU6050操作是会显示忙的状态的。我调试中的用法是,在使能子设备后,关闭使能,然后MPU6050的master身份结束,可以对其进行正常操作,而数据的操作也已经完成(400kHz呢,瞬间的事)。
i2cset 0x68 0x25 0x9E
i2cset 0x68 0x26 0x0A
i2cset 0x68 0x28 0x03
i2cset 0x68 0x28 0x83
i2cset 0x68 0x28 0x03操作完成。这个时候,通过i2cdump对mpu6050内部寄存器进行查看,slv0的数据存储起始在0x49。
root@arm:/home/debian# i2cdump -y 1 0x68 No size specified (using byte-data access) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: fd 7b 7e 92 52 24 ff 54 03 8d 04 9a 28 50 50 b7 ?{~?R$.T????(PP? 10: 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 %............... 20: 00 00 00 00 4d 9e 0a 03 00 00 00 00 00 00 00 00 ....M???........ 30: 00 00 00 00 00 00 00 00 00 00 01 40 d0 00 30 ff ..........?@?.0. 40: 94 f4 f0 ff c9 00 0b 00 66 48 34 33 00 00 00 00 ???.?.?.fH43.... 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
可以看到,0x49起始后连续的3个寄存器值为48 34 33,16进制码,对应ASCII符号就是 H43,说明这个操作没有错,我们读对了。读其传感器数据也是一样的,这里就不再举例了,无非就是起始位置寄存器地址为0x03,数量为6。其他完全一样,读取出来的数据就是从MPU6050内部寄存器的0x49开始占6个寄存器。
MPU6050 I2C master模式调试记录,布布扣,bubuko.com
原文:http://blog.csdn.net/airk000/article/details/22945573