【问题标题】:UART vs I2C vs SPI for inter-processor communication between microcontrollersUART vs I2C vs SPI,用于微控制器之间的处理器间通信
【发布时间】:2014-02-23 12:46:48
【问题描述】:

我正在研究一种连接两个微控制器的方法。在序列化级别上,我正在考虑使用 Nano protobuffers (http://code.google.com/p/nanopb/)。这样我就可以对消息进行编码/解码,并在两个处理器之间发送它们。

基本上,一个小型处理器将是 RPC 服务器,能够执行多种功能。较大的处理器会通过发送的消息调用那里的 RPC,然后当数据准备好时,它会从较小的处理器中读取数据。

使用 UART、I2C 或 SPI 的优缺点是什么?

消息将在发送前放入邮箱中。

最好的问候, 德拉斯科

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于计算机设计,而不是编程。
  • i2c一般来说是不愉快的,双向数据线总是会出问题,只能作为没有其他选择的外设的最后手段。
  • 你可以使用最快的。基本上是SPI。

标签: embedded microcontroller i2c uart spi


【解决方案1】:

所有这些接口都有优点/缺点。

UART 连接的基本功能需要 2 个引脚:RX 和 TX。如何通过该 UART 发送消息的 SW 实现要复杂得多……您必须在设备之间开发自己的消息传递协议,并决定什么是好消息,什么是坏消息。它可能会变得非常复杂,因为您几乎必须定义如何通过物理链路“通信”、什么是错误、重试等等。除非您正在实现与 PC 或其他外部设备的串行端口连接,否则我认为对于 IC 到 IC 的通信路径,UART 是非常过分的。主从没有具体定义。

SPI 是主从关系,可以是更快的接口(我见过高达 60MHz 的时钟速率,不常见),但它也需要更多引脚,点对点通信方案至少需要 3 个引脚但是随着“从机”的数量增加到 1 以上,引脚的数量增加到 3+n。通过 SPI 没有错误指示。 SPI 是一个“事实上的”标准......这意味着它的实施可能会有所不同......您的里程可能会有所不同,具体取决于 IC 供应商如何定义“他们的”SPI 实施。我通常认为 SPI 缺乏真正的标准是一种“骗局”。

I2C 也是一个双引脚接口,是由 Phillips(现为 NXP)开发的实际“标准”。作为标准,它在如何操作、如何引发错误以及易于实现方面都有明确的定义。它有一个寻址方案,可以发送命令,并且可以在一个事务中支持 0 个或多个数据帧。可以支持 CRC(可选)和更高的数据速率(高达 5Mbits)。它确实有缺点,即总线电容会限制实际数据速率(上升/下降时间),但通常您可以围绕这个“问题”进行设计。

在它们最基本的形式中,所有这些总线都是“以地为参考”的......并且可能会受到系统感应噪声的影响。显然,较低的轨电压会使这个问题变得更加严重。再次,仔细的设计实践可以缓解一些人报告的许多问题,这是他们存在的问题。

对于发帖人最初询问的点对点系统,如果需要主从安排,SPI 或 I2C 接口可能是合适的(取决于数据速率。)如果需要主从关系,I2C或可能需要 UART。

为了便于从软件的角度实现,我将按以下顺序排列这些通信方法:

  1. I2C,如果您需要比 I2C 处理的更快的数据速率,那么 SPI
  2. SPI,如果你需要多主机,那么 I2C 或 UART
  3. UART 作为最后的手段...管理通信通道需要更多的软件开销

【讨论】:

    【解决方案2】:

    我会使用 UART 或 CAN 或 ETH 或任何异步协议。

    如果您使用同步协议,主设备必须始终“询问”从设备是否有数据并产生不需要的流量。

    【讨论】:

      【解决方案3】:

      这取决于您的总体要求以及别针的价格。

      I2C 只需要两个引脚,但速度很慢,而且不管有没有中断都很难处理,即使内置外围模块也是如此。 它是一个主/从系统,适用于控制许多慢速设备,如温度传感器。
      所有总线设备只有两条线,选择是通过协议中的 I2C-Address 完成的。

      Uart 需要两个引脚,它通常更快、更容易处理,但需要(几乎)两侧的时钟相同。 一对一的异步系统,如果两个系统有时都需要发送数据而不等待主轮询请求,这可能会很好。
      也可以用作总线系统,但需要主/从结构或更复杂的协议。

      SPI 需要 3 个(或 4 个带 CS)引脚,它是最快的,即使使用 DMA 也很容易实现,CPU 时间开销低,经常缓冲。 当你有足够的免费引脚时,我会更喜欢它。

      【讨论】:

      • SPI 是主/从 - 主发送时钟,因此从(如果使用 CS,则每个从)需要一条中断线来请求传输。对我来说,UART 是最容易实现的,适用于您希望每一端都能够随时传输的情况。
      猜你喜欢
      • 2011-02-24
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      相关资源
      最近更新 更多