embedded - 微 Controller 之间处理器间通信的 UART、I2C 与 SPI

标签 embedded microcontroller i2c uart spi

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

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

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

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

最佳答案

这取决于您的总体要求以及引脚的价格。

I2C 只需要两个引脚,但速度很慢,无论是否有中断,处理它都很痛苦,即使有内置的外围模块也是如此。 它是一个主/从系统,非常适合控制许多慢速设备,例如温度传感器。
所有总线设备只有两条线,选择是通过协议(protocol)中的 I2C 地址完成的。

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

SPI需要3个(或4个CS)引脚,它是最快的,即使使用DMA也能简单实现,CPU时间开销低,经常缓冲。 如果您有足够的免费引脚,我会更喜欢它。

关于embedded - 微 Controller 之间处理器间通信的 UART、I2C 与 SPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469647/

相关文章:

c - 在普通 C 中可以/不能完成哪些特定于嵌入式 C 的事情

c - 通过 SPI 从微 Controller 发送命令以显示并接收结果

代码设计——状态机或程序代码

android - 从哪里开始使用 I2C 的 Android 驱动程序

c++ - 嵌入式开发问题 - 如何摆脱错误的串行端口打开?

c++ - GCC C++ (ARM) 和指向结构字段的常量指针

c - 在 extern 语句 "code"中寻找变量或关键字 "extern SensLocationStruct code SensLocation[];"的解释

c - 如何使用 PIC18 写入和读取内存?

python - 是否可以使用Python提高Raspberry Pi上ADXL345的采样率?

ubuntu - 构建一个 i2c 设备 Controller