题目:芯片常用协议种类详解,含多协议转换器

目录

1. 引言

1.1常用通信样式

1.2 FPGA芯片上的UART也是一样的

1.3 FPGA用verilog实现UART

1.4基于FPGA的SPI协议实现

1.5通过FPGA来做多协议转化

Pan德

十年专注FPGA硬件工程师

FPGA&芯片的定制开发、技术交流+V好:xinpianxiehui

  1. 引言

为什么需要通信协议,通信协议就像一个人的语言,如果没有语言信息传达,芯片之间就像哑巴一样,不知所云。通讯的二进制信息里主要包含:时间CL,地址,数据,还有一个速率。

1.1常用通信样式

无非就以下两种,要么串行,要么并行

一种是需要时钟(同步通信) 一种是不需要时钟(异步通信)

1.传输速率 2.数据长度 3. 开始和停止

1.1.1常用I2C

理论上最高可控制127个地址设备

I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在各类电子产品中有着广泛的应用。 I2C总线最主要的优点是其简单性和有效性。

由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。(根据I2C的总线长度的不同和所挂组件的多少,这个传输速率是不同的,理论最大的传输速率是400Kbps)

100Kbps 用10K电阻 , 400Kbps用2K电阻

I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

集成I2C的芯片

I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率400kbps。各种被控制电路均并联在这条总线上,任何时候时钟信号都是由主控器件产生。

I2C总线在传送数据的过程中,主要有三种控制信号:起始信号,结束信号,应答信号

起始信号:当SCL为高电平时,SDA由高电平转为低电平时,开始传送数据

结束信号:当SCL为高电平时,SDA由低电平转为高电平时,结束数据传送

应答信号:接收数据的器件在接收到数据后,向发送数据的器件发出低电平信号,表示已收到数据。这个信号可以是主控器件发出,也可以是从动器件发出。总之由接收数据的器件发出。

这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。

I2C总线操作

I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电

平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。

1.1.2常用SPI

是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。

(1)SDO – 主设备数据输出,从设备数据输入(也叫MOSI)

(2)SDI– 主设备数据输入,从设备数据输出 (也叫MISO)

(3)SCLK– 时钟信号,由主设备产生

(4)CS – 从设备使能信号,由主设备控制 (也叫SS

SPI是英文Serial Peripheral Interface的缩写,中文意思是串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。

SPI概述SPI:高速同步串行口。3~4线接口,收发独立、可同步进行.

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。现在越来越多的芯片集成了这种通信协议。

SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。

(1)SDO – 主设备数据输出,从设备数据输入(也叫MOSI)

(2)SDI– 主设备数据输入,从设备数据输出 (也叫MISO)

(3)SCLK– 时钟信号,由主设备产生

(4)CS – 从设备使能信号,由主设备控制 (也叫SS)

其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。

接下来就负责通讯的3根线了。通讯是通过数据交换完成的,SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。

要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。

性能对比,SPI传输距离短,比I2C快,因为线多,并行功能多。SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据

SPI

在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

1.1.3常用UART 

(Universal Asynchronous Receiver/Transmitter)

一根线来通信

通用异步收发器

UART是用于控制计算机与串行设备的芯片。它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。

UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。---功能包括微处理器接口,发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。

UART协议是实现设备之间低速数据通信的标准协议。因发送时不需同时发送时钟,故此协议为异步

1.1.4 STM32上的串口解析

1.2 FPGA上的UART协议

1、概述

UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。UART端口有4个pin(VCC, GND, RX, TX), 用的TTL电平,  低电平为0(0V),高电平为1(3.3V或以上)。

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在单片机中UART可以说是一种最基本的配置,很多与电脑进行通信的设备都采用到它。

RX - 数据接受接口

两个设备间将TX与RX相连,RX与TX相连即可正常工作。最常用到的就是我们电脑上的USB那就是个最典型的UART接口。

UART使用标准的TTL/CMOS逻辑电平(0~5v、0~3.3v、0~2.5v或0~1.8v)来表示数据,高电平表示1,低电平表示0。为了增强数据的抗干扰能力、提高传输长度,通常将TTL/CMOD逻辑电平转换为RS-232逻辑电平,3~12v表示0,-3~-12v表示1

TxD、RxD数据线以位为最小单位传输数据,而帧由具有完整意义的、不可分割的若干位组成,它包含开始位、数据位、校验位(需要的话)和停止位。发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为波特率)、数据的传输格式(即有多少个数据位、是否使用校验位、是奇校验还是偶校验、有多少个停止位)。

数据传输流程如下:

(1)空闲状态:平时数据线处于空闲状态(1状态)

(2)发送起始位:当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间。

这样接收方检测到开始位后,在等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。

(3)发送信息位:UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将他们发送出去,首先发送最低位。

(4)奇偶校验位:如果使用校验功能,UART在发送完数据后,还要发送1位校验位。有两种校验方法:奇校验、偶校验——数据位连同校验位中,1的数据等于奇数或偶数。

(5)停止位:最后,发送停止位,数据线恢复到空闲状态(1状态)。停止位的长度有3种:1位、1.5位、2位。

2、基于FPGA的UART串口设计实践

2.1需求分析

sys_clk位25MHZ,波特率=9600,起始位=1,信息位=8,无奇偶校验位,停止位=1。

波特率=9600,则一个信息位持续时间是1/9600s。即在25MHZ时钟下,需要计数2604个时钟周期。

采用一个计数范围[0:2603]的计数器,当器计数到1301的时候,开始采样Rxd_r上的数据。

rxd_r是rxd信号,经过clk25MHZ打三拍产生,作为数据rxd跨时钟域的处理。

架构如下:

tx_ready:高电平,表示UART空闲,可以接收tx_data[7:0]的数据。

下图是UART接收数据的时序示意图。

UART接收RxD数据

UART发送数据的时序图,与上图类似,不

FPGA&芯片的定制开发、技术交流+V好:xinpianxiehui

专注FPGA15年

1.3基于FPGA用verilog实现UART

FPGA实现两大巨头,AI计算篇和访存篇 - FPGA论坛-资源最丰富FPGA/CPLD学习论坛 - 21ic电子技术开发论坛

1.4基于FPGA的SPI协议实现

FPGA实现两大巨头,AI计算篇和访存篇 - FPGA论坛-资源最丰富FPGA/CPLD学习论坛 - 21ic电子技术开发论坛

1.5通过FPGA来做多协议转化

FPGA实现两大巨头,AI计算篇和访存篇 - FPGA论坛-资源最丰富FPGA/CPLD学习论坛 - 21ic电子技术开发论坛

芯片常用协议种类详解,含多协议转换器相关推荐

  1. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)

    首先,谢谢原作者:(此文为转载的文章,现将原地址贴出如下:以下文章来源于yMatrix,作者MatrixDB团队Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)) 更多精彩Zab ...

  2. 常用U-boot命令详解

    原文来自:http://www.flatws.cn/article/program/shell/2011-02-23/14038.html 常用U-boot命令详解 U-boot发展到现在,他的命令行 ...

  3. jQuery数组处理详解(含实例演示)

    jQuery的数组处理,便捷,功能齐全. 最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生js数组不能企及的功能. 最近时间紧迫,今天抽了些时间回过头来看 jQuery中文文档 中对数组的 ...

  4. 一致性协议raft详解(三):raft中的消息类型

    一致性协议raft详解(三):raft中的消息类型 前言 raft 节点 Raft中RPC的种类 RequestVote leader选举成功后 AppendEntries 请求参数 返回值 存储日志 ...

  5. Memcache的使用和协议分析详解

    Memcache的使用和协议分析详解 作者:heiyeluren 博客:http://blog.csdn.net/heiyeshuwu 时间:2006-11-12 关键字:PHP Memcache L ...

  6. HTTP响应协议格式详解

    文章目录 响应协议格式 1. 首行 状态码详解 2. 响应头header 响应协议格式 HTTP请求协议由首行.响应头(header).空行.正文(body)组成.通过空行来区别header和body ...

  7. MySQL常用存储引擎详解

    MySQL常用存储引擎详解 一.什么是存储引擎 二.掌握存储引擎的重要性 三.MySQL常用的存储引擎有哪些 四.存储引擎的特性 1.InnoDB 2.MyISAM 3.MEMORY 4.ARCHIV ...

  8. TCP数据包协议格式详解

    出一个专栏把通信协议搞一下吧,万物互联的根本呀. IP 版本4位:4(二进制0100)表示IPv4,6(二进制0110)表示IPv6 报头长度(单位4byte):因为选项长度不确定,取值范围是5-15 ...

  9. 常用socket函数详解

    常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...

最新文章

  1. python搞笑代码-python有趣代码
  2. C语言面试算法题(一)
  3. 最大公因数、最小公倍数、因式分解
  4. linux grunt环境,安装 Grunt - Grunt: JavaScript 世界的构建工具 | Grunt 中文网
  5. ❤️六W字《计算机基础知识》(四)(建议收藏)❤️
  6. springboot项目层次结构_Springboot项目结构Springboot项目结构
  7. [转载] python-TypeError: Object of type ‘Decimal‘ is not JSON serializable 报错
  8. JVM调优总结(转载)
  9. hexo添加_hexo 如何给文章添加目录
  10. MIPI归纳---为什么阻抗为100欧姆
  11. C#winform【获取文件路径--遍历文件夹图片】--实战练习六
  12. 2018ICPC网络赛(焦作站)E题题解
  13. sql空值用什么表示_表面粗糙度Ra为什么用0.8,1.6,3.2,6.3,12.5表示?
  14. VirtualBox安装黑群晖并建立smb共享目录的方法
  15. 在自己的数据集上训练CrowdDet过程记录
  16. python中可哈希是什么意思_实习小记-python中可哈希对象是个啥?what is hashable object in python?...
  17. 07.第八章、质量管理
  18. 如何用计算机装B,计算机专业装逼经验(转)
  19. iOS和Android的差别
  20. 服务器维护详解,服务器维护Linux tr 命令详解

热门文章

  1. 在线生成32位和16位大小写MD5密文
  2. 重磅,成立南京集成电路大学!
  3. JSP使用Websocket技术实现聊天功能--H5网页前端部分(二)
  4. 关于websphere的ibm-web-ext.xmi文件,该如何处理
  5. java tika 读取文件_【apache tika】apache tika获取文件内容(与FileUtils的对比)
  6. 别人淘金,我在拉表!(1)
  7. matlab消失线估计相机位置,利用消失点和消失线进行相机标定
  8. 论文四连读(2)利用菱形空间检测照片中的消失点 Real Projective Plane Mapping for Detection of Orthogonal Vanishing Points
  9. 连连跨境支付:跨境独立站最方便的收款提现方式使用教程!
  10. 把一个数分解成任意几个数之和,打印所有和式分解的结果