我试图了解UART基础知识。
- 这是异步通信协议,因此TX和RX时钟彼此独立
- 数据的接收通过使用起始位和一个或多个停止位来保证。此外,接收器必须知道数据速率,以便生成合适的时钟来驱动用于接收的SIPO寄存器。
这里的问题是
提到通常使用16倍比特率的时钟来恢复数据。那么如何将bps转换为时钟频率呢?请提供一些参考资料,以研究UART接收器中使用的时钟机制。
我试图了解UART基础知识。
这里的问题是
提到通常使用16倍比特率的时钟来恢复数据。那么如何将bps转换为时钟频率呢?请提供一些参考资料,以研究UART接收器中使用的时钟机制。
Answers:
发射器和接收器时钟彼此独立,以它们独立产生的方式进行,但应进行适当匹配以确保正确传输。
起始位(低位)和停止位(高位)确保两个字节之间始终存在从高到低的转换,接收器可以同步,但是此后它是独立的:没有更多时间提示可以用来区分连续的位。它所拥有的只是它自己的时钟。因此,最简单的方法是从起始位样本开始,在其时间的中间进行采样。例如,在9600个bps的比特时间是104微秒,那么这将样品在起始位 + 52微秒,第一数据在比特 + 52微秒+ 104微秒,在该第二数据位 + 52微秒+ 2 104 µs,依此类推。是起始位的下降沿。虽然实际上不需要采样起始位(您T 0 T 0 × T 0知道它很低),确定起始边缘不是峰值很有用。
对于52 µs的时序,您需要两倍于9600 bps的时钟频率,即19200 Hz。但这只是一种基本的检测方法。更高级(阅读:更准确)的方法将连续获取多个样本,以避免仅碰到一个峰值。然后,你可能确实需要一个16 9600 Hz的时钟,让每位16个蜱,其中您可以在什么应该是一个位的中间使用,也就是说,5个左右。并使用投票系统查看应将其读为高还是低。
如果我没记错的话,68HC11在开始,中间和结束时采集了一些样本,那么如果电平发生变化(并不能保证),那么第一个和最后一个大概会重新同步。
采样时钟不是从比特率得出的,而是相反的。对于9600 bps,您必须将采样时钟设置为153 600 Hz,这是通过预分频器从微控制器的时钟频率得出的。然后,将位时钟再除以16,得到位时钟。
无与伦比的时钟
如果接收器的时钟与发送器的时钟不同步,将发生以下情况:
接收器的时钟慢了6.25%,您可以看到对下一比特的采样将越来越晚。典型的UART传输由10位组成:1个起始位,8个数据位的有效负载和1个停止位。然后,如果您在中间进行采样,则可以在最后一位(停止位)处减去一半。十个位上的一半是5%,所以我们的偏差为6.25%,我们会遇到问题。在图片中可以清楚地看到:已经在第三个数据位附近采样了。
让我们退后一步,谈谈UART使用的低级信令协议。TX和RX是数据线,而不是时钟。时钟仅在每个UART内部,这就是为什么必须事先就波特率达成一致的原因。
不传输时,线路保持空闲状态。为了发送一个字节(例如,其他数据宽度是可能的),发送器首先发送起始位。接收器使用起始位的上升沿时间和已知的波特率来解码其余字符。为了简单起见,假设使用100 kBaud。这意味着每个位时间为10 µs长。这包括起始位,数据位和停止位。因此,第一个数据位的中间将在起始位的上升沿之后15 µs,第二个数据位在25 µs等。
只要接收器和发送器时钟相同,这可能会永远持续下去。但是,它们永远不会完全一样,因此不会永远持续下去。为了使接收器的时钟与发送器的时钟重新同步,数据字符结束,该行空闲一会儿,然后重复该过程。时序误差从起始位的上升沿开始累积,因此最大漂移位于最后一位。一旦该字符结束,接收器将重置,等待下一个起始位,然后重复该过程。
对于8个数据位,最差的时序情况是对最后一位进行采样。距时序参考的8.5位时间,时序参考是起始位的上升沿。如果接收器关闭了1/2位或更多,则它将在另一个位中对最后一位进行采样。显然,这很糟糕。这发生在8 1/2位或1/2%的1/2位时钟频率不匹配的情况下。这是保证不匹配失败的保证。为了提高可靠性,通常需要确保接收器与发射器的匹配度在其一半以内,即2.9%。这代表最后一位的1/4位时间误差。
但是,它并不是那么简单。在上述情况下,接收器实际上在起始位的上升沿启动秒表。从理论上讲,这可以在模拟电子产品中完成,但是那将是复杂且昂贵的,并且不容易集成到数字芯片上。取而代之的是,大多数数字UART实现具有内部时钟,该时钟以预期比特率的16倍运行。然后,“秒表”将对这16个周期进行计数。这意味着在所有位采样时间中还会有一个额外的可能的错误,即1/16位,这与最后一位的另一个.7%时钟失配类似。
希望这可以弄清楚停止位是什么,位时序如何工作以及16x时钟的全部含义。我主要跳过了停止位,但是也许您现在可以自己理解为什么至少需要一个停止位。基本上,停止位是字符之间的最小强制行空闲时间。这是接收机完成接收字符并准备好开始位的下一个上升沿的时间。如果没有停止位,则最后一个数据位的极性可能与开始位的极性相同,并且接收器将没有边沿来启动其秒表。
很久以前,该协议已由凸轮,杠杆和旋转轮解码。通常使用两个停止位来使该机制复位。如今,一切都以数字逻辑完成,并且1停止位已被普遍使用。您通常会看到写为8-N-1的低级协议的缩写,表示8个数据位,无奇偶校验位(忘记这些位,今天很少使用它们)和1个停止位。隐含起始位,因为那里没有选项。
使用8-N-1,一个8位字节的数据实际上需要10位时间来发送。这是“比特率”和“波特率”之间有区别的原因之一。波特率是指各个位的信令时间,包括起始位和停止位。在100 kBaud时,每个传输位(包括起始位和停止位)需要10 µs。因此,整个字符需要100 µs,但仅传输8位实际数据。波特率为100 k,但从更高级别的角度来看,数据传输比特率仅为80 kBits / s。