【问题标题】:AX.25 protocol interfering with sending data packetAX.25 协议干扰发送数据包
【发布时间】:2015-03-16 21:28:45
【问题描述】:

我很抱歉无法为这个问题提供代码,但这更像是一种合乎逻辑的情况。我对 AX.25 协议的终止序列是“111111”,即六个 1。因此,如果在我的数据包中找到这个 1 序列,它将表示数据包文件的结尾并发送它,而不会正确发送数据包的其余部分。我会尽力解释我的结论和测试结果,以便您了解我的困境。

***在 Arduino 中编程******

字节 1 包含 8 位。看下面并尝试在一个矩形框中描绘一个字节。紧挨着它的是字节 2,它也包含 8 位。 情况一:

||_1_0_1_1_1_0_1_0_ ||_1_1_1_1_1_1_0_0_||

尝试的解决方案 1:您可以简单地将 1 更改为 0 并跟踪它。

情况2:

||_1_0_1_1_1_0_1_1_ ||_1_1_1_1_0_0_1_0_||

尝试的解决方案 2:尝试的解决方案 1 崩溃。我被困在这里了。

单个字节可以安全地激活 AX.25 终止序列,但组合字节会导致问题。

以下是可能的情况列表:

1) 六个 1 = 为数据包结束激活终止序列

2) 数据包实际数据中的六个 1 = 提前终止

3) 如果将 1 更改为 0,则六个 0 的序列可能会成为恢复更改时的问题

4) 由于内存限制,一次只能读取 1 个字节(EEPROM)

5) 如果两个字节之间出现六个 1,也会过早激活终止序列。

提前感谢您的任何帮助。

【问题讨论】:

    标签: arduino logic sequence termination


    【解决方案1】:

    ax.25 协议规定的解决方案是位填充。

    从概念上讲,只要接收方看到五个连续的 1 位和一个 0 位,它就假定发送方已经填充了 0 位(以分解数据中的错误帧序列),并在发送接收到的帧之前将其删除数据。唯一可以发送未填充的六个 1 位序列是帧序列;所有数据都将被塞满发送。接收器必须始终去填充。

    填充或取消填充通常需要几个字节的工作内存(或几个字节的寄存器),尽管可能有一些创造性的方法。

    引用官方的TAPR协议标准:

    “为了确保上述标志位序列不会意外出现在帧中的其他任何位置,发送站监视该位序列中的一组五个或更多连续“1”位。任何时候五个连续“ 1”位被发送,发送站在第五个“1”位之后插入一个“0”位。在帧接收期间,任何时候接收到五个连续的“1”位,紧跟在五个“1”位之后的一个“0”位被丢弃。”

    谷歌搜索 AX.25 位填充应该返回尽可能多的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多