通用异步收发器(Universal Asynchronous Receiver/Transmitter)
RS232
只要信号拉低,即可开始传送数据,不需要额外的时钟线进行数据的同步传输”
UART的一帧由起始位、数据位、校验位和停止位组成
无传输数据时为高电平,UART没有控制线,先发一位逻辑“0”开始进行数据传输
使用下降沿电平检测电路检测低电平,紧接着起始位的是数据位,可以是5、6、7或8位。
UART的“校验位”紧挨着“数据位”,采用奇偶校验方式,根据设置,校验位可以存在也可以不存在。
停止位作为停止标志,是在数据位(没有校验位)和校验位(有校验位)之后发送1~2位的逻辑“1”高电平。当发送完停止位之后,UART总线进入空闲
常用的波特率(每秒钟传输的数据位数)可以是300,1200,2400,9600,19200,38400,115200
假如我们的全局时钟频率为100MHz,波特率设置为9600,那么意味着每秒该UART传输协议可以传输9600bits的数据
在数据的传输中,信号可能受到一些干扰而产生一些抖动,接收端在采样时,通常都要采样多次,多数表决
1. 设计要求
单工UART,收/发器固定,
支持5-8位数据位、1/2位停止位、可选1位奇偶校验位
奇偶校验结果错误的检测能力,波特率2400、4800、9600可调
1)在baud_generate模块中将全局时钟信号100Mhz进行分频,按照约定的波特率如300,1200,2400,9600等要求进行分频处理
2)tx发射器模块划分状态机,按起始位,数据位,校验位,停止位进行状态划分,并区分状态转移的条件。
- 发射机状态机
IDLE:默认态,无数据传输,输出高电平,当enable信号到来时跳转到S1。
S1:起始位,无数据传输,输出低电平,无条件跳转到S2。
S2:数据位,数据传输发生在S2,根据数据输出高低电平,假如有校验位,跳到S3,假如数据传输不设校验位,跳转到S4
S3:校验位,根据要求,输出奇数校验或者偶数校验的值,下一个状态无条件跳转到S4。
S4:停止位,根据要求,输出1个或2个周期的高电平,下一个状态无条件跳转到IDLE。
3)rx接收器模块使用发送频率的十六倍频进行采样,使用多路选择的方法避免数据传输中可能会出现的错误
全局参数:
全局时钟频率 time_frequency = 100_000_000
RX,TX的波特率 baud_rate = 9_600
数据位宽 data_width = 8
奇偶校验,其中0为无校验位,1为偶校验,2为奇校验 test = 1
停止位位宽 stop_width = 2