打印
[应用方案]

关于UART误差问题

[复制链接]
761|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 mengtu123 于 2022-4-21 17:17 编辑

串口应该是应用广泛的功能,关于串口通讯稳定性的问题,比较常遇到的几个问题如下:
  • 在9600波特率能工作,但切换到115200就无法正常通讯,是不是和时钟精度有关系?
  • 串口稳定通讯对时钟精度的要求是多少,是否波特率配置越高对时钟精度要求就越高?内部RC能否满足?
  • 串口正常通讯了一段时间后通讯出错,是不是因为累计误差太大了?
   

要解决这些问题需要从串口通讯的采样时序解析,如上图所示,根据串口的采样特点,对于发送端来说,数据是在上升沿被drive到总线上,接收端在每个bit的中间位置采样,这就意味着在最后一个Bit位采样时,允许极限偏移为50%.

假如用1个起始位+9个数据位+1个奇偶校验位+1个停止位来计算,那么每位偏差最高为:±50% / 12 = ±4.16%

假如用1个起始位+8个数据位+1个停止位来计算,那么每位偏差最高为:±50% / 10 = ±5%

而串口通信,要涉及到发送和接收两端,当一端为0误差,另一端最大误差可到4.16%,如果两端误差相同,那每端的最大误差就只能是2.08%,±4.16% / 2 = ±2.08%

因此,对于串口通信来说,可以粗略认为,当时钟误差小于±2%时,通信是比较可靠的。对于客户实际的应用系统,考虑到UART是一个异步通讯,通讯的稳定性取决于双方的时钟精度,不是说只有一方的精度满足要求,系统就能正常工作,所以需要系统去考虑。

基于以上的分析,可以得出结论如下:

  • 串口稳定通讯和双方的时钟精度和有关,总误差不能超过±4.16%。

  • 串口通讯的累计误差发生在每次数据发送内部,连续的多次发送之间没有累计误差,因为连续的多个字节发送都会被Start起始信号进行重新同步,也就是说传输1个字节的误差和传输1000个字节的误差基本差不多;

  • 串口是否稳定通讯和波特率大小无关,并非波特率配置越高对时钟精度要求就越高,只和每次发送的串口数据长度(包含起始位/数据位/奇偶校验位/停止位长度)有关, 位长越长,对时钟精度要求越高;

  • 对于使用串口实现的LIN通讯,以上结论也基本适用;

  • 以上结论仅从采样时序的角度分析,不考虑外界电磁干扰的影响,因为通常波特率越高,每位数据的时间长度越短,就越容易受到电磁干扰从而导致通信不可靠。



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

0

粉丝