目录
1 Exynos4412下IIC控制器介绍
1.1 总览
1.2 特征
1.3 工作框图
1.4 其他内容介绍
1.5 四种工作模式寄存器流程
2 IIC寄存器详解
2.1 概述
2.2 控制寄存器
2.3 状态寄存器
2.4 地址寄存器
2.5 数据寄存器
2.6 其他寄存器
3 MPU06050
3.1 简介
3.2 MPU6050主要参数
3.3 MPU6050通信接口
3.4 6050芯片手册
3.4.1 概览(8位寄存器)
3.4.2 实验需要用到的寄存器
4 MPU6050寄存器读写时序
4.1 向MPU6050的一个寄存器写一个字节的数据
4.2 从MPU6050的一个寄存器读一个字节的数据
1 Exynos4412下IIC控制器介绍
1.1 总览
Exynos 4412 SCP是一款支持四个多主I2C总线串行接口的精简指令集计算机(RISC)微处理器。为了在总线主和外围设备之间传输信息,使用了专用的串行数据线(SDA)和串行时钟(SCL)。SDA和SCL线都是双向的。
在多主I2C总线模式下,多个Exynos 4412 SCP RISC微处理器接收或发送串行数据到或从从设备。主Exynos 4412 SCP启动和终止I2C总线上的数据传输。 Exynos 4412 SCP的I2C总线使用标准的I2C总线仲裁过程实现多主和多从传输。
要控制多主I2C总线操作,必须向以下寄存器写入值:
• 多主I2C总线控制寄存器-I2CCON
• 多主I2C总线控制/状态寄存器-I2CSTAT
• 多主I2C总线Tx / Rx数据移位寄存器-I2CDS
• 多主I2C总线地址寄存器-I2CADD
如果I2C总线处于空闲状态,则SDA和SCL线都应处于高电平。 SDA的高至低转换会引发起始条件。 SDA的低至高转换会引发停止条件,而SCL保持稳定在高电平。
主设备始终生成起始和停止条件。在启动条件被初始化后,数据字节中的前7位地址值通过SDA线传输。该地址值确定了总线主设备选择的从设备。第8位确定传输的方向(读或写)。
放置在SDA线上的每个数据字节应为8位。在总线传输操作期间,发送或接收字节的数量没有限制。 I2C主设备和从设备始终从最高有效位(MSB)开始发送数据,然后立即跟随每个ACK位。
1.2 特征
I2C总线接口的特点包括:
• 9个通道的多主、从I2C总线接口(其中8个通道用于通用目的,1个通道专用于高清晰度多媒体接口(HDMI))。
• 7位寻址模式 • 串行、8位导向和双向数据传输
• 在标准模式下支持最高100 kbit/s的速率
• 在快速模式下支持最高400 kbit/s的速率
• 支持主设备发送、主设备接收、从设备发送和从设备接收操作
• 支持中断或轮询事件
当IIC发送完或者接收到一个字节数据,会以中断方式告知。
1.3 工作框图
1.4 其他内容介绍
四种工作模式及操作细节
起始结束信号
一个字节数据传输
应答信号
读写
多主机仲裁机制
仲裁发生在SDA线上,以防止两个主设备之间的总线冲突。如果一个具有SDA高电平的主设备检测到另一个具有SDA低电平的主设备,则不会启动数据传输。这是因为总线上的电平不符合发起数据传输的条件。仲裁过程将一直进行,直到SDA线变为高电平。 当两个或多个主设备同时将SDA线置为低电平时,每个主设备都会评估自己是否具有主设备的资格。为了进行评估,每个主设备都会检测地址位。当每个主设备生成从设备地址时,它会检测SDA线上的地址位。这是因为SDA线变为低电平而不是高电平。 假设一个主设备生成低电平作为第一个地址位,而另一个主设备维持高电平。在这种情况下,两个主设备都会检测到总线上的低电平。这是因为低电平在电源中优于高电平。当发生这种情况时,生成低电平作为第一个地址位的主设备获得主设备的资格,而生成高电平作为第一个地址位的主设备则放弃主设备的资格。 当两个主设备都将第一个地址位生成为低电平时,再次进行第二个地址位的仲裁。这个仲裁过程会一直持续到最后一个地址位。
1.5 四种工作模式寄存器流程
2 IIC寄存器详解
2.1 概述
2.2 控制寄存器
2.3 状态寄存器
2.4 地址寄存器
作为从机才有用
2.5 数据寄存器
2.6 其他寄存器
不常用
3 MPU06050
3.1 简介
MPU6050是一个运动处理传感器,其内部集成了3轴加速度传感器 和3轴陀螺仪(角速度传感器),以及一个可扩展数字运动处理器
3.2 MPU6050主要参数
可测量X、Y、Z轴三个方向的角速度
可编程设置角速度测量范围为±250、±500、±1000、±2000°/sec
可测量X、Y、Z轴三个方向的加速度
可编程设置加速度测量范围为±2g、±4g、±8g、±16g
可编程设置低功耗模式
可编程设置采样频率
3.3 MPU6050通信接口
MPU6050可以使用IIC总线和其他器件进行数据交互,我们可以使用IIC总线向MPU6050中的控制寄存器写入数据来设置MPU6050的工作参数 也可以使用IIC总线从MPU6050中的数据寄存器读取数据来获取加速度、角速度等信息
3.4 6050芯片手册
datasheet重点关注这个时序
寄存器
3.4.1 概览(8位寄存器)
3.4.2 实验需要用到的寄存器
/****************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
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用)
#define SlaveAddress 0x68 //MPU6050-I2C地址
上面设定了典型值,详细介绍参考手册
加速度和角速度都有正负,数据存放在2个寄存器,需要分别读取合并成16位。
加速度正负参考
从机地址(注意要地址需要根据ADO引脚确定,我们开发板即0x68,怕地址冲突)
4 MPU6050寄存器读写时序
4.1 向MPU6050的一个寄存器写一个字节的数据
1.主机(Exynos4412)发送起始信号
2.主机发送从机地址(MPU6050的地址)及读写方向(写)
3.从机(MPU6050)发送应答信号
4.主机发送一个字节数据(要写的寄存器的地址)
5.从机发送应答信号
6.主机发送一个字节数据(要写到寄存器的数据)
7.从机发送应答信号
8.主机发送停止信号
4.2 从MPU6050的一个寄存器读一个字节的数据
1.主机(Exynos4412)发送起始信号
2.主机发送从机地址(MPU6050的地址)及读写方向(写)
3.从机(MPU6050)发送应答信号
4.主机发送一个字节数据(要写的寄存器的地址)
5.从机发送应答信号
6.主机(Exynos4412)发送起始信号
7.主机发送从机地址(MPU6050的地址)及读写方向(读)
8.从机(MPU6050)发送应答信号
9.从机发送一个字节数据(要读的寄存器中的数据)
10.主机发送非应答信号(不再接收更多的数据)
11.主机发送停止信号
5 练习
简述通过主机从MPU6050中的一个寄存器中读一个字节的数据的过程
略