1.UART概述
UART(Universal Asynchronous Receiver-Transmitter)总线协议是串行异步通信中常用的协议。异步指不需要额外的时钟线进行数据的同步传输,只需要占用两根线就可以完成数据的收发(一根接收数据,一根发送数据),成本较低,适用于远距离低速通信。
2.帧格式
UART一帧由起始位、数据位、校验位和停止位组成。数据逐位传输。
UART协议中数据的传输以字符/帧为单位,每两个字符之间的时间间隔是可以配置的。数据的传输速率由波特率决定,即每秒钟传送的二进制个数。
2.1 起始位
UART空闲时,总线为高电平,当需要数据传输时,首先发送一个起始位,起始位为一个低电平“逻辑0”
2.2 数据位
紧挨着起始位的是数据位,数据位可以是5、6、7、8位,收发双方在数据开始传输前,需要对双方数据位作一致的定义,否则会导致数据的传输错误;数据位发送采用低位LSB先发送
2.3 校验位
UART的校验位紧挨着数据位,采用奇/偶位校验方式,可有可无,是为了验证数据传输的安全性而设置的,在收/发双方进行数据传输前要预设好是否需要校验位,如果需要则是奇校验还是偶校验。
什么是奇偶校验?
奇偶校验是检验传输数据中1的个数,当然有奇数有偶数,,这时候就需要用我们的校验位了,通过检验位将传输1的个数变成奇数就是奇校验,变成偶数就是偶校验。
- 奇校验是对数据进行同或运算
- 偶校验是对数据进行异或运算
8'b01100100 //原数据
9'b01100100_0 //奇校验
9'b01100100_1 //偶校验
2.4 停止位
UART 的帧以停止位作为停止标志,是在数据位(没有校验位)和校验位(有校验位)之后发送 1~2 位的逻辑“1”。停止为可以为 1 位、 1.5 位和 2 位。当发送完停止位之后,UART 总线进入空闲。
3.UART收发逻辑
UART的发送逻辑:
- 当发送端口对应的移位寄存器中被载入数据后,发送逻辑首先拉低发送端口电平,表示起始位开始。
- 经过一个周期后,发送逻辑将数据从移位寄存器中依次取出,并在发送端口以高低电平的形式表现出来
- 该逻辑还可以根据配置添加不同类型的奇偶校验位以及停止位
UART的接收逻辑:往往工作在比特率高的时钟频率下,一般使用8倍频采样或者16倍频采样
- 在每个时钟的上升沿,接收逻辑都会去监测接收端口的电平信息,如果发现接收端口被输入了低电平且持续时间超过了半个波特率信号周期,则认为检测到了起始位信号,并开始接收数据
- 当后续数据接收完后,接收逻辑应该将此接收的一帧数据放到对应的接收FIFO中,并产生一定的信号告知系统已获得有效数据
4.uart模块实现功能
- UART 收/发器
- 支持 5-8 位数据位、 1-2 位停止位、 1 位奇偶校验位
- 帧格式错误、奇偶校验结果和过速( Overrun)错误检测能力
- 波特率( Buarrate)可调
- 支持接收数据完成、发送数据完成中断,中断可屏蔽
- 1 级数据缓冲
- 外部总路设计,数字、操作寄存器影射