BBB Notebook 6 IIC使用

2017/11/29

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

iic-findID

检测MPU6050 地址

i2cget -y 1 0x68 0x75
0x68

设置MPU6050 电源管理值

i2cset -y 1 0x68 0x6B 0x00 //电源管理,典型值:0x00(正常启用)

读取MPU6050 数据

mpu-origindata

C++重新获取mpu6050欧拉角

获取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数据。

Search

    Post Directory