我正在检查一种连接两个微控制器的方法。在序列化的层面上,我正在考虑使用纳米原子(http://code.google.com/p/nanopb/)。这样,我可以编码/解码消息并在两个处理器之间发送它们。
基本上,一个小处理器将是RPC服务器,能够执行多个功能。较大的处理器将通过发送的消息来调用RPC,然后当数据准备就绪时,它将从较小的处理器读取。
使用UART,I2C或SPI的优缺点?
发送之前,消息将放在邮箱que中。
这取决于您的总需求以及引脚的昂贵程度。
i2c只需要两个销钉,但是即使在外围模块中构建,它也很慢,无论有或没有中断还是痛苦。这是一个主/从系统,非常适合控制许多慢速设备,例如温度传感器。
所有总线设备只有两行,选择是通过协议中的I2C地址完成的。
uart需要两个引脚,通常更快,更易于处理,但在两侧都需要(几乎)(几乎)。一对一的异步系统,如果有时需要发送数据而无需等待主民意调查请求,则可以是好的。
也可以用作总线系统,但是您需要主/从结构或更复杂的协议。
SPI需要3(或带有CS)引脚的3个(或4个),即使使用DMA,CPU较低的时间开销,通常会缓冲最快,易于实现。当您有足够的免费别针时,我会更喜欢它。
所有这些接口都有PROS/CONS
基本功能中的UART连接需要2个引脚:RX和TX。如何向UART发送消息的SW实现要复杂得多……您必须在设备之间开发自己的使命协议,并确定什么是好消息,什么是坏消息。这可能会变得非常复杂,因为您几乎必须定义如何交流"。在物理链接上,错误,重试的等等。除非您实现了与PC或其他外部设备的串行端口连接,否则我认为UART对于IC进行IC通信路径而言是高度的杀伤。主人和从属不是专门定义的。
spi是一种主奴隶关系,可以是一个更快的接口(我看到的最高60mHz时钟速率,不是常见的),但它也需要更多的引脚,3至少要点点对点通信方案但是,作为"奴隶"的数量,引脚的数量增加到3 n。增加以上1。没有SPI有错误指示。SPI是" deacto"标准...意味着它可能在实施方面有所不同...您的里程可能会因IC供应商的定义如何而有所不同。SPI实施。我通常认为SPI缺乏真正的标准是" con"。
i2c也是两个针接口,是实际的"标准"。由Phillips(现为NXP。)开发,它是标准的,它在其操作方式,如何增加错误和实现方面已明确定义。它具有地址方案,可以发送命令,并且可以支持交易中的0或更多数据帧。CRC(可选)和更高的数据率可以支持(最多5Mbits)。它确实具有缺点,即总线电容可以限制实际数据速率(上升/秋季时间),但通常您可以围绕此问题进行设计。p>在其最基本的形式中,所有这些公共汽车都被"参考",并且可能会遭受系统诱发的噪声。显然,较低的铁路电压可以使这更加问题。同样,仔细的设计实践可以减轻某些人报告是其存在的许多问题。
对于最初由海报询问的点对点系统,是否需要主奴隶安排,SPI或I2C接口可能是适当的(数据速率依赖。)如果需要主主机关系,则I2C或可能需要UART。
为了易于从软件的角度实施,我将按以下顺序对这些通信方法进行排名:
- i2c,如果您需要比I2C可以处理的更快的数据速率,则SPI
- SPI,如果您需要多主管,则I2C或UART
- uart作为最后的度假胜地...有更多的软件开销来管理通信渠道
我将使用uart或can或eth或任何异步的任何协议。
如果您使用同步协议,主人必须始终"询问"从属是否具有数据并生成不必要的流量。