Ascii控制字符SOH,DLE,STX,ETX:如何通过UART转义二进制数据?

时间:2016-09-21 16:40:16

标签: binary ascii uart 8-bit

我想要一种简单,轻量级的方式让两个基本的8位MCU通过8位UART连接相互通信,将两个ASCII字符作为8位值发送,将二进制数据作为8位值发送

我宁愿不重新发明轮子,所以我想知道一些ASCII实现是否会起作用,以某种标准方式使用ASCII控制字符。

问题:要么我没有正确理解它,要么它无法做我想做的事。

关于控制字符的维基百科页面说明可以像这样发送数据包:

  1. < DLE> < SOH> - 数据链接转义和标题开始
  2. 标题数据
  3. < DLE> < STX> - 数据链接转义和文本开始
  4. <有效载荷>
  5. < DLE> < ETX> - 数据链接转义和文本结束
  6. 但是如果有效载荷是包含两个相当于DLE和ETX的连续字节的二进制数据怎么办?这些字节应该如何转义?

    链接可能被破坏并重新建立,因此接收MCU应该能够开始接收中间数据包,并且有一种简单的方法来告知下一个数据包何时开始,因此它可以忽略数据直到结束那个部分包。

    错误检查将在更高级别进行,以确保收到的数据包有效 - 除非ASCII标准也可以解决此问题

1 个答案:

答案 0 :(得分:0)

由于要与文本消息一起传输二进制数据,因此确实必须确保接收器不会将控制字节与有效载荷内容混淆。一种方法是对有效载荷数据进行编码,以使任何特殊字符都不会出现在输出中。如果开销不是问题,那么像Base16这样的最简单的编码就足够了。否则,您可能需要查看专门设计用于从编码数据中删除某些字符的escapeless编码。