Embedded 微控制器到微控制器通信库(通过UART/RS232)
我想用UART接口连接两个微控制器,并搜索协议在它们之间交换数据 实际上,我希望定期交换数据(即:传感器读取)和事件数据(GPIO状态)。我每100毫秒交换大约100-200字节 有人知道实现这种任务的协议或库吗 现在,我看到了protobuf和nano protobuff?还有别的事吗? 如果我可以在UART上添加一个软件层并使用“虚拟数据流”,就像它是到N个端口的TCP/IP连接一样,那就太好了 有什么想法吗?Embedded 微控制器到微控制器通信库(通过UART/RS232),embedded,ipc,rpc,microcontroller,uart,Embedded,Ipc,Rpc,Microcontroller,Uart,我想用UART接口连接两个微控制器,并搜索协议在它们之间交换数据 实际上,我希望定期交换数据(即:传感器读取)和事件数据(GPIO状态)。我每100毫秒交换大约100-200字节 有人知道实现这种任务的协议或库吗 现在,我看到了protobuf和nano protobuff?还有别的事吗? 如果我可以在UART上添加一个软件层并使用“虚拟数据流”,就像它是到N个端口的TCP/IP连接一样,那就太好了 有什么想法吗? 谢谢我认为最直接的方法是自己动手 您可以在制造商的芯片支持库中找到RS232驱动
谢谢我认为最直接的方法是自己动手 您可以在制造商的芯片支持库中找到RS232驱动程序 RS232是一种面向流的传输,这意味着您在发送消息时需要将消息编码为某种帧结构,并在接收方检测帧边界。一种聪明且易于使用的机制是“一致的开销字节填充” 这个简单的算法将消息中的零转换为其他值,因此零字节可用于检测帧的开始和结束。如果一个字节在传输过程中损坏,您甚至可以重新同步到流并继续运行 维基百科上的代码应该足够简单,即使是最小的微处理器 之后,您可以定义消息格式。您可以让它非常简单,直接按原样发送数据结构 关于简单消息格式的建议:
Byte-ID Meaning
---------------------------------
0 Destination port number
1 message type (define your own)
2 to n message data
如果要发送可变长度的消息,可以发送一个长度字节,也可以从常量开销字节的输出中导出长度
顺便说一句,UART/RS232很好用,也很容易使用,但是您可能还想看看SPI。SPI接口更适合在两个微控制器之间交换数据。它通常比RS232更快,更健壮,因为它有专用的时钟线。
这取决于您是否需要主/从实现、噪声保护、点-点或多点(在本例中是碰撞检测)等
但是,正如我们的同事所说,我会遵循接吻原则,选择最简单的解决方案
只需添加一些标题信息,如ID和长度,如果需要CRC检查,请高兴:)当第一个答案开始时,最简单的结果就是自己滚动。根据需要定义标头(上面的“格式”),可能包括状态信息,以便每个处理器都知道另一个处理器工作正常。我成功地制定了一项协议,其中包括
然后,解析器将[*识别为消息的开头,只要校验和匹配,就将特定命令ID的正文和相关参数发送给命令处理程序。尝试微控制器互连网络(MIN)1.0: 它具有使用字节填充来保持接收器同步的帧、16位Fletcher校验和算法、应用程序使用的标识符以及最多15个字节的可变有效负载 那里有嵌入式C代码,还有一个Python实现,可以更方便地与PC进行通信。这个怎么样:eRPC eRPC(嵌入式远程过程调用)是远程过程调用(RPC)由NXP创建的系统。RPC是一种机制,用于使用简单的本地函数调用调用远程系统上的软件例程。远程系统可以是通过任意通信通道连接的任何CPU:网络上的服务器、多核系统中的另一个CPU核,等等。对于客户端来说,这就像在中调用函数一样应用程序中内置的库。唯一的区别是通信通道引入的任何延迟或不可靠性 我已经在一个两处理器嵌入式系统中使用了它,一个cortext-A9 CPU和一个Context-M4 MCU,它们通过SPI/GPIO相互通信 Erpc可以在UART、SPI、rpmsg和网络(tcp)上运行。即使使用串行或SPI作为传输隧道,它也可以进行双向传输
调用,占用空间非常小。好的,这似乎是一个很好的起点。您知道任何现有的协议或库。例如:protobuf、zeromq、TI MessageQ、Mbed RPC库)这听起来类似于协议缓冲区帧协议。