lv11 嵌入式开发 IIC(下) 20

目录

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 控制寄存器

[7]位:应答信号,设置为接收模式时有用,收到字节会应答,发送模式时没有意义
[6]位:时钟源选择
[5]位:收到数据、发送数据后可以产生中断信号
[4]位:显示中断状态,建立在第5位的基础上,写0清除置位
[3:0]位:发送时钟的值

2.3 状态寄存器

[7:6]位:模式选择
[5]位:对于主机来说 1产生起始信号、0产生停止信号
对于从机来说 置1 繁忙,0 空闲
[4]位:收发开关
[3:0]位:状态

2.4 地址寄存器

作为从机才有用

 

2.5 数据寄存器

2.6 其他寄存器

不常用

此滤波器可防止两个PCLK时钟之间的毛刺引起的错误。

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中的一个寄存器中读一个字节的数据的过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HJ103 Redraiment的走法

题目: HJ103 Redraiment的走法 题解: dfs 暴力搜索 枚举数组元素,作为起点如果后续节点大于当前节点,继续向后搜索记录每个起点的结果,求出最大值 public int getLongestSub(int[] arr) {int max 0;for (int i 0…

data_loader返回的每个batch的数据大小是怎么计算得到的?

data_loader是一个通用的术语,用于表示数据加载器或数据批次生成器。它是在机器学习和深度学习中常用的一个概念。 一、data loader 数据加载器(data loader)是一个用于加载和处理数据集的工具,它可以将数据集划分为小批次&#…

内存学习——堆(heap)

目录 一、概念二、自定义malloc函数三、Debug运行四、heap_4简单分析4.1 heap管理链表结构体4.2 堆初始化4.3 malloc使用4.4 free使用 一、概念 内存分为堆和栈两部分: 栈(Stack)是一种后进先出(LIFO)的数据结构&…

AVFormatContext封装层:理论与实战

文章目录 前言一、封装格式简介1、FFmpeg 中的封装格式2、查看 FFmpeg 支持的封装格式 二、API 介绍三、 实战 1:解封装1、原理讲解2、示例源码 13、运行结果 14、示例源码 25、运行结果 2 四、 实战 2:转封装1、原理讲解2、示例源码3、运行结果 前言 A…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑电力-交通交互的配电网故障下电动汽车充电演化特性》

这个标题涉及到电力系统、交通系统和电动汽车充电的复杂主题。让我们逐步解读: 考虑电力-交通交互的配电网故障: 电力-交通交互: 指的是电力系统和交通系统之间相互影响、相互关联的关系。这可能涉及到电力需求对交通流量的影响,反…

回溯算法之N皇后

一 什么是回溯算法 回溯算法(Backtracking Algorithm)是一种用于解决组合优化问题的算法,它通过逐步构建候选解并进行验证,以寻找所有满足特定条件的解。回溯算法通常应用于在给定约束条件下枚举所有可能解的问题,如…

Git—文件添加查看删除修改

目录 1.添加文件—场景一 2.查看.git文件 3.添加文件—场景三 4.修改文件 5.版本回退 6.撤销修改 7.删除文件 1.添加文件—场景一 在包含.git的目录下新建⼀个ReadMe文件,我们可以使用 git add 命令可以将文件添加到暂存 区: ●添加一个或多个文…

Matlab数学建模算法之小波神经网络详解

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

存储成本降71%,怪兽充电历史库迁移OceanBase

怪兽充电作为共享充电宝第一股,业务增长迅速,以至于业务架构不停地增加组件。在验证 OceanBase 可以简化架构并带来更大的业务价值后,首次尝试在历史库中使用 OceanBase 替代 MySQL,存储成本降低 71%。本文为怪兽充电运维架构部王…

Docker 入门

Docker 入门 基础 不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题 而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载…

【C++】输入输出流 ⑥ ( cout 标准输出流对象 | cout 常用 api 简介 | cout.put(char c) 函数 )

文章目录 一、cout 标准输出流对象1、cout 标准输出流对象简介2、cout 常用 api 简介 二、cout.put(char c) 函数1、cout.put(char c) 函数 简介2、代码示例 - cout.put(char c) 函数 一、cout 标准输出流对象 1、cout 标准输出流对象简介 cout 是 标准输出流 对象 , 是 ostrea…

端口被占用 --- 解决方案

问题描述 加速服务启动失败,443端口被magentproc(1576)占用。请关掉占用443端口的程序或者尝试使用系统代理模式。 问题解决 按下 win R 打开 输入cmd 输入命令 netstat -ano | findstr 443 找到 0.0.0.0:443 对应的端口 (1576) 按下 ctrl shift esc, 打开任务管…

综述 2023-IEEE-TCBB:生物序列聚类方法比较

Wei, Ze-Gang, et al. "Comparison of methods for biological sequence clustering." IEEE/ACM Transactions on Computational Biology and Bioinformatics (2023). https://ieeexplore.ieee.org/document/10066180 被引次数:1;研究背景&am…

力扣题:数字与字符串间转换-12.13

力扣题-12.13 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:442. 数组中重复的数据 解题思想:直接相除即可 class Solution(object):def optimalDivision(self, nums):""":type nums: List[int]:rtype: str"&qu…

Transformer 简介

Transformer 是 Google 在 2017 年底发表的论文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 机制,能够处理输入序列中的每个元素,并能计算其与序列中其他元素的交互关系的方法,从而能够更…

再见了Future,图解JDK21虚拟线程的结构化并发

Java为我们提供了许多启动线程和管理线程的方法。在本文中,我们将介绍一些在Java中进行并发编程的选项。我们将介绍结构化并发的概念,然后讨论Java 21中一组预览类——它使将任务拆分为子任务、收集结果并对其进行操作变得非常容易,而且不会不…

Unity中Shader黑白阀值后处理效果

文章目录 前言一、我们先来PS看一下黑白阀值的效果二、使用step(a,b)函数实现效果三、实现脚本控制黑白阀值1、在Shader属性面板定义控制阀值变量2、把step的a改为_Value3、在后处理脚本设置公共成员变量,并且设置范围为(0,1)4、在Graphics.B…

Cocos Creator:创建棋盘

Cocos Creator:创建棋盘 创建地图三部曲:1. 创建layout组件2. 创建预制体Prefab,做好精灵贴图:3. 创建脚本LayoutSprite.ts收尾工作: 创建地图三部曲: 1. 创建layout组件 使用layout进行布局,…

四十三、Redis基础

目录 一、认识NoSql 1、定义: 2、常见语法 3、与关系型数据库(SQL)的区别: 二、认识Redis 1、定义: 2、特征: 3、Key的结构: 三、安装Redis 四、Redis常见命令 1、数据结构介绍 2、…

关于DNS服务器地址总是127.0.0.1且无法解析域名地址

问题 笔者尝试nslookup解释域名时,出现服务器变成本地环回口地址,导致无法解析域名 C:\Users\Zsy>nslookup www.baidu.com 服务器: UnKnown Address: 127.0.0.1*** UnKnown 找不到 www.baidu.com: Server failed排查思路 尝试关闭虚拟网卡&#…