发 帖  
原厂入驻New
[经验]

通用异步接收器/发送器(UART)

2020-9-25 17:43:01  324 UART
分享
0
在世界范围内,几乎没有电气工程师和电子爱好者中很少有人没有与通用异步接收器/发送器(UART)接口进行交互。在当今技术迅速淘汰的世界中,我们必须赞扬创建这种简单的数字通信方案的人,这种方案已经存在了数十年,并且仍然享有很高的知名度。

注意:

术语“ UART”相当模糊。接口的各个方面(数据位数,停止位数,逻辑电平,奇偶校验)可以适应系统的需求。在本文中,我将重点介绍现代微控制器应用程序中常见的UART实现。

能力和特点

您可能知道,基本的UART系统仅使用以下三个信号即可提供鲁棒,中等速度的全双工通信:Tx(发送的串行数据),Rx(接收的串行数据)和接地。与其他协议(例如SPI和I2C)相比,不需要时钟信号,因为用户为UART硬件提供了必要的时序信息。



实际上,有一个时钟信号,但是它不是从一个通信设备传输到另一个通信设备的;相反,接收器和发送器都具有内部时钟信号,这些时钟信号控制如何生成变化的逻辑电平(在Tx端)和解释(在Rx端)。毫不奇怪,如果发送器和接收器已配置为不同的数据传输频率,则UART通信将不起作用。同样,内部时钟信号必须:1)相对于预期频率足够准确; 2)在时间和温度范围内足够稳定。

关键术语
让我们回顾一些术语,在此过程中,我们将介绍更多UART特性:
  • 起始位:一个字节的UART传输的第一位。它指示数据线正在退出其空闲状态。空闲状态通常为逻辑高,因此起始位为逻辑低。
    • 起始位是开销位;这意味着它促进了接收器和发射器之间的通信,但不会传输有意义的数据。
  • 停止位:一个字节的UART传输的最后一位。其逻辑电平与信号的空闲状态相同,即逻辑高电平。这是另一个开销位。



  • 波特率:可以传输数据的近似速率(以每秒比特数或bps为单位)。更为精确的定义是与传输一位数字数据所需的时间(以秒为单位)相对应的频率(以bps为单位)。例如,对于9600波特系统,一位需要1 /(9600 bps)≈104.2 µs。系统实际上无法每秒传输9600位有意义的数据,因为开销位和一字节传输之间的延迟可能需要额外的时间。


  • 奇偶校验位:添加到字节末尾的错误检测位。有两种类型:“奇校验”表示如果数据字节包含偶数个逻辑高位,则奇偶校验位将为逻辑高;“偶校验”表示如果数据字节包含奇偶校验位,则奇偶校验位将为逻辑高。包含奇数个逻辑高位。这看起来似乎违反直觉,但是这种想法是,奇偶校验位可确保逻辑高位的数量始终为偶数(对于偶数奇偶校验)或奇数(对于奇数奇偶校验)。因此,如果您使用偶数奇偶校验并且该字节具有三个逻辑高位,则奇偶校验位将为逻辑高,这样,传输数据中逻辑高位的总数(即字节本身加上奇偶校验位) ) 甚至。
    • 通过强制逻辑高位的位数始终为偶数(对于偶数奇偶校验)或奇数(对于奇数奇偶校验),奇偶校验位提供了一种粗略的错误检测机制-如果某位在传输过程中被翻转到某个位置,的逻辑高位与所选的奇偶校验模式不匹配。当然,如果将两位翻转,该策略就会失效,因此奇偶校验位远非防弹。如果您非常需要无差错的通讯,建议使用CRC。

同步和采样
没有某种时钟机制,标准数字数据就毫无意义。下图显示了原因:



典型的数据信号只是在逻辑低电平和逻辑高电平之间转换的电压。只有知道何时采样信号,接收器才能将这些逻辑状态正确转换为数字数据。使用单独的时钟信号可以轻松实现这一点-例如,发送器在时钟的每个上升沿更新数据信号,然后接收器在每个下降沿采样数据。
但是,正如名称“通用异步接收器/发送器”所暗示的那样,UART接口不使用时钟信号来同步Tx和Rx设备。那么,接收机如何知道何时对发射机的数据信号进行采样呢?
发送器根据其时钟信号生成一个位流,然后接收器的目标是使用其内部时钟信号在每个位周期的中间对传入的数据进行采样。在位周期的中间进行采样不是必需的,而是最佳选择,因为更接近位周期的开始或结束进行采样会使系统对接收器和发送器之间的时钟频率差异的鲁棒性降低。
接收器序列从起始位的下降沿开始。这是关键同步过程发生的时间。接收器的内部时钟完全独立于发射器的内部时钟,换句话说,此第一个下降沿可以对应于接收器时钟周期中的任何点:



为了确保接收器时钟的有效沿可以在比特周期的中间出现,发送到接收器模块的波特率时钟的频率要比接收器模块的波特率时钟的频率高得多(高8或16甚至32倍)。实际波特率。
假设一位周期对应于16个接收器时钟周期。在这种情况下,同步和采样可以如下进行:
  • 接收过程由起始位的下降沿启动。
  • 接收器等待8个时钟周期,以建立接近比特周期中间的采样点。
  • 接收器然后等待16个时钟周期,这使其到达第一个数据位周期的中间。
  • 采样第一个数据位并将其存储在接收寄存器中,然后模块在采样第二个数据位之前再等待16个时钟周期。
  • 重复此过程,直到所有数据位都已采样并存储,然后停止位的上升沿使UART接口返回其空闲状态。



结论
本文介绍了有关您可能已经成功使用多次的通信协议的一些详细信息。在几乎不了解信号和硬件的实际行为的情况下,很可能实现UART接口,但是当您的UART通信无法正常工作时,除了这些知识提供的一般知识外,还有一点额外的知识可能会有所帮助如预期的那样。

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表