在串行通信链路中,首选的消息成帧/同步方法是什么?
它是一个嵌入式系统,使用 DMA 将数据从 UART 传输到内存。
我认为 SOF 的取景方法最吸引人,但也许另一种就足够了?
有人对这两种方法有优缺点吗?
最佳答案
以下基于UART串行经验,不是研究。
当包含以下内容时,我发现较少的通信问题 - 或者换句话说,同时执行 SOF/EOF 和(长度 - 也许)/校验码。框架:
总是,收到的“名声”包括:
无论您使用什么框架,确保它能够可靠地处理这些消息类型,及时验证 #1 并快速识别 2-5 并为下一帧做好准备。
特种部队 它的巨大优势在于它很容易重新开始,如果接收器由于之前的废话帧等而丢失,等等。
长度 很好,但恕我直言,最没用的。如果长度需要在消息的开头,它可以限制吞吐量。一些低延迟操作在准备开始传输之前只是不知道长度。
CRC 推荐2字节以上。一个简短的检查代码对我来说并没有足够的改善。我宁愿没有校验码也不愿有一个 1 字节的校验码。如果不时发生错误只能被校验码捕获,我想要比 2 字节的 99.999% 更好的东西,我喜欢 4 字节的 99.99999997%
EOF 太有用了!
顺便说一句:如果您的协议(protocol)是 ASCII(而不是二进制),建议不要使用
cr
或 lf
作为 EOFrame。也许只在它们不是消息的一部分的情况下使用它们。BTW2:如果您的接收器可以自动检测波特率,它可以节省很多配置问题。
BTW3:发送者可以考虑发送一个“无”字节(在 SOF 之前)以确保正确的 SOF 同步。
关于serial-communication - 在串行通信中使用什么类型的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073302/