UART通信协议学习笔记

目录

1.1 UART协议简介

1.2 波特率和比特率

1.3 RS-232信号线

1.4 RS-232和RS-485

1.5 代码波形图

1.6 相关问题


1.1 UART协议简介

同步串行通信需要通信双方在同一时钟的控制下,同步传输数据;异步串行通信是指通信双方使用各自的时钟控制数据的发送和接收过程。

UART是一种采用异步串行通信方式的通用异步收发传输器(universal  asynchronous receiver-transmitter),它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。

RS232是 UART 的一种,没有时钟线,只有两根数据线,分别是 rx 和 tx,这两根线都是 1bit 位宽的。其中 rx 是接收数据的线,tx 是发送数据的线。

UART在发送或接收过程中的一帧数据由4部分组成,起始位、数据位、奇偶校验位和停止位

  1. 起始位标志着一帧数据的开始;
  2. 停止位标志着一帧数据的结束;
  3. 数据位是一帧数据中的有效数据;(从最低位到最高位依次发送和接收)
  4. 校验位分为奇校验和偶校验,用于检验数据在传输过程中是否出错。奇校验时,发送方应使数据位中1的个数与校验位中1的个数之和为奇数;接收方在接收数据时,对1的个数进行检查,若不为奇数,则说明数据在传输过程中出了差错。同样,偶校验则检查1的个数是否为偶数。
  • UART通信过程中的数据格式及传输速率是可设置的,为了正确的通信,收发双方应约定并遵循同样的设置。数据位可选择为5、6、7、8位,其中8位数据位是最常用的,在实际应用中一般都选择8位数据位;校验位可选择奇校验、偶校验或者无校验位;停止位可选择1位(默认),1.5或2位。
  • 拓展知识:由于FPGA串口输入输出引脚为TTL电平(晶体管-晶体管逻辑电平),用3.3V代表逻辑“1”,0V代表逻辑“0”;而计算机串口采用RS-232电平,它是负逻辑电平,即-15V~-5V代表逻辑“1”,+5V~+15V代表逻辑“0”。因此当计算机与FPGA通信时,需要加电平转换芯片SP3232,实现RS232电平与TTL电平的转换。

1.2 波特率和比特率

波特率:是码元传输速率单位,他说明单位时间传输了多少个码元。

(波特率:在信息传输通道中,携带数据信息的信号单元叫码元(因为串口是 1bit 进行传输的,所以其码元就是代表一个二进制数),每秒钟通过信号传输的码元数称为码元的传输速率,简称波特率,常用符号“Baud”表示,其单位为“波特每秒(Bps)”。串口常见的波特率有 4800、9600、115200 等。)

比特率:是信息量传送速率单位,即每秒传输二进制代码位数。bit/s

(比特率:每秒钟通信信道传输的信息量称为位传输速率,简称比特率,其单位为“每秒比特数(bps)”。比特率可由波特率计算得出,公式为:比特率=波特率 * 单个调制状态对应的二进制位数。如果使用的是 9600 的波特率,其串口的比特率为:9600Bps * 1bit= 9600bps。)

  • 如果在数字传输过程中,用0V表示数字0,5V表示数字1,那么每个码元有两种状态0和1,每个码元代表一个二进制数字。此时的每秒码元数和每秒二进制代码数是一样的,这叫两相调制,波特率等于比特率。
  • 如果在数字传输过程中,0V、2V、4V和6V分别表示00、01、10和11,那么每个码元有四种状态00、01、10和11,每个码元代表两个二进制数字。此时的每秒码元数是每秒二进制代码数是一半的,这叫四相调制,波特率等于比特率一半。
  • 串口通信的速率用波特率表示,它表示每秒传输二进制数据的位数,单位是bps(位/秒)。

1.3 RS-232信号线

RS232接口标准出现较早,可实现全双工工作方式,即数据发送和接收可以同时进行。在传输距离较短时(不超过15m),RS232是串行通信最常用的接口标准,本章主要介绍针对RS-232标准的UART串口通信。

RS-232标准的串口最常见的接口类型为DB9,样式如下图所示:

DB9接口定义以及各引脚功能说明如图 16.1.4所示,我们一般只用到其中的2(RXD)、3(TXD)、5(GND)引脚,其他引脚在普通串口模式下一般不使用。

1.4 RS-232和RS-485

实际上,除了RS-232之外,RS-422和RS-485也都是常用的串行通信接口标准,它们定义了接口不同的电气特性,如RS-232是单端输入输出,而RS-422/485为差分输入输出等。

RS-232采用的是负逻辑,即逻辑“1”表示-3V到-15V之间的电平,逻辑“0”表示+3V到+15V之间的电平。RS-485利用的是两根数据线之间的电压差进行数据传输(半双工),即逻辑“1”以两线间的电压差+2V~+6V表示,逻辑“0”以两线间的电压差-6V~-2V表示。

两者之间的区别主要在于以下几点:

1.传输方式不同:RS-232采取不平衡传输方式,即所谓单端通讯。而RS485则采用平衡传输,即差分传输方式。

2.传输距离不同:RS-232适合本地设备之间的通信,传输距离一般不超过20m。而RS-485的传输距离为几十米到上千米。

3.RS-232只允许一对一通信,而RS-485接口在总线上是允许连接多达128个收发器。

1.5 代码波形图

接收数据:

上升沿监测:

下降沿监测:

发送数据:

1.6 相关问题

问题1:既然UART传输是异步的,那如何保证收发数据的正确性。

  1. 接收数据时打两拍消除亚稳态。
  2. 在主机在接收数据的时候,要在计数器的中间接收数据。
  3. 在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

问题2:如果停止位是1.5的话,如何实现?为什么停止位有时用1位,有时用1.5位或2位。

1.5停止位,是指停止位的“1”电平宽度的保持为1.5个单位时间长,一个单位时间就是波特率的倒数,例如波特率为9600bps,则一个单位时间长为1/9600s,1.5个停止位,即停止位电平保持1.5/9600s。

停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

参考文献:

1.征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》

2.《开拓者FPGA开发指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值