beagleboard black 笔记 <6>
我使用的是之前做小四轴剩下的 MPU6050 ,它和 HMC5883 焊在一起的,因为IIC 使用的是总线形式,所以不影响,反而可以测试一下多个传感器下的 IIC 功能。我先使用IIC读取 MPU6050 数据。
开始使用 IIC
开启 IIC 传输
与串口操作类似,添加覆盖层,【改变 IO 口属性】
操作步骤
root@beaglebone:/lib/firmware# echo BB-I2C1 > $SLOTS &
[1] 1585
root@beaglebone:/lib/firmware# cd /sys/devices/platform/ocp/
root@beaglebone:/sys/devices/platform/ocp# config-pin -l P9.17
default gpio gpio_pu gpio_pd spi_cs i2c pwm pru_uart
root@beaglebone:/sys/devices/platform/ocp# cat ocp:P9_17_pinmux/state
default
root@beaglebone:/sys/devices/platform/ocp# config-pin P9.17 i2c
root@beaglebone:/sys/devices/platform/ocp# config-pin P9.18 i2c
root@beaglebone:/sys/devices/platform/ocp# cat ocp:P9_17_pinmux/state
i2c
root@beaglebone:/sys/devices/platform/ocp# cat ocp:P9_18_pinmux/state
i2c
使用 Linux I2C 工具,测试 IIC 连接
检测总线上连接设备的地址
i2cdetect -y -r 1
检测MPU6050 地址
i2cget -y 1 0x68 0x75
0x68
设置MPU6050 电源管理值
i2cset -y 1 0x68 0x6B 0x00 //电源管理,典型值:0x00(正常启用)
读取MPU6050 数据
C++重新获取mpu6050欧拉角
IIC类 读取地址
mpu6050类 读取寄存器值
使用四元数进行姿态解析
尚未加入诸如卡尔曼等类型的滤波函数。
Linux 硬件驱动编程
使用i2c通信先配置地址,数据位,超时时间等等通信规则。 这里的ioctl函数就是用来配置这些参数的。 I2C_SLAVE:安全的配置,如果i2c已经配置过会返回失败。 I2C_SLAVE_FORCE:总是成功,不管其他人有没有在使用,确定只有你使用这个i2c的时候使用。 同时ioctl还能使用I2C_TENBIT,I2C_PEC,I2C_TIMEOUT等参数。 这里只是配置i2c通信规则,还没有发送数据。 配置完成后,调用write,read函数可以接收发送数据。
i2cget和i2cset,分别是对寄存器进行获取和写入。用法为i2cget -y 总线号 设备地址 寄存器地址 模式和i2cset -y 总线号 设备地址 寄存器地址 数值 模式。模式默认为b(byte)即读取8bit数据,i2cget可用模式有b/w/c,i2cset可用模式有b/w/c/i/s,其中w为word(16bit),i和s分别为I2C和SMBUS的block数据。