Embedded 用于微控制器之间处理器间通信的UART与I2C与SPI

Embedded 用于微控制器之间处理器间通信的UART与I2C与SPI,embedded,microcontroller,i2c,uart,spi,Embedded,Microcontroller,I2c,Uart,Spi,我正在研究一种连接两个微控制器的方法。在序列化级别上,我考虑使用Nano protobuffers()。通过这种方式,我可以对消息进行编码/解码,并在两个处理器之间发送消息 基本上,一个小型处理器就是RPC服务器,能够执行多种功能。较大的处理器将通过发送的消息调用这些RPC,然后当数据准备就绪时,它将从较小的处理器读取数据 使用UART、I2C或SPI的优缺点是什么 邮件将在发送前放入邮箱中 致以最良好的祝愿, Drasko这取决于您的总体需求和引脚的价格 I2C只需要两个管脚,但速度很慢,即使

我正在研究一种连接两个微控制器的方法。在序列化级别上,我考虑使用Nano protobuffers()。通过这种方式,我可以对消息进行编码/解码,并在两个处理器之间发送消息

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

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

邮件将在发送前放入邮箱中

致以最良好的祝愿,
Drasko

这取决于您的总体需求和引脚的价格

I2C只需要两个管脚,但速度很慢,即使使用内置的外围模块,在有或没有中断的情况下处理它也是一件痛苦的事情。 它是一个主/从系统,适用于控制许多低速设备,如温度传感器。
所有总线设备只有两条线路,通过协议中的I2C地址进行选择

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

SPI需要3个(或4个CS)引脚,它是最快的,即使使用DMA也很容易实现,cpu时间开销低,通常是缓冲的。
当您有足够的空闲PIN码时,我更喜欢它。

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


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

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

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

SPI是一种主从关系,可以是一种更快的接口(我见过高达60MHz的时钟频率,不常见),但它也需要更多的引脚,点对点通信方案至少需要3个引脚,但当“从”数量增加到1以上时,引脚数量增加到3+n。通过SPI没有错误指示。SPI是一个“事实上”的标准…这意味着它在实施上可能会有所不同…您的里程数可能会有所不同,这取决于IC供应商如何定义“他们的”SPI实施。我一般认为SPI的真正标准缺乏是一个“骗局”。 I2C也是一个双针接口,是Phillips(现在的NXP)开发的实际“标准”。作为一个标准,它在如何操作、如何引起错误方面有很好的定义,并且易于实现。它具有寻址方案,可以发送命令,并且可以在事务中支持0个或更多数据帧。可以支持CRC(可选)和更高的数据速率(高达5Mbit)。它确实有缺点,即总线电容可以限制实际数据速率(上升/下降时间),但通常可以围绕这个“问题”进行设计

在其最基本的形式中,所有这些总线都是“接地参考的”…并且可能受到系统诱发噪声的影响。显然,较低的轨道电压会使这一问题更加严重。同样,仔细的设计实践可以缓解许多问题,一些人认为这些问题是他们存在的根源

对于海报最初要求的点对点系统,如果需要主从式布置,则可能需要SPI或I2C接口(取决于数据速率)。如果需要主-主关系,则可能需要I2C或UART

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

  • I2C,如果您需要比I2C更快的数据速率,那么SPI
  • SPI,如果您需要多主机,那么I2C或UART
  • UART作为最后的手段…有更多的软件开销来管理通信通道

  • 这个问题似乎离题了,因为它是关于计算机设计,而不是编程。i2c通常令人不快,双向数据线总是会导致问题,只能作为没有其他选择的外围设备的最后手段。您可以使用最快的。基本上是SPI。SPI是主/从-主设备发送时钟,因此从设备(如果使用CS,则每个从设备)需要一条中断线来请求传输。对我来说,UART是最简单的实现方式,在这种情况下,您希望每一端都能够在需要时进行传输。