FPGA初级课程第二十讲 UART
FPGA初级课程第二十讲 UART
Hi,大家好!我是至芯科技的李老师。
今天讲课的题目是:UART。
本节课我先简要地介绍一下UART串行通信接口的物理原理,然后实际演示一下UART逻辑电路的建模与仿真,我们还要结合上位PC机一起搭建一个完整的演示平台,并下板查看实际效果。
UART,是常用的串行通信接口,它的全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。
打开《ZX_NO1.pdf》文件,我们看一下串口通信的电路图。
我们打开至芯科技编写的《37.炼狱传奇-串口通信之战.pdf》文档。
UART串行接口简称串口,是我们各类芯片最常用的一种异步通信接口,通过这样的串口我们就可以建立起计算机和我们实验板之间的通信和控制关系,也就是我们通常所说的上下位机通信。
要实现这样的通信,首先我们需要用到一个外部的电平转换芯片MAX232,其具体配置电路如下:
注解:
MAX232芯片是美信(MAXIM)公司专为RS_232标准串口设计的单电源电平转换芯片,使用+5V单电源供电
主要特点:
1. 符合所有的RS_232技术标准
2. 只需要单一+5V电源供电
3. 片载电荷泵具有升压、电源极性翻转能力,能够产生+10V和-10V电压
4. 功耗低,典型供电电流5 mA
5. 内部集成2个RS_232驱动器
6. 高集成度,片外最低只需四个电容即可工作
由原理图可以看出,最终我们FPGA需要控制的其实也就是两条信号线:
RXD和TXD,分别为数据接收线和数据发送线。
那么接下来,问题就变得简单了,既然只有两条线,那么我们只需要关注其数据收发时序即可,时序图如下:
UART数据格式:
说明:在此实验中,无奇偶校验位,则一帧数据为十位。
(奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。
采用奇数的称为奇校验,反之,称为偶校验。
采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。
若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。)
在UART接收时,采集一帧数据的中间8位有效位,忽略开始位与停止位;在UART发送时,将发送的并行8位数据转为串行数据,并添加开始位与停止位。
UART中的一帧数据为10位,空闲时均为高电平,在检测到开始位(低电平)之后,开始采集8位有效数据位(低位在前),再将停止位置为高电平即可。
通过前面的学习,我们已经了解了UART的数据格式,那么,传输速率如何控制呢?这就涉及到了一个波特率的概念:
波特率是衡量数据传输速率的指针。表示为每秒钟传送的二进制位数(bit),例如资料传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10*120=1200波特(bit)。此实验中设置波特率为9600bit/s。
接下来,我们设置项目要求如下:
设置一个UART控制器,当控制器从上位机接收到数据以后,马上将数据输出,发送回上位机。
接下来,我们设计系统模块图如下。
bps_rx模块
模块功能说明:bps_rx模块为串口接收数据的速率控制模块,当使能信号rx_en为高电平时,bps_rx模块内部计数器开始计数,按照设定好的波特率,输出控制数据采集的尖峰脉冲信号sel_data和有效数据位的计数值num。