串行通信(USB 或 RS232)中的波特率是否需要精确?

电器工程 串行 时钟速度 波特率
2022-01-12 08:14:43

在串行通信中,波特率是否意味着我们必须使用准确的时钟速度,还是我们可以使用的速度范围?

如果它是一个精确的值,它应该有多精确?例如,我可以使用 555 作为串行通信电路的时钟吗?

2个回答

RS232 型串行系统中通常使用的UART通过根据预定义的波特率基频时钟的分频对数据线中位的某个位置进行采样来工作。因此,如果发送的数据和接收器不在同一频率上,则“采样点”将在连续位上更靠近位帧的边缘徘徊。

对于普通的 UART,一个字节的位长为 10 或 11 位。1 个起始位、8 个数据位和 1 个或 2 个停止位。第 10 位的半位漂移转化为 0.5/10 = 5% 的误差。

但是,实际上您的容差小于此值,因为您还需要添加基频周期的延迟,这将添加与起始位前沿的偏移量。基频越高,影响越小。

至于为此目的使用 555 计时器,除非您计划在 555 电路中进行手动调整,否则我不会推荐它。

另一方面,USART 使用更复杂的控制方法,尝试将传输与接收的数据同步这可以通过使用具有嵌入式时钟的数据模式、通过使用传递的时钟或通过对接收的数据边沿进行某种形式的相位锁定来实现。(尽管可以说后者确实是伪同步的。)

时间必须足够准确,以免在协议重新同步之前它们不会分开。


UART 串​​行在每个字节上重新同步,一个字节约为 10 位(8 位数据加上开始和停止)。我们假设我们的 UART 以每个位的中间为目标。如果一切都是完美的,并且只有一端不准确,则链接的两端之间允许大约 5% 的差异。

然而:

  1. 链接的两端相对于标称可能不准确。在最坏的情况下,一端可能低于标称值,而另一端则超过标称值。
  2. 可能存在系统性错误。例如,大多数 UARTS 的波特率发生器设置范围有限。
  3. 您的 UART 基于具有有限速度的主时钟。即使时钟和波特率发生器是完美的,这也将导致它不会到达每个位的确切中间。

最重要的是,时钟上 1% 的误差几乎可以肯定是没问题的。5% 的错误几乎肯定是个问题。在这两个数字之间,这可能是也可能不是问题,具体取决于整体情况。

对于 RC 振荡器来说,这是一项艰巨的任务。假设您的 R 有 1% 的容差,而您的 C 有 2% 的容差。这为 RC 网络的时间常数提供了大约 3% 的容差,这是在您考虑驱动芯片引入的任何错误之前。

所以底线是你应该看一个晶体或陶瓷谐振器。


至于 USB,我没有从第一原理分析的经验,但https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai说 1.5%低速和全速 0.25%。