当前位置:网站首页>串口通讯到底有没有累积误差及对时钟精度的要求
串口通讯到底有没有累积误差及对时钟精度的要求
2022-07-17 05:46:00 【嵌入式Linux,】
1. 问题背景:
2. 问题分析:
3. 总结:
1. 问题背景:
对于嵌入式开发者来说,串口应该是应用最广泛的模块,在日常客户支持过程中经常会有客户问到一些关于串口通讯稳定性的问题,比较典型的几个问题如下:
在9600波特率能工作,但切换到115200就无法正常通讯,是不是和时钟精度有关系?
串口稳定通讯对时钟精度的要求是多少,是否波特率配置越高对时钟精度要求就越高?内部RC能否满足?
串口正常通讯了一段时间后通讯出错,是不是因为累计误差太大了?
尽管网上铺天盖地的串口配置的资料,但对这些具体问题的描述确实不多,于是好好研究了一番。
2. 问题分析:

想回答这些问题还要从串口通讯的采样时序说起,如上图所示,根据串口的采样特点不难看出,对于发送端来说,数据是在上升沿被drive到总线上,接收端在每个bit的中间位置采样,这就意味着在最后一个Bit位采样时,允许极限偏移为50%,假如用1个起始位+9个数据位+1个奇偶校验位+1个停止位来计算,那么每位偏差最高为:
±50% / 12 = ±4.16%
Note: 对于有些支持过采样的串口来说,采样点可能不是50%中间位置,一般会更靠后,此处不展开讨论;
假如用1个起始位+8个数据位+1个停止位来计算,那么每位偏差最高为:±50% / 10 = ±5%
而串口通信,要涉及到发送和接收两端,当一端为0误差,另一端最大误差可到4.16%,如果两端误差相同,那每端的最大误差就只能是2.08%,这也就是为什么很多硬件老法师建议串口的波特率误差控制在2%以内。
±4.16% / 2 = ±2.08%
因此,对于串口通信来说,可以粗略认为,当时钟误差小于±2%时,通信是比较可靠的。对于客户实际的应用系统,考虑到UART是一个异步通讯,通讯的稳定性取决于双方的时钟精度,不是说只有一方的精度满足要求,系统就能正常工作,所以需要系统去考虑。
3. 总结:
基于以上的分析,可以得出结论如下:
串口稳定通讯和双方的时钟精度和有关,总误差不能超过±4.16%,对于大部分全温度范围±1%的MCU来说,都能满足基本的通讯需求。
串口通讯的累计误差发生在每次数据(也可以简单理解成每个字节,只是字节不严谨,因为有时数据可能是9 bits)发送内部,连续的多次发送之间没有累计误差,因为连续的多个字节发送都会被Start起始信号进行重新同步,也就是说传输1个字节的误差和传输1000个字节的误差基本差不多;
串口是否稳定通讯和波特率大小无关,并非波特率配置越高对时钟精度要求就越高,只和每次发送的串口数据长度(包含起始位/数据位/奇偶校验位/停止位长度)有关, 位长越长,对时钟精度要求越高;
对于使用串口实现的LIN通讯,以上结论也基本适用;
以上结论仅从采样时序的角度分析,不考虑外界电磁干扰的影响,因为通常波特率越高,每位数据的时间长度越短,就越容易受到电磁干扰从而导致通信不可靠。


边栏推荐
猜你喜欢

Question 114 of Li Kou: binary tree expansion linked list

4-channel FMC interface baseband signal processing board (2 FMC interfaces, 2 fmc+ interfaces)

Flink入门到实战-阶段二(图解运行时架构)

实时数据仓库-从0到1实时数据仓库设计&实现(SparkStreaming3.x)

Spark3.x源码编译

Jenkins如何设置邮箱自动发送邮件?

Spark3.x entry to proficiency - stage 3 (in-depth analysis of the whole process of spark data processing)

Use of mongodb

Canel-简介&使用

Spark introduction to proficient - external part (operation and maintenance and simple operation of standaone cluster)
随机推荐
面部关键点检测-CNN
Notepad++ underline and case letter replacement
Pytorch随记(3)
Read gptp in a quarter of an hour
Gnome installs the extension (version 40.1, openSUSE tumblefeed).
Comparative analysis of the differences between nor and NAND
导出文件or下载文件
收单外包服务商北京捷文科技以约4.8亿转让60%股份
How to associate the application on enterprise wechat with the Sybase database of the store
【JVM】之堆内存、逃逸分析、栈上分配、同步省略、标量替换详解
微信OAuth2.0 登录流程以及安全性分析
Understanding of v2x test series v2x phase II application scenario
Redis源码分析之双索引机制
Divide method in BigDecimal
修改radio样式
利用PCA来简化数据
机器学习之随机森林
【MySQL】 MVCC:正确理解MVCC及其实现原理
@How can conditionalonmissingbean cover beans in third-party components
Spark3.x入门到精通-阶段七(spark动态资源分配)