USB、UART、SPI的区别和用法?

电器工程 USB spi UART eeprom
2022-01-26 02:41:30

我正在尝试启用围绕英特尔 D1000 MCU 构建的嵌入式系统。我主要来自软件背景,刚刚开始追赶一些硬件知识。

我正在尝试在 anEEPROMMCU. 我的目标是启用此路径:

  1. 用户将固件烧录到 EEPROM 中,
  2. 然后 MCU 启动并运行一些代码以将固件加载到 SPI FLASH 中。.

我看到像USB, UART,之类的词SPI他们都有Serial作为他们名字的一部分。有什么不同?如何使用/连接它们?

(如果这是一个幼稚的问题,请原谅。)

2个回答

这是三种不同类型的串行接口。

SPI 有一个主时钟和同步主输入从输出和主输出从输入数据:总共 3 根线加上地/电源和可选的片选。数据同时传入和传出,通常一次传输 8 位。数据可以是 MSB 优先或 LSB 优先,具体取决于连接的 SPI 从设备。SPI 是一个定义松散的标准,我认为最初来自摩托罗拉 68HC11 微控制器。实际上它就像一个移位寄存器。

UART 是发送和接收异步串行的外设。该协议通常也称为“RS-232(C)”或“EIA-232”或“TIA-232”或“COM 端口”,或其他几个别名。这是最古老的常用串行接口协议之一,这也是它有这么多名字的原因。与 SPI 不同,RS232 UART 使用单线传输时钟和数据。因此,它取决于发送器和接收器之间的预先安排的协议,如波特率时序、数据位的数量、是否会有奇偶校验位以及最小的停止位数量。发送 RS232 很简单,但接收 RS232 很棘手,因为需要恢复时钟信号时序。这最好在硬件中完成。

USB 是一种更现代的接口标准,USB 实施者论坛文档中有详细描述;我不会在这里重新讨论标准。USB 使用差分 NRZ 信号,因此在线级别的描述要复杂得多。通常,您通过将处理程序代码添加到嵌入在微控制器中的硬件 USB 串行接口引擎来使用 USB,或者使用 PHY(物理接口)芯片。您不能像使用 RS232 或 SPI 那样在软件中真正使用 USB。

你没有问过以太网,那是另一个串行接口和另一个复杂但有据可查的协议。

重要的是,“系列”本身只是一个词,而不是一个完整的标准。

如果您还没有,您应该获取英特尔 D1000 MCU 的数据表并开始浏览目录。在那里,您将找到详细描述每个 MCU 外围设备如何工作的部分。

我敢肯定您已经对 USB 有一定的经验,它们都是“串行的”,因为数据一次一位地沿着一条车道(康加舞线、一条车道高速公路等)发送,而不是被分开一次多条车道(并行数据)。

SPI 非常适合嵌入式东西,因为它只是一个移位寄存器而不是其他东西,这允许非常快速的通信(即使在具有 50 多位 32 位芯片的微型 8 位微控制器中,10Mbps 也并不罕见)。数据被加载到移位寄存器中,并在每个时钟周期逐位发送。在另一端执行相反的动作。有 4 个管脚:MISO (Master-In Slave-Out), MOSI (Master-Out Slave-In), CLK 和 CS (Chip Select), 有时它比较模糊 SDI (serial in), SDO (serial out), SCK(时钟)和 CE(芯片使能)或它们的一些变体。SPI 是一个内部接口,几乎只在同一 PCB 上的芯片之间使用。(I2C 是另一个内部串行芯片到芯片接口,在复杂性和引脚数方面更接近低速 UART)

UART 是您可能在 90 年代的旧 PC(串行鼠标、键盘和调制解调器)上找到的那种串行端口的技术名称,UART 使用的线数是 SPI 的一半(TX 和 RX,而不是数据输入、数据输出、时钟和片选) 。UART 减少了引脚数,但限制了最大数据速率,因为接收器必须尝试从比特流中对数据时钟进行逆向工程。UART 需要更多的工作来解码,但几乎每个现有的处理器都有一个专用的 UART 收发器,这不是问题。UART 是一种让嵌入式微型计算机与 PC 通信的好方法,因为 UART 到 USB 适配器一打一美元(假设您的计算机上没有任何好的 ol' com 端口)。唯一真正感兴趣的引脚只是 TX 和 RX 以及与电气接地的连接。UART更像是一个外部接口,即

现在 USB 是三者中最快的(一个数量级),但它也复杂得多,包括握手、设备检测、自动速度协商等。这在嵌入式系统中并不是特别容易做到的除非您可以为您的芯片获得一些预配置的 USB 软件库。USB 是一种差分、双向接口。有两个引脚:D+ 和 D-,每个都是彼此相反的镜像,这样做是因为它提高了信号完整性(除其他外),如果 D+ 和 D-电线总是彼此相邻或成双绞线。