使用protobuf和STM32F7设计协议

时间:2019-07-15 18:41:25

标签: c protocol-buffers stm32 serial-communication

我正在尝试执行该Wiki中定义和描述的相同协议 https://wiki.trezor.io/Developers_guide-Message_Workflows

我的工具集是用于嵌入式系统的Protobuf:Nanopb。 使用串行端口的STM32F7。

我现在正在尝试在PC和STM32F7之间进行通信,通常,通信将在两个STM32F7板之间进行。

我的问题:

  1. 什么样的协议足以满足请求和应答的要求?

  2. 我用Google搜索,发现我必须使用类似HLDC的工具,这是否有必要,还是开销很大?

  3. 编码和设计问题:我将触发一个串行中断,该中断总是轮询两块板之间通信的数据,现在将有一个非常大的状态机来解码每种消息类型并基于消息类型。有替代设计吗?

1 个答案:

答案 0 :(得分:0)

首先,AFAIK,nanopb不支持Protobuf模式语言的全部功能。因此,您需要一个适用于nanopb的架构,并希望该架构足以满足需求。但是,据我所知,非常有用的oneof不起作用可能会很烦人。

第二,protobuf线格式不是自定界的。因此,您将通过串行电缆发送数据,但是不可能(如果有的话)可靠地告知一条消息在哪里结束而另一条消息在哪里开始。因此,您将需要传输某种消息间的字节同步模式,该模式在消息中不太可能遇到。您必须读取同步模式之间的字节,将它们放置在缓冲区中,然后从中进行解析。

第三,如果您要发送各种不同的消息而不能使用oneof,那么您将需要其他一些方法来识别已到达的消息类型,以便将其解析为正确的对象类型。该“方式”可以简单地是消息类型的固定序列,或者是一个字节,其值标识消息类型,或者是在所有消息中都执行相同操作的字段。 oneof具有吸引力(尽管您无法使用),因为它可以用作多种不同消息类型的载体;您只需使用oneof的解析器来解析接收到的数据。

相关问题