1、中国科学院国家空间科学中心文件名称: UART 设计说明实验单位: 悦供货单位: 悦编 写: 悦校 对: 钢审 核: 士批 准: 钢2016 年 6 月 14 日目录目 录1.串行通信概念 .51.1 串行通信分类 51.2 串行通信方式 52.UART 异步串口通信原理 62.1 波特率 62.2 通信协议 62.3 UART 串口结构图 .82.4 WINDOWS 串口配置界面 .92.4 串口通信标准 92.4.1 RS-232C 标准 92.4.2 RS-422、 RS-423 和 RS-429 标准 113.UART 异步串行口收发模块设计 113.1 UART 传输时序 .123.
2、2 全局复位模块 .133.3 UART 分频器 .133.4 UART 接收模块 .143.5 UART 发送模块 .163.6 UART 顶层框图 .183.7 UART 激励文件 .19UART 设计说明1. 串行通信概念1.1 串行通信分类串口通信是目前比较重要的一种通信方式,主要是用于计算机和外部的通信。数据通信的基本方式可分为并行通信与串行通信两种: 并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,要求通讯速率较高的应用场合。 串行通信:是指利用一条传输线将资料一位位地顺序传送。它的特点是通信线路简单,利用简单的线缆就可实现通信,降
3、低成本,适用于远距离通信,传输速度慢的应用场合。发送方在发送前要将并行数据转成串行数据,接收方接收后要完成串行数据到并行数据的转换。 异步串行通信:在通信的数据流中,字符间异步,字符内部各位间同步。异步通信方式的“异步”主要体现在字符与字符之间通信没有严格的定时要求。然而,一旦传送开始,收/ 发双方则以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。 同步串行通信:数据流中的字符与字符之间和字符内部的位与位之间都同步。同步串行通信是以数据块(字符块)为信息单位传送,而每帧信息包括成百上千个字符,因此传送一旦开始,要求每帧信息内部的每一位都要同步。 UART 设计说明1.2 串行通信
4、方式2. UART 异步串口通信原理2.1 波特率波特率:单位时间内传送的二进制数据的位数,以位/秒(bit/s)表示,也称为数据位率。它是衡量串行通信速率的重要指标。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600,19200,38400,115200 等。收/发时钟:直接决定了通信线路上数据传输的速率,对于收 /发双方之间数据传输的同步有十分重要的作用。2.2 通信协议串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信
5、速度的参数。它表示每秒钟传送的 bit 的个数。例如 300 波特表示每秒钟发送 300 个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要 4800 波特率,那么时钟是 4800Hz。这意味着串口通信在数据线上的采样率为 4800Hz。通常电话线的波特率为 14400,28800 和 36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GPIB 设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。UART 设计说明当计算机发送一个信息包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置
6、取决于你想传送的信息。比如,标准的 ASCII 码是 0127(7 位)。扩展的 ASCII 码是 0255(8 位)。如果数据使用简单的文本(标准 ASCII 码),那么每个数据包使用 7 位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包” 指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为 1,1.5 和2 位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟
7、同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是 011,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位 1,这样就有 3 个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步通信协议:是指通信双方约定的一些规则。在使用异
8、步串口传送一个字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、数据位、奇偶校验位、停止位。通讯时序图如下:图 1 通讯时序图 开始前,线路处于空闲状态,送出连续“1”。UART 设计说明 传送开始时首先发一个“0”作为起始位。 然后出现在通信线上的是字符的二进制编码数据,每个字符的数据位长可以约定为 5 位、6 位、7 位或 8 位,一般采用 ASCII 编码,它包含的 8 位是由低位开始传送。 后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。 最后是表示停止位的“1”信号,这个停止位可以约定持续 1
9、 位、1.5位或 2 位的时间宽度。 至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 图 2 采样时序图2.3 UART 串口结构图串口在一般的台式机上都会有。随着笔记本电脑的使用,一般会采用 USB转串口的方案虚拟一个串口供笔记本使用。下图为 UART 串口的结构图。串口具有 9 个引脚,但是真正连接入 FPGA 开发板的一般只有两个引脚。这两个引脚是:发送引脚 TxD 和接收引脚 RxD。由于是串行发送数据,因此如果开发板发送数据的话,则要通过 TxD 线 1 bit 接着 1 bit 发送。在接收时,同样通过RxD 引脚 1
10、bit 接着 1 bit 接收。UART 设计说明图 3 UART 串口结构图异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而在同一个字符中的两个相邻位代码间的时间间隔是固定的。串口用于ASCII 码字符的传输。通信使用 3 根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。2.4 Windows 串口配置界面图 4 Windows 串口配置界面打开 Windows 自带的串口收发软件:超级终端,可以配置相关的选项。 每秒位数:可以设定一个周期的长度:如果我们设定为 9
11、600,则上图UART 设计说明中 1 位持续的时间是:1/9600s。 数据位:可以从 5、6、7、8 中选一位。 奇偶校验:可以从偶校验、奇校验、无、标记、空格中任选一个。 停止位:可以是:1、1.5、2。2.4 串口通信标准2.4.1 RS-232C 标准 串行通信系统 常用的 RS-232C 信号线 电气特性 应保证电平在(515)V 之间 对于数据线:逻辑“1” (MARK)= -3V - 15VUART 设计说明逻辑“0” (SPACE) = +3V+15V 对于控制信号:接通状态(ON)即信号有效电平 = +3V15V 断开状态(OUT)即信号无效电平= - 3 - 15V 进行
12、电平转换 RS-232C 接口采用的是负逻辑,其逻辑电平与 TTL 电平不一样,不能兼容。因此,为了实现与 TTL 电路的连接,必须进行电平转换。 目前可以使用新型电平转换芯片 MAX232 和 MAX232A(高速)双组 RS-232C 发送/接收器,实现 TTL 电平与 RS-232C 电平双向转换。 传输速率与传输距离 连接器UART 设计说明2.4.2 RS-422、RS-423 和 RS-429 标准 RS-422:规定电气特性、双端传输 RS-429:规定机械连接标准,37 脚 RS-423:与 RS-232、RS-422 兼容3. UART 异步串行口收发模块设计在一般的嵌入式开
13、发和 FPGA 设计中,串口 UART 是使用非常频繁的一种调试手段。下面我们将使用 Verilog RTL 编程设计一个串口收发模块。这个设计有两个目的: 从串口中接收数据,发送到输出端口。接收的时候是串行的,也就是一个接一个的;但是发送到输出端口时,我们希望是 8 位放在一起,成为并行状态。我们知道,串口中出现信号,是没有先兆的。如果出现了串行数据,则如何通知到输出端口呢?我们引入“接收有效”端口。“接收有效”端口在一般情况下都是低电平,一旦有数据到来时,它就变成高电平。下一个模块在得知“接收有效”信号为高电平时,它就明白:新到了一个字节的数据,放在“接收字节”端口里面。 发送数据到串口。
14、发送数据的时候,我们也希望输入端口能够给出一个简单的形式。我们引入“发送有效”信号,它为高电平,表示我们UART 设计说明希望把“发送字节”送入 TxD 发送出去。但是“发送有效”信号是否生效是有限制的,也就是正在发送的时候,是不能接收新的数据并发送的。所以,我们引入一个“发送状态”信号,它标识当前的“发报机”是否处于忙碌状态。如果“发报机”处于忙碌状态,则它拒绝“发送有效”信号,不予执行。图 5 串口接收和发送数据时进行串并转换的示意图3.1 UART 传输时序UART 传输时序如下图所示。发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间 T;接着数据按
15、低位到高位依次发送,数据发送完毕后,接着发送停止位(停止位为高电位),一帧资料发送结束。接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,通知后续设备准备接收数据或存入缓存。UART 设计说明由于 UART 是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART 采用 16 倍数据波特率的时钟进行采样。每个数据有 16 个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般 UART帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。U
16、ART 的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这时计数器 cnt 开始计数,当计数器为 24=16+8 时,采样的值为第0 位数据;当计数器的值为 40 时,采样的值为第 1 位数据,依此类推,进行后面 6 个数据的采样。当计数器的值为 152 时,采样的值为“1”表示停止位,一帧数据接收完成。下文将按上面的算法进行 Verilog HDL 语言建模与仿真。3.2 全局复位模块3.3 UART 分频器假设数据的波特率为 p,则所需时钟的频率为 16*p。以波特率 p=9600 为例,系统时钟为 50MHz,则分频系数为 50000000/(16*9600)=325
17、.52,取整为 326。分频器 Verilog HDL 语言代码如下:UART 设计说明3.4 UART 接收模块UART 接收模块的功能:时时检测线路,当线路产生下降沿时,即认为线路有数据传输,启动接收数据进程进行接收,按从低位到高位接收数据。UART 接收模块的 Verilog HDL 语言代码如下:UART 设计说明UART 设计说明3.5 UART 发送模块UART 发送模块的功能:接收到发送指令后,把数据按 UART 协议输出,先输出一个低电平的起始位,然后从低到高输出 8 个数据位,最后是高电平的停止位。UART 发送模块的 Verilog HDL 语言代码如下:UART 设计说明
18、UART 设计说明3.6 UART 顶层框图在顶层模块上分别放置复位模块,分频模块,UART 发送模块,UART 接收模块,并添加输入输出端口,各个模块的连接如下图所示。c l kr s tr x dr x d _ e nr x d _ d a t au a r t _ r xc l kR S 2 3 2 _ R X Dc l kr s tt x d _ e nt x d _ d a t at x di d l eu a r t _ t xR S 2 3 2 _ T X Du a r t _ t o pr e s e tc l k r s tu a r t _ c l kc l k c l k u a r tUART 设计说明3.7 UART 激励文件UART 设计说明