[X]关闭

[米联派-安路飞龙DR1-FPSOC] FPGA基础篇连载-09 UART串行通信协议介绍

文档创建者:FPGA课程
浏览次数:186
最后更新:2024-09-10
文档课程分类-安路-DR1
安路-DR1: FPSOC-DR1-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 1-FPGA基础入门实验
软件版本:Anlogic -TD5.9.1-DR1_ES1.1
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)FPGA
实验平台:米联客-MLKPAI-SF01-DR1M90M开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

1 概述
信息时代,数据是最宝贵的资源通信就是数据信息的传输与交换。FPGA设计中,我们经常需要板内、板间或者下位机与上位机之间进行数据的发送与接收。没有通信,板卡所实现的功能仅仅局限于板卡本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备通信双方共同遵循一定的通信协议就能进行数据信息的传输与交换。常见的协议有 UART(通用异步收发传输器)、IIC(双向两线总线)、SPI(串行外围总线)、USB2.0/3.0(通用串行总线)以及 Ethernet(以太网)等。SPII2CUARTUSB,以太网等协议慢得多,但它们更简单,使用更少的硬件和系统资源。SPII2C UART 非常适合微控制器之间以及不需要传输大量高速数据的微控制器和传感器之间的通信。在这些协议当中,最为基础的就是UART,因其电路结构简单、成本较低,本节我们主要学习URAT
1.1 通信类型简介 4c4ffefe4be64565ad3f943589d520a1.jpg

1.1.1串行通信和并行通信
1、并行通信(parallel communication):
并行数据传输就是将多bit以成行的状态在同一时钟周期下在不同线路上传输,并行传输数据一般为8bit 16bit等。并行数据发送为了能够在接收端被正确接收,每行数据(8bit 16bit)必须保持时钟同步(源同步、系统同步)。
2、串行通信(serial communication):
串行传输指的是发送方和接收方的数据直接在单根通信线上逐位顺序传送,每一位数据都占据一个固定时间,时钟频率相同。
在低速短距离情况下,并行数据传输结构是非常高效的数据传输方式,所以可以用于微机系统。可当传输数据速度提高时,并行数据传输的弊端就出现了,总线吞吐量=数据线位数×数据速率,传输数据要不提高系统时钟,要不数据多位并行传输。
并行传输当系统时钟的频率增加之后,数据发送端发送数据(data)和时钟(clk )要保持一定的相位关系,同时要保证接收端数据(data)和时钟(clk)满足一定的建立时间和保持时间,这些建立时间和保持时间必须有足够的余量来计算,来满足时钟分配路径延迟到接收端芯片的差异。
在较高的时钟频率,可以在芯片中使用(PLL)锁相环来调整相位,来补偿芯片内时钟分配延迟,并满足电压和温度物理条件的变化,但是当时钟频率足够高时,难以保证稳定统一的时序,不可能建立共同时钟总线可靠地传输数据。数据接收接口同步电路难以实现。
串行数据传输,分时复用在一根或几根线上传输,串行通信在发送端通过数据编码技术把时钟信号嵌入到数据信号中,在接收端使用时钟恢复技术,从数据中提取同步时钟信号来恢复数据,满足了数据传输的时序同步要求,相对稳定可靠,实现单通道的数据传输速率10GB/S以上,如GTX、GTH。并行采用单端信号,串行差分信号,因为两根差分走线之间的耦合很好,当外界存在噪声干扰时,几乎是同时被耦合到两条线上,而接收端关心的只是两信号的差值,所以外界的共模噪声可以被完全抵消。由于两根信号的极性相反,外辐射的电磁场可以相互抵消。单端信号依靠电压阈值判断,差分变化位于信号交点,受温度、工艺等物理因素影响小,降低时序误差。
3、并行数据传输与串行数据传输各自的优势
并行传输优势:近距离传输数据速度快
串行传输优势:设计复杂度成本更低,功耗低、抗干扰强、时序稳定可靠速度快。
1.1.2通信种类
串行通信的种类有很多种,前面笔者提到了串行通信和并行通信的区别,接下来分享同步和异步,单工和全双工、半双工的区别。
5370139af40d44bbaabf6f7662948660.jpg
同步通信:发送端在发送串行数据的同时,提供一个时钟信号,按照一定时序约定(在时钟信号的上升沿、下降沿、低电平、高电平的时候)将数据发送出去,接收端根据发送端提供的时钟信号和时序约定接收数据。
异步通信:接收端和发送端有自己的时钟,发送端发出数据后,不等接收方发回响应,接着发送下个数据包,接受端并不知道数据何时到来,接收端在信号的起始位和停止位下实现信息同步。本节UART就是典型异步通信,数据是一个一个字符传输,数据位后为奇偶校验位,以“起始位”开始,以“停止位”结束,数据位一般为5~8位,数据传输信号的宽度和波特率有关,波特率越高,宽度越小,传输前双方要统一波特率。
同步通信和异步通信对比
1.同步通信接收端和发送端时钟频率相同,时钟信号和数据信号发送同步。异步通信发送端和接收端时钟频率可以不一样,发送端的数据发送可以不连续,任意时间间隔可以发送下一个数据包。
2.同步通信可以同时挂载多设备,异步通信只适用于一对一通信接收发送。
3.同步通信时钟效率高,异步通信效率相对低。
4.同步通信时钟效率高,允许时钟误差范围小,同步通信相对异步通信精准度高。
b42e294dfe6941658d634dc91f7c2ee5.jpg
单工是指:数据传输和发送只能在一个方向,同一时间只有一端接受数据或者一端发送数据。
半双工指:指数据可以在一个信号载体的两个方向上传输,但是不能同时传输,但某一时刻只允许信号在一个信道上单向传输。(相当于可以切换方向的单工)
全双工指:同一时间数据传输和发送同时在两个方向上传输,有独立发送和独立接收数据的能力,实现双向通信。(相当于两个单工)

常见例子:
同步串行通信:QQ在线传输文件,需要双方约定在线,而且传输过程不能中断,否则就会失败。
异步串行通信:电视机遥控器(单工——只能遥控器控制电视,不能反过来)、对讲机(一般都是半双工——讲话的时候不能接听,接听的时候不能讲话)、手机通话过程(全双工——可以同时讲话和接听)
1.2 UART串口通信协议
UART (Universal Asynchronous Receiver/Transmitter)代表通用异步接收器/发送器,也叫是我们经常所说的串口,串口是串行接口(serial interface)的简称,也称为串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。它包括了 RS232、RS499、RS423、RS422 和 RS485等接口标准规范和总线标准规范,它们规定了通信串口的电气特性、传输速率、连接特性和接口的机械特性等内容。UART的主要目的是发送和接收串行数据。UART在发送数据时将并行数据转成串行数据来传输,在接收数据时,将接收到的串行数据转成并行数据。串口只需要2根线就可以实现首发,通信双方只要采用相同的帧格式和波特率,可以完成通信过程。
1.2.1 UART串口通信协议
UART是典型的异步通信,在一次串口通信过程中,数据接收与发送双方没有共享时钟,因此,双方必须协商好数据传输波特率。波特率即数据传输速率。根据双方协议好的传输速率,就能在未共享时钟信号的情况下,接收端即可对发送端的数据进行采样(收发不同步,所以是异步串行通信)。串口通信由发送端和接收端构成,两根信号线实现,TX用于发送数据,RX用于接受数据(收发不是一根线,所以是全双工方式)。
d65e4c31f58c429cb94205e89fec8e89.jpg
1.2.2异步串行通信格式
发送数据包格式如下图所示:发送起始位(Start)+数据位(data)+奇偶校验位+结束位。一开始高电平,然后拉低表示开始位,接着 6~8 个数据位,然后校验位,最后拉高表示停止位,并且进入空闲状态,等待下一次的数据传输。
f5f5ac0a806a4173a1ed81aa90c0f75d.jpg
其中各位的意义如下:
起始位:先发出一个逻辑“0”信号,表示传输数据的开始,低位有效。
数据位:可以是5~8位逻辑“0”或“1”。
校验位:数据位加上一位后,使得“1”的位数应为偶数(偶校验)。
        奇偶校验位就是插入数据块中的一些冗余信息,虽然影响传输效率,如果传输出错就会被检测出来。
结束位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。(一般忽略)
1.2.3传输速率波特率
波特率表示每秒钟传送的二进制位数,是衡量数据传送速率的指标,波特率越大,传输速度越快,但是抗干扰性越差。通常对串口进行数据采样,采用更高频的时钟。这样做的目的是采用高频时钟来锁存低频时钟,减少数据的误码率,增加接收模块的自纠错能力。产生多高的波特率有外部晶振决定。根据双方协议好的传输速率,接收端即可对发送端的数据进行采样,常见波特率标准为300bps,600bps,800bps,9600bps,19200bps,38400bps,115200bps等。
推导100MHz系统时钟,波特率为115200bps条件下传输1bit需要计数多少次:100MHz时钟1s计数100 000 000次,115200bps表示1s传输二进制的位数115200bit,传输1bit需要 1/115200s=8.68us,传输1bit需要计数100 000 000/115200=868次。
2 串口通信数据位校验
在串口传输数据时,通讯距离过长、波特率高、噪声等因素会影响通信的稳定性,虽然不能解决通信过程中出现的问题,但是可以发现数据错位,在串口通信中一般会引入一种检验方式来监控传输中的数据以便及时发现错误。
笔者这里主要介绍几种常见的检验方式,即奇校验ODD、偶校验EVEN、累加和校验、CRC循环冗余码校验。
2.1 奇校验ODD
奇校验:使完整编码(有效位和校验位)中的“1”的个数为奇数个;
如果原来信息中1的个数为奇数个,则校验位为0,这样所有信息中还是奇数个1;
如果原来信息中1的个数为偶数个,则校验位为1,这样所有信息中还是奇数个1;
常见的串口通信格式是(8位数据位+1位奇数校验位)。
以发送字符:10010101为例
                        
1
                        
                        
0
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
1
                        
                        
1
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
2.2偶校验EVEN
偶校验:使完整编码(有效位和校验位)中的“1”的个数为偶数个;
如果原来信息中1的个数为奇数个,则校验位为1,这样所有信息中还是偶数个1;
如果原来信息中1的个数为偶数个,则校验位为0,这样所有信息中还是偶数个1;
常见的串口通信格式是(8位数据位+1位偶数校验位)。
以发送字符:10010101为例
                        
1
                        
                        
0
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
0
                        
                        
1
                        
                        
1
                        
奇偶校验总结
1.奇偶校验的正确率只有一半不到,如果有两位数据位同时改变,则无法发现数据传输错误,如果只有偶数位能检测到,奇数位变化则无法检测到。
2.一般数据为8位+1位校验,数据传输效率降低,损失11%效率。数据位短损失更多。
3.能发现错误,无法纠正错误。
4.检验方法简单,代码表述容易。
2.3 累加和校验
所谓的累加和校验有很多种,最常见的一种是在每次通信数据包最后都加一个字节的校验数据,这个校验字节里的数据是通信数据包里所有数据的不进位累加和 。基本格式:传输数据+校验数据。下面以一个示例说明情况。
累加和校验:发送数据包位:06H、56H、C6H
进行不进位累加和的检验字节方式:92H
06H+56H+C6H=192H→舍去进位92H
所以最后发送数据包为:06H、56H、C6H、92H
接收方接收到数据后同样对一个数据包的数据进行不进位累加和计算,如果累加出的结果与校验位相同的话就认为传输的数据没有错误。
累加和校验总结:
1.检验方法简单,代码表述容易。
2.能发现错误,无法纠正错误。
3.校验正确率一般,字节是以求和舍进位方式,多一个或者少一个字节,检测不到。
2.4 循环冗余校验
基于FPGA的实现,当然还有检错能力极强的CRC,由于实际应用中CRC的校验表直接存储在ROM中,进行索引查找,常见的CRC表可以自行去查找,笔者这是简单介绍定义。
循环冗余校验 (Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。
3串口通信的接口类型
串口有4种电气标准,分别是TTL、RS232、RS422和RS485。这4种串口只在电气信号上有差别,在帧格式,传输逻辑和软件操作上基本都是一样的。RS-232、RS422、RS-485同属于异步串行通信(UART用的是TTL电平标准),并不是标准通信协议,仅仅作为UART通讯的一个机械和电气接口标准。异步串口通信的具体实现有多种不同的电气特性和物理标准,芯片引脚常常是不能直接用作RS-232、RS422、RS-485 通信,若加入一个合适的驱动芯片,如SP3232E、SP3485,来完成电平的转换,UART就能用于RS-232、RS422、RS-485 通信,或与计算机的端口连接。UART 应用非常广泛,工控的人机界面HMI、手机、PC 等应用中都要用到UART。
3.1 接口类型简介
                        
接口标准
                        
                        
通信方式
                        
                        
通信方向
                        
                        
RS232
                        
                        
异步通信
                        
                        
全双工
                        
                        
RS422
                        
                        
同步/异步
                        
                        
全双工
                        
                        
RS485
                        
                        
异步通信
                        
                        
半双工
                        
TTL
TTL电平是板上通信最常用的方式,SOC或独立的串口控制器芯片直接就提供该接口。TTL为正逻辑电平信号,电压值也较低,一般就是芯片电源电压3.3V或5V,抗干扰能力较差,所以也只是在板上短距离连接。
RS-232标准
RS-232是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号。RS-232是对电气特性以及物理特性的规定,只作用于数据的传输通路上,它并不内含对数据的处理方式。RS-232与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接,开发板都选择TTL的UART,或者直接UART转USB做在开发板上RS-232规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来IBM公司的PC机将RS-232 简化成了DB9连接器。
fef9013647f848c9832e583a4e6089e7.jpg
a18aaefcc15a42ffb473ba5c89e68342.jpg
3d8d5fcaba054c1381e1c5a91b4db9bc.jpg
RS-422标准:
RS-422标准是一种单机发送、多机接收的单向、平衡传输规范。RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器,一般采用终端匹配的总线型结构,即采用一条总线将各个节点串接起来,不支持环形或星形网络。
RS-485标准:
为扩展应用范围,在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。RS-485采用半双工工作方式,支持多点数据通信,最大支持32个节点(如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点),同样不支持环形或星型网络。需要使用星型结构,就必须使用485中继器或者485集线器才可以。
3.2 接口标准的性能对比
1、RS-232 采取不平衡传输方式,即所谓单端通讯。而 RS485 则采用平衡传输,即差分传输方式。RS232接口为全双工数据通讯模式,而RS485接口为半双工数据通讯模式,数据的收发不能同时进行,为了保证数据收发的不冲突,硬件上是通过方向切换来实现的,相应也要求软件上必须将收发的过程严格地分开。
2、电平特性和抗干扰性:RS232:传输电平信号接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容。需要使用转换电路方能与TTL电路连接,其抗干扰性差。RS485:传输差分信号(lvds)逻辑“1”以两线间的电压差为+(2—6)V表示,接口信号电平降低,就不易损坏接口电路的芯片,且该电平与TTL电平兼容。
3、传输距离和速率:RS232传输距离有限,最大传输距离标准值为15米,最大传输速率最大为20KB/S。RS485最大传输距离为1219米。 最大传输速率为10Mbps,在100KB/S的传输速率下,才可以达到最大的通信距离。
4、通信节点:RS232串行接口可以连接两个设备,一个发射机和一个接收机;RS-422最多1发10收;RS485串行接口可以用一台设备控制32个至多128个。
5、RS422电气性能与RS-485完全一样。主要区别在于RS-422 有4 根信号线:两根发送、两根接收,能够做到同时收发(全双工)。RS-485 只有2 根信号线,所以只能工作在半双工模式。
对比示意图:
                        
                        
                        
RS232
                        
                        
RS422
                        
                        
RS485
                        
                        
传输方式
                        
                        
单端通讯
                        
                        
差分传输方式
                        
                        
差分传输方式
                        
                        
负载
                        
                        
1收1发
                        
                        
1发10收
                        
                        
1发128收
                        
                        
传输距离
                        
                        
15米
                        
                        
1219米
                        
                        
1219米
                        
                        
工作模式
                        
                        
单工/全双工
                        
                        
全双工
                        
                        
单工/半双工
                        
                        
接线方式
                        
                        
点对点
                        
                        
多点(非固定)
                        
                        
多点(非固定)
                        
                        
抗干扰能力
                        
                        
                        
                        
                        
                        
                        
                        
最高传输速率
                        
                        
20kbps
                        
                        
10Mbps
                        
                        
10Mbps
                        
                        
信号线数
                        
                        
D9
                        
                        
4根(2收2发)
                        
                        
2根(收发)
                        
                        
最大驱动电压
                        
                        
+/-25V
                        
                        
+/-6V
                        
                        
+/-6V
                        
                        
接收灵敏度
                        
                        
+/-3V
                        
                        
+/-200mV
                        
                        
+/-200mV
                        
3.3 电平标准
RS232、RS485、TTL 同属于异步串行通信(UTAT 用的是 TTL 电平标准),这三种通信方式本质上是电平逻辑的区别,都是一种逻辑电平的表达方式。下面简单介绍一下各自的供电电源、电平标准以及使用场景。
RS232电平:
RS232电平采用负逻辑,多用于电脑串口,早期目前使用DB25线的接口后来IBM将标准改成D9线接口。
                        
电压范围
                        
                        
电平逻辑
                        
                        
-15V ~ -3V
                        
                        
代表逻辑1
                        
                        
+3V ~ +15V
                        
                        
代表逻辑0
                        
                        
-3V ~ +3V
                        
                        
无意义
                        
RS485电平:
RS485电平标准如下图,RS485由于采用差分电平,传输是两根线,两根信号线电压的差值来确定电平逻辑。
                        
端口
                        
                        
电压范围
                        
                        
电平逻辑
                        
                        
输出端
                        
                        
+2V ~ +6V
                        
                        
代表逻辑1
                        
                        
                        
                        
-2V ~ -6V
                        
                        
代表逻辑0
                        
                        
                        
                        
其他
                        
                        
无意义
                        
                        
输入端
                        
                        
> +200mv
                        
                        
代表逻辑1
                        
                        
                        
                        
< -200mv
                        
                        
代表逻辑0
                        
TTL电平:
TTL电平标准如下图,TTL(晶体管-晶体管逻辑电平)信号系统。这是计算机处理器控制的设备内部各部分之间通信的标准技术。电路、数字电路、微机原理与接口技术、单片机等课程中都有所涉及。
                        
端口
                        
                        
电压范围
                        
                        
电平逻辑
                        
                        
输出端
                        
                        
<0.8v
                        
                        
代表逻辑0
                        
                        
                        
                        
>2.4v
                        
                        
代表逻辑1
                        
                        
输入端
                        
                        
<1.2v
                        
                        
代表逻辑0
                        
                        
                        
                        
>2.0v
                        
                        
代表逻辑1
                        
TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。2.4V和5V之间还有较大的电平裕量,增加了系统的功耗,同时影响了速度。所以后来升级有了LVTTL,常见的LVTTL为3.3V、2.5V,甚至更低的电压LVTTL。在LVTTL中Vcc=3.3V中,电平标准:
                        
端口
                        
                        
电压范围
                        
                        
电平逻辑
                        
                        
输出端
                        
                        
<0.4v
                        
                        
代表逻辑0
                        
                        
                        
                        
>2.4v
                        
                        
代表逻辑1
                        
                        
输入端
                        
                        
<0.8v
                        
                        
代表逻辑0
                        
                        
                        
                        
>2.0v
                        
                        
代表逻辑1
                        



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则