• 正文
  • 相关推荐
申请入驻 产业图谱

UART协议中数据位可以增多吗?

08/28 09:50
1141
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。

本篇主要讨论UART协议中数据位可以增多吗?

UART协议中一般包含八位数据位。

标准的UART一帧数据由以下部分组成:

1个起始位(总是逻辑0)

5-9个数据位(用户数据)

0或1个奇偶校验位(可选,用于简单错误检测)

1或2个停止位(总是逻辑1)

历史兼容性:

与ASCII编码的完美匹配 UART协议的历史非常悠久,可以追溯到早期的电传打字机(Teletype)时代。

标准ASCII编码:最初制定的ASCII码是一个7位的字符集(0-127),它可以表示所有英文字母、数字和控制字符。

早期UART配置:通常使用 7位数据位 + 1位奇偶校验位 的模式。这样一帧数据正好是8位(1个字节),既可以完整传输一个ASCII字符,又可以通过奇偶校验位进行简单的错误检测。

自然演进:随着计算机系统普遍采用8位字节(Byte)作为基本存储单位,去掉奇偶校验位,直接使用 8位数据位 来传输一个完整的字节就成为了最自然、最高效的方式。

效率

UART的每帧数据都包含必须的开销位(Overhead): ?1个起始位(总是低电平)、 ?1个(或2个)停止位(总是高电平)、 ?可选的1个奇偶校验位。

假设使用1位停止位,奇偶校验位: ?传输一个8位的数据,实际需要发送 1 + 8 + 1 + 1 = 11 位。有效数据占比为 8/11 ≈ 73%。

传输更多数据位可以提高效率。

? ? 可以不可以更多(比如16位、160位)?

如果收发双方有一方是固定的硬件电路(类似于PC或者MCU的串口收发电路),那么就只能够采用标准的协议规则(因为这个电路不能改变)。

如果收发双方都是可以自己调整的话,那么可以不可以在一帧中,包含更多的数据位呢?

在发送方,利用发送板卡上面的晶振提供的时钟进行计时,满足对应的波特率,然后将数据按照UART协议规则发送输出。

在接收方,利用接收板卡上面的晶振提供的时钟进行计时,根据约定的波特率,计时到各个数据位的中间,并且进行采样。

此时还没有发现什么问题。

但是问题已经出来了,那就是收发双方的晶振是不同的,也是有误差的。误差的存在,就会导致收发双方对时间的计时有一定的偏差。

当数据位比较少时,偏差还是比较小,也就是说接收方的计时,基本在发送方的数据的中间。如果数据位较多时,偏差就会累积;当达到一定的数据位时,后面的部分,就会无法在数据位中间采样(更后面的数据位,可能直接多采或者漏采),导致错误。

建议:

最好还是采用8bit的数据位进行通信

偏差的影响有多大?

晶振的偏差是指晶振的实际输出频率与其标称频率之间的最大允许差异。这个偏差通常用百万分比(ppm, parts per million) 来表示。

1ppm = 百万分之一

对于 1 MHz 的时钟:1ppm = 1 Hz的偏差。

对于 10 MHz 的时钟:1ppm = 10 Hz的偏差。

对于 100 MHz 的时钟:1ppm = 100 Hz的偏差。

实例分析:偏差对UART通信的影响 UART通信对时钟偏差非常敏感。双方设备的时钟偏差累积会导致采样点逐渐偏移,最终采到错误的比特,造成通信错误。

规则:UART通信的总误差(发送方误差 + 接收方误差)通常需要控制在 2%~3% 以内。

计算: ?假设通信双方使用的是相同的20ppm晶振。 ?最坏情况下,总误差为 20ppm + 20ppm = 40ppm。 ?对于一位的采样,误差为 40 / 1,000,000 = 0.004%。这个误差微乎其微。 ?但错误会累积。传输一个10位的数据帧(1起始+8数据+1停止),累积误差为 0.004% * 10 = 0.04%,远低于3%的安全阈值。因此,40ppm的总偏差对UART通信是完全可以接受的。

本篇内容中有部分资源来源于网络,如有侵权,请联系作者。

相关推荐