如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78611309

上一篇基本概念讲了一通,大体上对MPU6050有了一个了解。对于MPU6050开发来讲主要的应该就是 I2C/SPI 通信和寄存器控制了吧。

接下来我们继续看芯片手册,简单了解一下I2C/SPI通信协议。(S5PV210开发里再综合详讲)

I2C 和SPI 都是串行同步通信,同步通信和异步通信区别是什么?这一点我们刚讲过,参看:S5PV210开发 -- 通信

一、I2C和SPI(仅限MPU-6000)串行接口

MPU-6000 / MPU-6050的内部寄存器和存储器可以使用400 kHz的I2C 或 1MHz的SPI(仅MPU-6000)访问。 SPI工作在四线模式。

注意:
为了防止在使用SPI(MPU-6000)时切换到I2C模式,应通过设置 I2C_IF_DIS 配置位来禁用 I2C 接口。 在等待 6.3节“寄存器读/写启动时间”指定的时间后,立即执行该位设置。

二、I2C接口

I2C是由信号串行数据(SDA)和串行时钟(SCL)组成的双线接口。 一般来说,这些线路是开漏和双向的。 在广义的I2C接口实现中,连接的设备可以是主设备或从设备。 主设备将从设备地址放在总线上,并且具有匹配地址的从设备确认主设备。
系统处理器(MPU-60X0)作为从设备与主系统处理器进行通信。 SDA和SCL线通常需要上拉电阻(4.7k电阻)到VDD。 最大总线速度是400 kHz。
MPU-60X0的从机地址为 b110100X,长度为7位。
7位地址的LSB位由引脚AD0的逻辑电平决定。 这允许两个MPU-60X0 连接到同一个I2C总线。在此配置中使用时,其中一个设备的地址应为b1101000(AD0引脚为逻辑低电平),另一个的地址应为b1101001(AD0引脚为逻辑高电平)。

PS:讲到这里就搞明白了,为什么AD0接地了!!

思考:这里只给出了从机地址 b110100X,那I2C的读地址和写地址是什么呢?

三、I2C通信协议

(1)开始(S)和停止(P)条件:

主机在总线上启动 START 条件(S)时启动 I2C 总线通信,总线定义为 SCL 线为高电平(见下图)时,SDA 线从高电平变为低电平。 总线被认为是繁忙的,直到主机在总线上放置一个停止条件(P),在SCL为高电平(见下图)时,在SDA线路上定义为从低电平到高电平的跳变

此外,如果产生一个重复的START(Sr)而不是STOP条件,总线将保持忙碌状态。

(2)数据格式/应答

I2C 数据字节定义为8位长。 每个数据传输传输的字节数没有限制。 传输的每个字节必须跟一个应答(ACK)信号应答信号的时钟由主器件产生,而接收器通过下拉 SDA 并在应答时钟脉冲的高电平期间保持低电平来产生实际的应答信号。
如果一个从机处于繁忙状态,并且在某个其他任务执行之前不能发送或接收另一个数据字节,则它可以保持SCL为低电平,从而强制主机进入等待状态。 当从站准备好时,正常的数据传输恢复,并释放时钟线(参见下图)。

扩展:

应答信号的时钟由主器件产生,这句话让我想起先前做 DM368 编码的时候出现无应答的问题。

参看:DM368开发 -- 编码并实时播放

(3)通信

在开始与起始条件(S)的通信之后,主机发送一个7位从机地址,然后是第8位(读/写位)。 读/写位指示主器件是从正在接收数据还是正在写入从器件。 然后,主器件释放SDA线并等待来自从器件的应答信号(ACK)。 传输的每个字节后面都必须有一个应答位。 为了应答,从器件将SDA线拉低并在SCL线的高电平期间保持低电平。
数据传输始终由具有STOP条件(P)的主机终止,从而释放通信线路。 但是,主器件可以产生一个重复的起始条件(Sr),并在不首先产生停止条件(P)的情况下寻址另一个从器件。 SCL为高电平时,SDA线上的低电平至高电平转换定义停止条件。 除了启动和停止条件之外,所有SDA变化都应在SCL低电平时进行

===============================

翻译的真乱,简单点说就是:

数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;若SDA发生跳变,则用来表示一个会话的开始或结束。应答(ADC)为SDA为低电平。
数据改变:SCL为低电平时,SDA线才能改变传输的bit。

===============================

为了写入内部MPU-60X0寄存器,主机发送开始条件(S),然后是I2C地址和写入位(0)。 在第9个时钟周期(时钟为高电平),MPU-60X0确认传输。 然后主机把寄存器地址(RA)放在总线上。 在MPU-60X0确认接收到寄存器地址后,主机将寄存器数据放到总线上。 接着是ACK信号,数据传输可以由停止条件(P)结束。 为了在最后的ACK信号之后写入多个字节,主机可以继续输出数据而不是发送停止信号。 在这种情况下,MPU-60X0自动递增寄存器地址并将数据装载到适当的寄存器。下图显示了单字节和双字节写入序列:

要读取内部MPU-60X0寄存器,主机将发送一个开始条件然后是I2C地址和写入位,然后是要读取的寄存器地址。 主机收到来自MPU-60X0的ACK信号后,发送一个起始信号随后是从机地址和读取位。 结果,MPU-60X0发送一个ACK信号和数据。 通信以无应答(NACK)结束信号和来自主机的停止位。 定义NACK条件,使得SDA线在第9个时钟周期保持高电平。 下图显示了单字节和双字节读取序列。

四、I2C术语

五、SPI接口(仅限MPU-6000)

SPI 是一个 4 线同步串行接口,使用两根控制线和两根数据线。 标准主从SPI操作期间,MPU-6000始终作为从设备运行。

对于主设备,串行时钟输出(SCLK),串行数据输出(SDO)和串行数据输入(SDI)在从设备之间共享每个SPI从器件都需要自己的片选(/ CS)线
/ CS 在传输开始时变为低电平(有效),在结束时变为高电平(无效)。 一次只有一个/ CS线路处于活动状态,确保在任何给定时间只有一个从站被选中。 未选中的从器件的 / CS 线保持高电平,使 SDO 线保持高阻态(高阻态),从而不会干扰任何有源器件。

SPI操作特性

1、数据首先传递 MSB(最高位),最后传递 LSB(最低位)
2、数据在SCLK的上升沿锁存
3、数据应在SCLK的下降沿进行转换
4.、SCLK的最大频率是1MHz
5.、SPI读写操作在16个或更多时钟周期(两个或多个字节)内完成。 第一个字节包含SPI地址,下一个字节包含SPI数据。 第一个字节的第一位包含读/写位,并指示读(1)或写(0)操作。
以下7位包含寄存器地址。 在多字节读/写的情况下,数据是两个或多个字节:

6、支持单个或双个 读/写

如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78611309

MPU6050开发 -- 进阶之I2C/SPI通信协议相关推荐

  1. MPU6050开发 -- 测试程序分析

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78623928 上一篇文章再 C52 单片机上进行了测试,那么接下来我们就分析 ...

  2. MPU6050开发 -- 在 C52 单片机上测试

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78616706 用了三篇文章,从 MPU6050的初识,相关基本概念,到 I2 ...

  3. 【Renesas RA6M4开发板之I2C读取mpu6050】

    [Renesas RA6M4开发板之I2C读取mpu6050] 1.0 mpu6050 1.1 mpu6050介绍 1.2 mpu6050特点 1.3 mpu6050应用 2. RT-theard配置 ...

  4. 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板

    开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C.SPI.1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成 ...

  5. 嵌入式开发基础—SPI通信协议解析

    嵌入式开发基础-SPI通信协议解析 1 通信方式(主从通信) 1.1 什么是主从通信 1.2 主从通信如何实现 1.2.1 相关控制引脚介绍 1.2.2 如何通过控制引脚实现主从通信 2 通信数据交换 ...

  6. 基于I2C/SPI总线的温湿度采集与OLED显示

    实验一 实验目的 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出.具体任务: 1)解释什么是"软件I2 ...

  7. 基于STM32开发板I²C总线通信协议浅析

    基于STM32开发板I²C总线通信协议浅析 一.前言 I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980 ...

  8. I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集

    I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集 一实验要求 二.12C总线通信协议 1.12C介绍 2.I2C物理层 3.I2C协议层 4.软件IIC和硬件IIC 三.STM ...

  9. STM32开发 -- PMIC、I2C详解

    如需转载请注明出处:https://juyou.blog.csdn.net/article/details/103391329 终于到PMIC了,这部分有用到I2C,之前一直想讲来着,现在正好一并讲了 ...

最新文章

  1. mysql 启动 failed to start_Linux下启动MySQL提示“mysql deamon failed to start”错误的解决办法...
  2. 443 ERROR [main] client.ConnectionManager$HConnectionImplementation: Can‘t get connection to ZooKeep
  3. CRMEB 小程序版源码下载
  4. Docker 三剑客
  5. C++程序员必读的经典著作
  6. 关于linux技术的的外文,关于Linux的介绍-外文翻译.doc
  7. VHDL六层电梯控制器及仿真
  8. CTF工具-gdb简介
  9. mybatis自动生成mapping和实体
  10. MySQL常用命令_vortex_新浪博客
  11. 解决PRINT函数UTF-8问题
  12. parent.dialogArguments兼容问题
  13. 车载中控桌面布局android,安卓车载导航桌面主题
  14. 双击事件(dblclick)时,不触发单击事件(click)
  15. 2021年超全微博营销全攻略抢先看!
  16. Harbor中镜像清理
  17. 下载喜马拉雅工具 洪校长音频
  18. java中printf,print,println,区别及用法详解
  19. 【图割】最大流/最小割算法详解(Yuri Boykov and Vladimir Kolmogorov,2004 )
  20. 手里没有USB转TTL模块调试红外学习模块不要紧,利用最小系统板自己焊接一个

热门文章

  1. php/ajax/mysql
  2. JUnit中@Test的运行顺序
  3. 用Python更改IP地址(转)
  4. 华为成为全球领先的移动设备供应商
  5. MTM:matlab实现5主函数解码
  6. VTK一个面向对象的可视化类库
  7. 【转】C++ vector的reserve和resize详解
  8. 牛客网题目——不用四则运算符号,计算两个数字的和
  9. MATLAB中K-means函数表达方式
  10. 二叉搜索树(BFS)总结