|||
发送数据帧过程:空闲状态,线路处于高电平。当开始发送时,先发送起始位(线路保持1个数据位的低电平时间),接着按低位到高位的顺序发送数据位、奇偶校验位(如果需要校验的话)及停止位(停止位为高电平)。
接收数据帧过程:空闲状态,线路处于高电平。当检测到线路的下降沿(线路电平由高变低)时说明线路接收到数据传输的起始位,这时可按照指定的波特率从低位到高位接收数据位、奇偶校验位(如果需要校验的话)及停止位,并完成数据校验,根据校验情况决定数据的处理。
基于上面提到的设计模型,当数据接收发生误码时,上述各影响因素本质上是影响到数据采样时钟的采样位置,使得采样时钟与正常数据采样位置发生了偏差而导致误码,因此计算出采样时钟的采样位置偏差,并保证其不偏离数据位宽范围即可保证数据接收时不发生误码。由于从起始位开始接收时,采样位置偏差即开始累计,所以数据帧最后一位的采样位置偏差应为最大,故若能保证接收数据帧最后一位的采样位置累计偏差的绝对值小于指定波特率对应传输位宽的一半就能保证UART通信时数据接收不发生误码。可以得到下面(1)式:
ETS(W-0.5)<0.5/P -------(1)
其中:
E---计算波特率采样时钟时的系统时钟分频数的最大舍入误差,其值为0.5。
T---晶振周期。
S---波特率时钟采样比=波特率采样时钟频率/数据波特率。
W---传输位数。
P---数据波特率。
根据(1)式可以计算(2)式
f>2PES(W-0.5) -------(2)
其中:f为晶振频率。
举例来说,若CPLD或FPGA采用10MHz外部晶振作为系统时钟时,对于常用的串口数据通信设置“?,N,8,1---?,无校验位,8个数据位,1个停止位”,(2)式中晶振频率f为10000000,传输位数W为10,波特率时钟采样比S若取为16,则支持的数据通信波特率应小于65789.5bps。同样对常用的“115200,N,8,1---115200波特率,无校验位,8个数据位,1个停止位”,可计算出系统时钟(晶振)频率应大于17510400Hz才可保证UART通信不发生误码。