目录
一、Uart串口原理
1.串口通信协议简介
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
串行接口从传输方式可分为同步串行接口(英文:SynchronousSerialInterface,SSI)和异步串行(UART,通用异步收发传输器)。同步串行接口是一种常用的工业用通信接口。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。UART包含TTL电平的串口和RS232电平的串口。 TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平。本实验采用USB转TTL的串行接口。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。简单来说物理层规定我们用嘴巴还是用肢体来交流,协议层则规定我们用中文还是英文来交流。
2.串口的物理层和协议层
2.1物理层
串口通讯的物理层有很多标准及变种,我们主要讲解USB转串口通信协议。可以通过采用USB转TTL芯片CH340g将USB口信号电平转换成TTL电平。供其他控制器使用,我们使用控制器为FPGA,其框图如下:
图1:USB转串口结构图
5VTTL电平标准为:逻辑1为2.4V-5V,逻辑0为0V-0.5V。
图2:USB转UART串口电路
如图为USB转UART串口电路,通过USB的D+和D-两根数据线连接到CH340的D+和D-接口上,将其数据转换成TTL电平信号通过CH340的TXD和RXD两根信号线和FPGA发送和接收数据。
2.2协议层
串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成见下图:
2.2.1. 波特率
本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图 206中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200等。
2.2.2. 通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
2.2.3. 有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。
2.2.4. 数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity),它们介绍如下:
- 奇校验要求有效数据和校验位中”1″的个数为奇数,比如一个8位长的有效数据为:01101001,此时总共有4个”1″,为达到奇校验效果,校验位为”1″,最后传输的数据将是8位的有效数据加上1位的校验位总共9位。
- 偶校验与奇校验要求刚好相反,要求帧数据和校验位中”1″的个数为偶数,比如数据帧:11001010,此时数据帧”1″的个数为4个,所以偶校验位为”0″。
- 0校验是不管有效数据中的内容是什么,校验位总为”0″,1校验是校验位总为”1″。
- 在无校验的情况下,数据包中不包含校验位。
二、实验平台
了解了串口通信的基本原理和传输协议后,通过PC端的USB串口与FPGA实现通信功能,下图为USB转TTL电路和Cyclone IV E FPGA 连接示例 :
图3:USB转TTL电路和Cyclone IV E FPGA 连接示例
下表为FPGA与UART管脚分配表:
Siginal Name | FPGA Pin |
UART_RX | PIN_B5 |
UART_TX | PIN_A6 |
三、实验要求
所使用的是小梅哥的开发板AC620,三个按键S0、S1、S2,S0按下时处于空闲状态,该状态下不进行串口通信;S1按下时处于状态1:PC向FPGA发送数据,数据由PC串口发送,FPGA收到8位数据,选择相应位置的8个LED是否亮暗;S2按下时处于状态2:FPGA向PC发送数据,FPGA循环发送一个数据8’hff,PC端串口接收。
Tip:由于开发板上只有LED0~LED3共4个LED,本设计需要8个,因此将连接RS232和CAN通信的两个TXD和RXD接口连接的信号指示灯作为我们需要的LED使用。
图4:板上使用的LED位置图