DAY23. IIC控制器和MPU6050
1. 4412下的IIC控制器
相关寄存器
要控制多主I2C总线操作,必须将值写入这些寄存器:
- 多主控I2C总线控制寄存器-
I2CCON
:控制IIC - 多主控器I2C总线控制/状态寄存器-
I2CSTAT
:IIC状态 - 多主I2C总线Tx/Rx数据移位寄存器-
I2CDS
:发送和接收数据 - 多主I2C总线地址寄存器-
I2CADD
:设置IIC设备的地址
工作逻辑
控制流程
主机发送模式
主机接收模式
从机发送模式
从机接收模式
一般来说很少使用主机变从机使用
相关寄存器
2. IIC寄存器详解
I2CCONn寄存器(n = 0 to 7)
控制IIC
I2CSTATn寄存器(n = 0 to 7)
控制IIC功能和显示IIC状态
I2CADDn寄存器(n = 0 to 7)
设置IIC设备地址
一般当4412当成从机的时候才会用到
I2CDSn寄存器(n = 0 to 7)
发送和接受移位寄存器
I2CLCn寄存器(n = 0 to 7)
滤波相关的寄存器,这里用不到
3. MPU6050原理
MPU6050是一个运动处理传感器,其内部集成了3轴加速度传感器 和3轴陀螺仪(角速度传感器),以及一个可扩展数字运动处理器
MPU6050主要参数
-
可测量X、Y、Z轴三个方向的角速度
-
可编程设置角速度测量范围为±250、±500、±1000、±2000°/sec
-
可测量X、Y、Z轴三个方向的加速度
-
可编程设置加速度测量范围为±2g、±4g、±8g、±16g
-
可编程设置低功耗模式
-
可编程设置采样频率
-
… …
MPU6050通信接口
MPU6050可以使用IIC总线和其他器件进行数据交互,我们可以使用
IIC总线向MPU6050中的控制寄存器写入数据来设置MPU6050的工作参数
也可以使用IIC总线从MPU6050中的数据寄存器读取数据来获取加速度、角速度等信息
测量结果会放在相关的寄存器
通过修改寄存器来控制量程和各种参数
常用寄存器
/****************MPU6050内部常用寄存器地址****************/
#define SMPLRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz)
#define CONFIG 0x1A //低通滤波频率,典型值:0x06(5Hz)
#define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000°/s)
#define ACCEL_CONFIG 0x1C //加速计自检及测量范围及高通滤波频率,典型值:0x0(不自检,2G,5Hz)
#define ACCEL_XOUT_H 0x3B //存放X轴的加速度,16位数据,需要两个寄存器存放
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D //存放Y轴的加速度,16位数据,需要两个寄存器存放
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F //存放Z轴的加速度,16位数据,需要两个寄存器存放
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41 //存放温度
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43 //存放X轴的角速度,16位数据,需要两个寄存器存放
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45 //存放Y轴的角速度,16位数据,需要两个寄存器存放
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47 //存放Z轴的角速度,16位数据,需要两个寄存器存放
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用)
#define SlaveAddress 0x68 //MPU6050-I2C地址
4. MPU6050寄存器读写时序
向MPU6050的一个寄存器写一个字节的数据
-
主机(Exynos4412)发送起始信号
-
主机发送从机地址(MPU6050的地址)及读写方向(写)
-
从机(MPU6050)发送应答信号
-
主机发送一个字节数据(要写的寄存器的地址)
-
从机发送应答信号
-
主机发送一个字节数据(要写到寄存器的数据)
-
从机发送应答信号
-
主机发送停止信号
从MPU6050的一个寄存器读一个字节的数据
-
主机(Exynos4412)发送起始信号
-
主机发送从机地址(MPU6050的地址)及读写方向(写)
-
从机(MPU6050)发送应答信号
-
主机发送一个字节数据(要写的寄存器的地址)
-
从机发送应答信号
-
主机(Exynos4412)发送起始信号
-
主机发送从机地址(MPU6050的地址)及读写方向(读)
-
从机(MPU6050)发送应答信号
-
从机发送一个字节数据(要读的寄存器中的数据)
-
主机发送非应答信号(不再接收更多的数据)
-
主机发送停止信号
5. 作业
1.简述通过主机从MPU6050中的一个寄存器中读一个字节的数据的过程
1 主机(Exynos4412)发送起始信号
2 主机发送从机地址(MPU6050的地址)及读写方向(写)
3 从机(MPU6050)发送应答信号
4 主机发送一个字节数据(要写的寄存器的地址)
5 从机发送应答信号
6 主机(Exynos4412)发送起始信号
7 主机发送从机地址(MPU6050的地址)及读写方向(读)
8 从机(MPU6050)发送应答信号
9 从机发送一个字节数据(要读的寄存器中的数据)
10 主机发送非应答信号(不再接收更多的数据)
11 主机发送停止信号