AX.25协议干扰发送数据包

时间:2015-03-16 21:28:45

标签: arduino logic sequence termination

我很抱歉无法为此问题提供代码,但这更符合逻辑。 AX.25协议的终止顺序是" 111111"这是六个1。因此,如果在我的数据包中找到1s序列,它将表示数据包文件的结尾并发送它而不正确发送其余数据包。我会尽力解释我的结论和测试结果,以便你能理解我的困境。

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

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

|| _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)六个1s =为数据包结束激活的终止序列

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

3)如果将1更改为0而不是6个0的序列可能会导致更改后的问题

由于存储器限制,

4)一次只能读取1个字节(EEPROM)

5)如果在两个字节之间发生六个1,则还会过早激活终止序列。

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

引用官方TAPR协议标准:

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

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