LV.12 D23 IIC控制器与MPU6050 学习笔记

一、Exynos_4412下的IIC控制器

4412有四个IIC,如果要使用需要配置四个寄存器

I2CCON:配置一些功能

I2CSTAT:控制一些功能、显示一些状态

I2CDS:发送和接收数据

I2CADD:当4412作为从机时需要一个地址,这个寄存器用于设置地址

支持7位的地址模式,极少数IIC的地址是10位的。标准模式下最快速度是100K,快速模式下可以达到400k。支持主机发送,主机接收,从机发送,从机接收的工作模式。支持中断和轮询。

上图是主机发送模式下4412的工作流程

上图是主机接收模式下4412的工作流程

由于4412一般作为主控制器,很少作为从机,所以另外两个模式暂时不看了。

二、IIC寄存器详解

[7] 接收到一个字节数据后是否产生应答信号 1产生 0不产生

[6] 分频,影响IIC的通信速度。 0是16倍分频,1是512倍分频

[5] 中断的开关,IIC在接收和发送一个信号后都会产生一个中断信号通知你。 0关闭,1开启

[4] 中断挂起标志位,当[5]把中断功能打开时,[4]这一位才有效。当中断产生这位自动置1,在处理完中断信号后要写成0

[3:0] 影响IIC的通信速度,改变时钟频率。(不用设置)

[7:6] 模式选择

[5] 发送起始和停止信号,0是停止,1是起始

[4] 总线收发数据的开关

[3:0] 只读,表示IIC的状态

I2CADD:4412的地址。作为从机时,才需要设置。

I2CDS:数据移位寄存器。

I2CLC:用于设置滤波器和延迟,暂时用不上就不设置了。

三、MPU6050原理

3.1 MPU6050

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 MPU6050官方芯片手册

MPU6050的引脚:

引脚的分布说明:

典型电路:

每个电容的作用:

3.5 MPU6050寄存器

所有的寄存器:

MPU6050常用寄存器:

bash 复制代码
/****************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地址

例:GYRO_CONFIG寄存器

如果把[4:3]设置成0,就是±250。以此类推。

典型值为0x18,转换为二进制是00011000,[4:3]是11,转换十进制是3,即角速度传感器是2000

上方选中的寄存器是用来存放加速度和角速度传感器的测量结果的。

3B和3C是存放X轴加速度的结果的,MPU6050测量的加速度的值是16位的,高位存放在ACCEL_XOUT_H,低位存放在ACCEL_XOUT_L。后面依次类推。

41和42是存放温度的结果的,MPU6050测量的加速度的值是16位的,高位存放在ACCEL_XOUT_H,低位存放在ACCEL_XOUT_L。

43和44是存放X轴角速度的结果的,MPU6050测量的加速度的值是16位的,高位存放在GYRO_XOUT_H,低位存放在GYRO_XOUT_L。后面以此类推。

MPU6050的IIC地址有两个,一个0x68一个0x69,他的地址由ADO决定,ADO的引脚接到低电平就是0,接到高电平就是1。(为了避免和其他芯片的地址冲突,所以设计成两个地址可选)

四、MPU6050寄存器读写时序

4.1 向MPU6050的一个寄存器写一个字节的数据

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.主机发送停止信号

相关推荐
lulu_gh_yu13 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!33 分钟前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚37 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
听忆.1 小时前
手机屏幕上进行OCR识别方案
笔记
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
Selina K2 小时前
shell脚本知识点记录
笔记·shell
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_2 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
啦啦右一2 小时前
前端 | MYTED单篇TED词汇学习功能优化
前端·学习
霍格沃兹测试开发学社测试人社区2 小时前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask