use*_*653 6 serial-communication uart
在串行通信链路中,首选的成帧/同步方法是什么?
它是一个嵌入式系统,使用从UART到内存的DMA数据传输.我认为使用SOF的框架方法最具吸引力,但也许另一个方法足够好?
有没有人对这两种方法有利有弊?
以下基于UART的串口经验,而不是研究.
当包含以下内容时,我发现通信问题较少 - 或者换句话说,同时执行SOF/EOF和(长度 - 可能)/校验码.帧:
收到的"名人"总是包括:
无论您使用哪种框架,都要确保它能够很好地解决这些消息类型,及时验证#1并快速识别2-5并为下一帧做好准备.
SOF具有巨大的优势,它很容易再次启动,如果接收器由于先前的废话帧而丢失等.
长度很好,但恕我直言最不实用.如果长度需要在消息的开头,它可以限制吞吐量.一些低延迟操作在准备开始传输之前就不知道它的长度.
CRC推荐超过2个字节.简短的检查代码对我来说不够改进.我宁愿没有检查代码而不是1字节代码.如果错误发生的时间只是被检查码捕获,我想要的东西比2字节的99.999%更好,我喜欢4字节的99.99999997%
EOF太有用了!
顺便说一句:如果你的协议是ASCII(而不是二进制),建议不要使用cr或lf作为EOFrame.也许只有在不属于消息的情况下才使用它们.
BTW2:如果你的接收器可以自动检测波特率,它可以节省很多配置问题.
BTW3:发送方可以考虑发送"无"字节(在SOF之前)以确保正确的SOF同步.