lv11 嵌入式开发 IIC(下) 20

news2024/11/29 8:55:22

目录

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.coloradmin.cn/o/1299996.html

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

相关文章

【已解决】解决UbuntuKali无法进行SSH远程连接

目录 Ubuntu20.04配置SSH远程连接Kali Linux配置SSH远程连接 Ubuntu20.04配置SSH远程连接 首先更新安装包 sudo apt-get update 下载SSH服务 sudo apt install openssh-server 查看SSH服务 service ssh status 打开 /etc/ssh/sshd_config文件修改配置文件 将PermitRootLog…

智能优化算法应用:基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于郊狼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.郊狼算法4.实验参数设定5.算法结果6.参考文献7.MA…

思科最新版Cisco Packet Tracer 8.2.1安装

思科最新版Cisco Packet Tracer 8.2.1安装 一. 注册并登录CISCO账号二. 下载 Cisco Packet Tracer 8.2.1三. 安装四. 汉化五. cisco packet tracer教学文档六. 正常使用图 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新…

【数据结构第 6 章 ③】- 用 C 语言实现邻接表并简单介绍十字链表和邻接多重表

目录 一、邻接表 1.1 - ALGraph.h 1.2 - ALGraph.c 1.3 - Test.c 二、十字链表 三、邻接多重表 一、邻接表 邻接表(Adjacency List)是图的一种链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,第 i 个单链表中的结…

使用ssm框架进行mapper或者service单纯测试时报错问题处理

问题 使用注解方式配置好ssm后,无法在测试中单独测试mapper层和service层。效果如下: 解决 关闭配置类中的EnableWebMvc 再次运行,即可完成测试。

【WPF 按钮点击后异步上传多文件code示例】

前言: WPF中按钮点击事件如何执行时间太长会导致整个UI线程卡顿,现象就是页面刷新卡住,点击其他按钮无反馈。如下是进行异步执行命令,并远程上传文件的代码。 ![异步上传文件](https://img-blog.csdnimg.cn/direct/20c071929b004dcf9223dee2…

postgresql安装部署(docker版本)

1.在线部署 创建数据库存储目录 mkdir /home/pgdata创建容器 docker run --name postgresql --restartalways -d -p 5432:5432 -v /home/pgdata:/var/lib/postgresql/data --shm-size10g -e POSTGRES_PASSWORD密码 postgis/postgis:12-3.2-alpine–name为设置容器名称 -d表…

第 375 场 LeetCode 周赛题解

A 统计已测试设备 模拟&#xff1a;记录当前已测试设备数量 class Solution { public:int countTestedDevices(vector<int> &batteryPercentages) {int res 0;int s 0;for (auto x: batteryPercentages) {if (x - s > 0) {res;s;}}return res;} };B 双模幂运算 …

NR Channel raster和Sync raster

NR中&#xff0c;由于信道带宽可能非常大&#xff0c;如果UE按照channel Raster进行同步信号搜索&#xff0c;需要的时间很长&#xff0c;且非常耗电&#xff1b;因而NR引入了Synchronization raster的概念&#xff0c;同步信号按照Sync Raster放置。 ARFCN 频点号对应Channel…

java--DateTimeFormatter、Period、Duration

1.DateTimeFormatter 2.LocalDateTime提供的格式化、解析时间的方法 3.Period(一段时期) 可以用于计算两个LocalDate对象相差的年数、月数、天数。 4.Duration(持续时间) 可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数&#xff1b;支持LocalTime、LocalDa…

【Spring】依赖注入之属性注入详解

前言&#xff1a; 我们在进行web开发时&#xff0c;基本上一个接口对应一个实现类&#xff0c;比如IOrderService接口对应一个OrderServiceImpl实现类&#xff0c;给OrderServiceImpl标注Service注解后&#xff0c;Spring在启动时就会将其注册成bean进行统一管理。在Co…

【小沐学Python】Python实现WebUI网页图表(gradio)

文章目录 1、简介2、安装3、基本测试3.1 入门代码3.2 组件属性3.3 多个输入和输出组件3.4 图像示例3.5 聊天机器人3.6 模块&#xff1a;更灵活、更可控3.7 进度条 结语 1、简介 https://www.gradio.app/ Gradio是用友好的网络界面演示机器学习模型的最快方法&#xff0c;因此…

C# WPF上位机开发(动态库dll的开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多时候&#xff0c;我们并不希望所有的程序都放到一个exe里面。因为这样相当于把所有的风险都放在了一个文件里里面&#xff0c;既不利于程序的升…

漏洞复现-大华dss struts2-045表达式注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

Lambda表达式规则,用法

Lambda表达式是JDK8新增的一种语法格式 1.作用 简化匿名内部类的代码写法 Lambad用法前提&#xff1a;只能简化函数式接口&#xff08;一般加有Funcationallnterface&#xff09;&#xff08;有且仅有一个抽象方法&#xff09;的匿名内部类 匿名内部类&#xff1a;(本质是对…

用23种设计模式打造一个cocos creator的游戏框架----(十二)状态模式

1、模式标准 模式名称&#xff1a;状态模式 模式分类&#xff1a;行为型 模式意图&#xff1a;允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构图&#xff1a; 适用于&#xff1a; 1、一个对象的行为决定于它的状态&#xff0c;并且它必须…

Leetcode—219.存在重复元素II【简单】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—219.存在重复元素II 实现代码 class Solution { public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> m;int n nums.size();for(int i 0; i < n; i) {if(m…

Hexo部署到云服务器后CSS样式无效的问题

Hexo部署到云服务器后CSS样式无效的问题 01 前言 趁活动入手了一个云服务器&#xff08;Linux&#xff09;&#xff0c;打算简单挂个博客上去&#xff0c;因为之前部署到github有了一些经验&#xff0c;所以还是选择使用Hexo。中间步骤略&#xff0c;部署完使用浏览器访问的时…

计算机基础知识66

Auth的补充 #概念&#xff1a;是django 的一个app&#xff0c;关于用户的登录&#xff0c;退出&#xff0c;注册... # 配置文件中配置&#xff1a;表会被迁移 INSTALLED_APPS [django.contrib.auth,] # auth有哪些表---权限控制&#xff1a; Permission&#xff1a;auth_permi…

m.2固态硬盘怎么选择?

一、什么是固态硬盘 固态硬盘又称SSD&#xff0c;是Solid State Drive的简称&#xff0c;由于采用了闪存技术&#xff0c;其处理速度远远超过传统的机械硬盘&#xff0c;这主要是因为固态硬盘的数据以电子的方式存储在闪存芯片中&#xff0c;不需要像机械硬盘那样通过磁头读写磁…