【问题标题】:How to send xon/xoff in case of binary data?如果是二进制数据,如何发送 xon/xoff?
【发布时间】:2013-10-22 13:38:25
【问题描述】:

在软件数据流控制的情况下,我们使用 xon 和 xoff(0x11 和 0x13)标准字符来暂停和恢复传输。但是如果我们要发送包含与 xon 和 xoff 的 ascii 值匹配的字符的二进制数据,我们应该使用什么字符集来发送 xon 或 xoff ?

【问题讨论】:

  • 您需要设计一个应用程序协议,允许您对控制字符进行编码而不是直接发送它们。
  • "我们应该使用什么字符集来发送 xon 或 xoff" -- Termios 将让您(重新)定义软流控制的值,但这并没有传输二进制数据时的帮助。对所有二进制数据进行编码(例如 uuencode/uudecode、Intel 或 Motorola hex)或使用 escape 字符序列(以便匹配 XON 和 XOFF 的数据可以“转义”或编码)。

标签: uart flow-control


【解决方案1】:

我简单的解决方案是使用base64编码,你在python中有它..

base64.b64encode(yourData) - encode
base64.b64decode(yourData) - decode, 

它增加了额外的开销,但发送的数据是简单的字符格式。甚至 HDLC 也使用 base64,所以我想这将是您的一种选择。

【讨论】:

    【解决方案2】:

    使用软件握手会阻止二进制数据的发送。

    没有做一些深奥的事情(发送 9 位/字节而不是 8 位 - 非常不标准),256 个不同的二进制数据中的 2 个和选择用作 XON/XOFF 的 2 个代码之间没有区别。

    有各种协议试图解决这个问题。它们都将“二进制数据”编码为有效但不是一对一的映射。可以使用转义码、压缩、数据包等。当然,通信的两端都需要知道如何编码/解码。这通常会限制您的选择。如果有疑问,请从二进制到文本编码开始,因为它往往更容易调试。 http://en.wikipedia.org/wiki/Binary-to-text_encoding

    【讨论】:

      【解决方案3】:

      为了能够将这两个特殊字符用作控制字符,您必须确保它们不会出现在有效负载数据中。一种方法是使用不包含特殊字符的简化字母对有效负载进行编码。并行答案中提到的二进制到文本编码可以完成这项工作,但如果不依赖于输入字节分布的低开销至关重要,那么escapeless 编码可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        • 2011-12-13
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多