【问题标题】:UART controller or RS232 controller? Is UART a general word?UART控制器还是RS232控制器? UART是通用词吗?
【发布时间】:2013-08-29 20:24:43
【问题描述】:

我有一个关于 UART 控制器的问题。

UART控制器是通用名称吗?

我的意思是,如果我们使用 RS-232 协议,我们应该将此 UART 控制器命名为 RS-232 控制器,如果我们使用 RS-485 作为协议,我们应该将此 UART 控制器称为 RS-485 控制器等等?

我注意到我们一般说网络控制器(协议:以太网,令牌环,ATM,..),如果实现的协议是以太网,例如,我们说以太网控制器。 UART控制器和网络控制器之间的正确比较是否意味着它们都是通用名称?

非常感谢您的澄清

【问题讨论】:

  • 这个好像和编程没什么关系。
  • RS-232 和 458 是 electrical 标准,它们规定了总线。 UART 是与许多此类总线一起工作的通用设备,它们只知道如何处理异步数据。总线收发器是一个单独的芯片。使用 electronics.stackexchange.com 提出此类问题。
  • @HansPassant - 这些不是公共汽车,而只是通讯链接。 USB 是一种总线,就像 PCI 一样,它通过控制、数据和电源将设备连接到主机。 EIA/RS-232 通信链路不符合这种复杂程度。
  • 很抱歉在这个论坛上提出这个问题,但我根本不知道electronics.stackexchange.com。
  • @HansPassant 我喜欢你的定义。

标签: serial-port uart


【解决方案1】:

参考书目:

串行是所有“时分复用”的总称,使用一个昂贵的术语。这意味着数据会随着时间的推移而分散发送,通常是一位接一位。您命名的所有协议都是串行协议。

UART,即通用异步收发器,是最常用的串行协议之一。它几乎和我一样古老,而且非常简单。大多数控制器板载硬件 UART。它使用单根数据线发送数据,一根数据线接收数据。最常见的 8 位数据传输如下:1 个起始位,低电平,8 个数据位,1 个停止位,高电平。低电平起始位和高电平停止位意味着总是有一个从高到低的转换来启动通信。这就是UART的描述。没有电压电平,因此您可以将其设置为 3.3 V 或 5 V,无论您使用哪种微控制器。请注意,想要通过 UART 进行通信的微控制器必须就传输速度和比特率达成一致,因为它们只有起始位的下降沿才能同步。这就是所谓的异步通信。

对于长距离通信(不一定是数百米),5 V UART 不是很可靠,这就是它被转换为更高电压的原因,通常为 +12 V 用于“0”和 -12 V 代表“1”。数据格式保持不变。然后你就有了 RS-232(你实际上应该称之为 EIA-232,但没有人这样做。)

重要提示:RS-232 与 TTL 串行通信 - SparkFun Electronics http://goo.gl/0IFYTl

时序依赖性是UART的一大缺点,解决方案是USART,用于通用同步/异步收发器。这个可以做UART,也可以做同步协议。在同步中,不仅有数据,还有时钟传输。每个位都有一个时钟脉冲告诉接收器它应该锁存那个位。同步协议要么需要更高的带宽,比如曼彻斯特编码,要么需要额外的时钟线,比如 SPI 和 I2C。

串行编程/典型 RS232 硬件配置 - Wikibooks,开放世界的开放书籍http://goo.gl/uTknU6

RS232      +-----------+   +-----------+   +-----------+   +-----------+
Interface  | Line      |   |           |   | Interface |   |           |
-----------+ Driver /  +---+   UART    +---+ Logic     +---+    CPU    |
           | Receiver  |   |           |   |           |   |           |
           +-----------+   +-----+-----+   +-----+-----+   +-----------+
                                 |               |
                                 |               |
                           +-----+-----+         |
                           | Baud Rate |         |
                           | Generator +---------+
                           |           |
                           +-----------+

UART(通用异步收发器)是串行硬件的核心。它是一个芯片或芯片的一部分,目的是在并行数据和串行数据之间进行转换。 RS-232 UART 通常还在发送时添加必要的开始/停止和奇偶校验位,并在接收时解码此信息。

UART 通常完全依靠计算机逻辑电压运行。 它的串行数据输入/输出电压是计算机逻辑电压,而不是串行线路电压。它们将实际的线路接口留给特定的线路驱动器/接收器。此线路驱动器/接收器不一定需要是 RS-232 线路驱动器/接收器,但可以例如也可作为 RS-422 差分驱动器/接收器。这一点,以及波特率、奇偶校验、停止位数、数据位数是可编程的这一事实是 UART 被称为通用的原因。如果 UART 和线路驱动器/接收器都放置在同一个芯片中,它们之间的区别就会变得模糊。此类芯片通常也以“UART”标签出售。

UART 被称为异步,因为它们不使用特殊的时钟信号与远程端同步。相反,它们使用开始/停止位来识别串行流中的数据位。

多亏了 UART,其余的硬件以及软件应用程序可以处理普通字节来保存通信数据。 UART 的工作是在发送时将一个字节切割成一系列串行位,并在接收时将一系列位组装成一个字节。 UART 通常包含 8 位宽的接收器和传输缓冲器。其中并非所有位都可以使用,例如使用 7 位传输。接收到的串行数据并行提供在接收缓冲区中,待发送数据并行写入发送缓冲区。根据 UART,缓冲区可能只有一个字节或几个字节的深度(在 15 或 16 字节的范围内)。缓冲区越浅,与 CPU 的通信需要越精确。例如。如果接收缓冲区只有一个字节的深度,并且数据获取速度不够快,则下一个接收到的数据可以覆盖缓冲区中先前接收到的数据,并且先前接收到的数据丢失。

由于串行接口上​​的时序很重要,因此 UART 通常连接到波特率发生器,可以是 UART 芯片内部的,也可以是外部的。

SPI(串行外设接口)是另一种非常简单的串行协议。主机发送一个时钟信号,并且在每个时钟脉冲上,它向从机移出一位,从从机移出一位。因此,信号名称为 SCK 表示时钟,MOSI 表示 Master Out Slave In,MISO 表示 Master In Slave Out。通过使用 SS(从机选择)信号,主机可以控制总线上超过 1 个从机。将多个从设备连接到一个主设备有两种方法,一种是上面提到的即使用从设备选择,另一种是菊花链,它使用较少的硬件引脚(选择线),但软件变得复杂。

I2C(Inter-Integrated Circuit,发音为“I squared C”)也是一种同步协议,它是我们第一个看到其中包含一些“智能”的协议;其他的笨拙地把位移进移出,就是这样。 I2C 仅使用 2 根线,一根用于时钟 (SCL),一根用于数据 (SDA)。这意味着主机和从机通过同一条线路发送数据,再次由创建时钟信号的主机控制。 I2C 不使用单独的从机选择来选择特定设备,但具有寻址功能。主机发送的第一个字节包含一个 7 位地址(以便您可以使用总线上的 127 个设备)和一个读/写位,指示下一个字节是否也将来自主机,应该来自奴隶。在每个字节接收器必须发送一个“0”以确认接收到字节后,主机用第 9 个时钟脉冲锁存该字节。如果主机想要写入一个字节,则重复相同的过程:主机将一位接一位地放在总线上,并且每次都给出一个时钟脉冲来表示数据已准备好读取。如果主机想要接收数据,它只生成时钟脉冲。当给定时钟脉冲时,从机必须注意下一位已准备好。该协议是NXP(原飞利浦)的专利,为了节省许可成本,Atmel 使用了与I2C 完全相同的TWI(2-wire interface)一词,因此任何AVR 设备都不会有I2C,但会有TWI。

同一线上的两个或多个信号可能会导致冲突,如果一个设备发送“1”而另一个设备发送“0”,您就会遇到问题。因此总线是线或的:两个电阻将总线拉到高电平,设备只发送低电平。如果他们想发送一个高电平,他们只需释放总线。

TTL(晶体管晶体管逻辑)不是协议。它是一种较旧的数字逻辑技术,但该名称通常用于指代 5 V 电源电压,通常不正确地指代应称为 UART 的东西。


关于这些,你可以写一本书,看起来我已经在路上了。这只是一个非常简短的概述,如果有些事情需要澄清,请告诉我们。

【讨论】:

  • 看来这只是逻辑层和物理层的区别。在逻辑层,协议称为UART,在物理层,我们可以选择RS232作为线路驱动器。为什么说“串行 TTL”是错误的?使用 LVTTL/TTL 电压电平明确指定 UART 协议的正确方法是什么?我们是否应该只说“UART”,因为我们没有添加任何“线路驱动器”,因为我们直接将自己插入芯片的原始引脚?但是只说“UART”是模棱两可的,因为我们不知道我们是否使用了线路驱动程序。
【解决方案2】:

UART(通用异步接收器发送器)是/曾经是在并行总线信号和串行信号之间移动的芯片。首先,我经常使用 AFAIR 是 8250。这些天,RS232 的使用较少,并且经常通过 USB、蓝牙和其他连接进行仿真,因此物理 UART 可能不再存在。适当地,您应该指定协议、电压级别和适用的连接器。

【讨论】:

  • 非常感谢您的回复。我不是在谈论这两种(网络控制器和UART)协议的时序和信号规范也没有关于它们的访问协议 本身,因为它们是不同的协议。它们都是通用词,关于实现什么通信协议,它们将这些特定名称称为以太网控制器还是 RS-232 控制器?谢谢
  • @MikeW 或者我们可以根据用途对控制器(接口)进行分类,例如网络控制器或并行/串行控制器?
【解决方案3】:

UART:通用异步接收器/发送器,及其姊妹设备 USART(同步/异步)。这些设备在早期的 PC 中很常见,并且被用于多种用途。它们主要用于 RS-232 通信,但它们足够灵活,可用于 RS-485 和其他系统,具体取决于它们的编程方式。几十年来我都没有见过,因为它们已被 USB 设备取代,或者它们的功能现在已在软件中实现。

至于你的问题:用最符合其功能的名称来引用它。

【讨论】:

    猜你喜欢
    • 2015-02-10
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多