USART、UART、RS232、USB、SPI、I2C、TTL 等。这些是什么?它们之间有什么关系?

电器工程 沟通
2022-01-07 22:01:38

作为一个新手电子爱好者,我听说过这些术语,而且到处都是。从根本上讲,我理解它们都是基于设备、计算机、外围设备等之间的通信。

我对它们的工作原理有一个基本的了解,但是当我看到这么多它们并且很难理解它们之间的关系时,我会感到困惑。例如,UART 是 USART 的子集吗?RS232和串口有什么区别?所有这些通信方法之间的核心区别是什么:可靠性、成本、应用、速度、硬件要求?

如果你能想象,我把所有这些术语都写在卡片上,散落在咖啡桌上,我需要有人帮我整理一下我的理解。如果这个问题有点含糊,请原谅我,但我真的觉得这就是这个问题的本质。

4个回答

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

UART,对于 Universal Asynchronous Receiver Transmitter,是最常用的串行协议之一。它几乎和我一样古老,而且非常简单。大多数控制器板载硬件 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,但没有人这样做。)

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

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

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

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

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


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

这非常接近您阅读文章而不是询问自定义响应的问题的领域,但要解决制造商有时会模糊的一个主要问题:

串行接口有两种基本类型:同步和异步。

同步接口的数据传输与它的定时相对于一个明确的时钟,也提供。这方面的经典例子是 SPI,但也有特殊的形式,例如用于音频转换器的 I2S、JTAG、FPGA 配置接口等。许多并行通信通道只是将这种想法扩展到一次移动更多位。通常但不总是这些首先发送最高有效位。

异步接口将时序编码在数据流本身中。对于“串行端口”和RS232等相关标准,字的时序是相对于起始位的,接收器只是在此后以正确的间隔对线路进行采样。其他接口可能更复杂一些,需要使用锁相环和算法进行更高级的时钟恢复。UART 是“通用异步接收器发送器”——实际上是一个功能块的名称,通常用于实现对字长、速率和开始/结束条件具有一定灵活性的“串行端口”。RS232、RS422 等是您将从这些数据中获得的数据的板外电信号标准 - 电压、单端或差分,如果 1 为高或低等。

“USART”可能是合理混淆的来源,因为它是一种混合设备,“通用同步/异步接收器发送器”本质上,这是并且最常用作 UART,但它也可以配置为生成(或考虑)与数据同步的单独时钟,并且可能能够反转位顺序。它通常可配置为与 SPI 进行互操作,但它可能无法移除专用于启动/停止位的时间,因此可能无法使用 I2S 之类的东西进行操作,I2S 可以期望数据连续流动而没有字之间的间隙。

RS-232是一种非常简单的串行协议,最初用于调制解调器和电传打字机。它就是通常所说的串行端口(或 MS-Windows 中的 COM 端口)。在线路上,它名义上使用 ±12V 电平,但由于检测指定为 ±3V,它们可能会有很大差异。总有一个线路驱动器(现在通常来自 MAX232 系列)将这些电平转换为计算机或微控制器的内部数字信号电平或从这些电平转换。

TTL表示晶体管-晶体管-逻辑,其电平为接近 0V 的逻辑零和接近 5V 的逻辑一。通常,任何 5V 逻辑都称为 TTL,尽管如今大多数电路都构建为 CMOS。今天也有很多电路工作在 3.3V,不再是 TTL。

关于内部电平,RS-232 线上的电平是反相的,+12V 对应逻辑低电平,-12V 对应逻辑高电平,这可能会造成混淆。

为了描述数据格式,通常显示逻辑信号。线路空闲时为高电平。传输以低起始位、最低有效位在前的数据位、可选的奇偶校验位和一到两个停止位(逻辑 1)开始。这称为异步传输,因为开始位和停止位分别同步每个字节的数据。

UART(通用异步收发器)是计算机或微控制器中执行这种异步通信的设备。

USART(通用异步同步接收器发送器)是一种可以另外进行某种同步传输的设备,因此附加了 S。哪种不同,您需要在数据表中查找。

SPI、I²C 和 USB 是不同的(在 USB 的情况下非常长)。

我同意关于 SPI 和 CAN 协议的内容。为了提高性能,设计了CAN协议。在这个仲裁概念中,两个设备准备好进行通信,然后根据它们的优先级进行传输或接收。CAN广泛应用于许多行业。