SPI 读取不同长度 寄存器_几种常用的总线设计:UART/SPI/I2C
一只可以爬行、跳舞、避障,并且可以手机遥控的机器蜘蛛是怎么做到的呢?下面这张图给出了这个机器人系统的组成。
六足机器人https://www.zhihu.com/video/1112389717064151040
树莓派作为控制核心,实现算法处理和指令发送,FPGA内部实现PWM发生器,驱动18路舵机动作。要想让树莓派和FPGA协调工作,两者之间的通信就显得尤为重要。
计算机系统发展至今,虽然数据通信总线也在不断的更新换代,速度带宽不断提升,但是有一些总线,尤其是一些串行总线SPI/I2C/UART等至今仍然是应用的主流。
在这个六足机器人系统中,树莓派和FPGA之间就使用的串行总线通信,对于MCU来说SPI/I2C/UART等串行总线是标配,我们只需要在软件中配置一下寄存器就可以工作了,但是对于FPGA来说,如何实现这些总线呢?
UART(通用异步接收/发送)是一种计算机硬件设备,它在计算机中的字符之间转换数据,以及在起始位和停止位之间封装这些字符的异步串行通信格式, 其中数据格式和传输速度是可配置的。
在UART通信中,两个UART可直接相互通信。 发送UART将来自CPU等控制设备的并行数据转换为串行格式,并将其串行发送到接收端的UART,接收UART将串行数据转换回接收设备的并行数据。 在两个UART之间传输数据只需要两根线, 数据流从发送UART的Tx引脚到接收UART的Rx引脚。
本质上,UART充当并行和串行接口之间的中介。 UART的一端是八条左右数据线(加上一些控制引脚),另一条是两条串行线 - RX和TX。
两个设备可以发送和接收数据的串行接口是全双工或半双工。
UART以异步方式发送数据,也就是说没有时钟信号将发送UART的位输出与接收UART的位采样进行同步。 发送UART将“起始”和“停止”位添加到正在传输的数据包中, 这些位定义了数据包的开始和结束,接收UART基于这些位的信息知道何时开始读取输入的串行数据。
当接收UART检测到起始位时,它以特定的频率(也就是“波特率”)读取输入的串行数据。波特率是数据传输速度的度量,单位-每秒位数(bps)。 两个UART必须以相同的波特率运行。发送和接收UART之间的波特率相差不能超过10%,偏差太远就无法对数据进行正确的解读。两个UART还必须配置为发送和接收相同的数据包结构。
实际应用中的信号传输方式
将两个UART的设备进行连接有多种方式,取决于具体的应用场景,在这里我们仅看两种:TTL UART和RS-232。
TTL UART:当微控制器和其它器件进行串行通信时,通常以TTL电平进行通信。 TTL串行信号存在于微控制器的电源电压范围内 - 通常为0V至3.3V或5V。 VCC电平(3.3V,5V等)的信号表示空闲线,值1或停止位。 0V(GND)信号表示起始位或值为0的数据位。
RS-232 UART:可以在一些更古老的计算机和外围设备上找到,就像TTL串口翻转一样。 RS-232信号通常介于-13V和13V之间,但规格允许从+/- 3V到+/- 25V。 在这些信号上,低电压(-5V,-13V等)表示空闲线,停止位或值为1的数据位。一个高的RS-232信号表示起始位或0- 值数据位。 这与TTL系列相反。
SPI是一种用于短距离通信(主要是嵌入式系统中)的同步串行通信接口规范,广泛用于各种MCU处理器中,同传感器,串行ADC、DAC、存储器、SD卡以及LCD等进行数据连接。
4种传输模式:
每次数据传输都是先将SSN被驱动为逻辑低电平时开始。由时钟的极性(CPOL)和相位(CPHA)构成了4种不同的数据传输模式(0,1,2,3),分别对应四种可能的时钟配置。
- CPOL: 时钟的极性,它控制着时钟信号的初始逻辑状态。
- CPHA: 时钟相位,它控制了数据转换和时钟转换之间的关系。
时钟的极性和相位构成了4种不同的可能,也就有4种模式。
在时钟周期的上升沿采样的位在时钟周期的下降沿移出,反之亦然。
具有非反相时钟极性
- 模式0:配置时钟相位使得数据在时钟脉冲的上升沿采样,并在时钟脉冲的下降沿移出。 这对应于上图中的第一个蓝色时钟轨迹。 请注意,数据必须在时钟的第一个上升沿之前可用。
- 模式1:配置时钟相位使数据在时钟脉冲的下降沿采样,并在时钟脉冲的上升沿移出。 这对应于上图中的第二个蓝色时钟轨迹。
使用反相时钟极性
- 模式2:配置时钟相位,使得数据在时钟脉冲的下降沿采样,并在时钟脉冲的上升沿移出。 这对应于上图中的第一个橙色时钟轨迹。 请注意,数据必须在时钟的第一个下降沿之前可用。
- 模式3:配置时钟相位,使得数据在时钟脉冲的上升沿采样,并在时钟脉冲的下降沿移出。 这对应于上图中的第二个橙色时钟轨迹。
I2C是一种简单地连接多个芯片的总线方式,跟SPI对比,I2C没有天生的主、从之分,也就是说挂在两根线(数据线SDA和时钟线SCL)上的所有器件都是生而平等的。
I2C总线传输时序
I2C协议概要
以下是I2C的主要特征:
- 不论总线上挂多少个设备,只需要两根信号线(时钟SCL和数据SDA)就搞定;
- 两根信号线都通过合适阻值的上拉电阻连接到正电源上;
- 每个设备的接口都是通过漏极开路(或集电极开路)的输出驱动连接到时钟和数据信号线上;
- 每个从设备都有一个7位的地址,可供寻址用。主设备必须知道这些从设备的地址以便同指定的一个从设备进行通信;
- 所有传输均由“主设备”发起和终止;“主设备”可以将数据写入一个或多个“从设备”或从“从设备”请求数据;
- 在系统中“主”和“从”不是固定的,任何一个设备都可以作为“主”或“从”,只要它配置了适当的硬件或固件,实际上在嵌入式系统中最常采用的架构就是一个“主设备”向多个“从设备”发送命令或由多个“从设备”采集数据;
- 数据信号在时钟的下降沿更新,并在上升沿被采样,如下图;
I2C协议中数据和时钟的时序关系
- 数据是以一个字节进行传输的,每一个字节跟着1位的握手信号,作为ACK/NACK(应答/无应答)位。
I2C有何优势?
- 管脚/信号数量少,即便挂了很多的设备,也只用两根线;
- 可适应不同的从设备的要求;
- 可支持多个主设备;
- 引入ACK/NACK功能以提升应对错误的能力。
有何劣势?
- 增加了固件和底层硬件的复杂度
- 增加了协议的负荷,降低了数据传输的吞吐率
- 需要上拉电阻
由此可以看到I2C比较适合复杂、多样化、需要通信设备灵活扩展的场景;UART比较适合单点对单点的连接,因为UART没有标准的方式来寻址不同的设备或共享管脚。SPI比较适合系统中有一个主设备和少量的从设备,而且每一个从设备都有一个单独的“从设备选择”信号,当总线上有多个设备的时候会需要更多的管脚,布线的难度也会增加,当你需要支持多个主设备的时候,SPI用起来也会非常尴尬。
如果你需要较高的传输速率,使用I2C就不太合适,SPI能够支持更高的时钟频率,数据负载开销也最小。如果你想使用FPGA从头设计串行数据传输,SPI和UART的底层硬件设计要简单得多,迫不得已再用I2C。
好了,今天的分享到这就告一段落啦!其他更多内容请扫码下方关注本堂课教学!
SPI 读取不同长度 寄存器_几种常用的总线设计:UART/SPI/I2C相关推荐
- SPI 读取不同长度 寄存器_正点原子Linux第二十七章SPI实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十七章SPI实验 同I2C一样,SPI是很常用的通信 ...
- SPI 读取不同长度 寄存器_敏矽微电子Cortex-M0学习笔记10-SPI通信详解
1.SPI简介 ME32F030支持扩展的 SPI (Serial Peripheral interface)接口,它可以支持标准的 SPI 操作,兼容 4 线的 SSI (SynchronousSe ...
- SPI 读取不同长度 寄存器_[读书笔记]《计算机科学速成课》—6 寄存器和内存
上节中介绍的ALU进行计算后得到的结果需要对其进行存储,可能还要进行多个连续操作,这就需要用到计算机内存了.计算机使用的是随机存取存储器(Random Access Memory, RAM),其只能在 ...
- SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解
SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH, ...
- 根据文法画出语法树_几种常用的英语教学法误导了语法教学
多年来,我国的英语教学一直采用语法翻译法,教法比较单一.上世纪八十年代初,随着国际交流的日益加强和教学改革的进一步深入,各种英语教学法,尤其是从国外推介的教学法都相继进入英语教学领域.尽管有一些教学法 ...
- python电影推荐系统的设计与实现_一种电影推荐系统的设计与实现
一种电影推荐系统的设计与实现 张博 ; 李昂松 ; 尹琛 [期刊名称] < <数码世界> > [年 ( 卷 ), 期] 2019(000)011 [摘要] 随着网络的发展 , ...
- mysql最优库容_一种增加已达到设计库容的尾矿库存储量的方法
专利名称:一种增加已达到设计库容的尾矿库存储量的方法 技术领域: 本发明属于采矿技术领域,涉及矿山尾矿库扩容领域,具体是指ー种增加已达到设计库容的尾矿库存储量的方法. 背景技术: 从矿石中提取有效成分 ...
- pipe建模工具使用_几种常用建模工具核心对比
几种常用建模工具核心对比 以下是几种常用建模工具核心对比: 1.适用范围 ROSE:需求分析,详细设计,软件框架生成(C++, Java, ANSI SQL, Oracle) ERWI ...
- arduino圆孔供电_几种常用的为Arduino供电方法 – 太极创客
Arduino运行需要电能.以下为几种常用的为Arduino供电方法. 方法一:使用USB端口为Arduino供电 我们可以使用Arduino的USB端口为Arduino开发板供电.使用这种方法供电时 ...
- 软甲架构设计软件_几种常用软件架构设计指南
几种常用软件架构设计指南 软件架构( software architecture )是一系列相关的抽象模式,用于指导大型 软件系统各个方面的设计. 软件架构是一个系统的草图. 软件架构描述的对象是 直 ...
最新文章
- 一套代码小程序WebNative运行的探索01
- squid启动失败的解决办法
- php俩个字符串合并,php分割合并两个字符串的函数实例
- C/C++ unsigned char*类型
- the job was canceled什么意思_什么第三人称单数形式?怎么用?
- 批量添加DNS的A记录和PTR记录
- InceptionNet V3整理总结
- 软考,个人快速成长最好的投资
- BZOJ4545: DQS的trie 广义后缀自动机_LCT
- 用python画动态三维轨迹_python 画3维轨迹图并进行比较的实例
- CVE2014-6287分析报告
- 防不胜防 这些游戏被外挂活生生地毁了
- windows7下制作苹果U盘启动盘
- 计算机名称位数怎么改,请问下怎样更改电脑位数
- 插入网线后以太网显示ip4连接无网络访问权限
- 深圳:由“独角兽”们构建起的硬核科技之城
- 漫漫Java学习路,第十四天
- 征途LINUX服务端脚本技术,腾讯征途手游脚本 辅助基本语法
- 设计模式之禅之单一职责原则
- 华为路由器显示连接到服务器失败怎么办,华为路由WS5200可以搜到wifi但无法连接怎么办...