XBee DigiMesh帧中的奇怪位和错误的校验和

XBee DigiMesh strange bit in frame and wrong checksum

本文关键字:错误 校验和 DigiMesh XBee      更新时间:2023-10-16

我正在使用XBee DigiMesh 2.4 API-2和Raspberry Pi。我将帧从一个节点广播到另一个节点。

要传输的帧:7e 0 12 10 1 0 0 0 0 0 0 ff ff ff f fe 0 0 41 6c 65 78 69

在另一个节点中接收的帧:7e 0 10 90 0 7d 33 A2 0 40 91 57 26 ff fe c2 41 6c 65 78 1e

困扰我的字节是c2。应该是02。为什么会这样出现?更重要的是,校验和不正确(我阅读了如何在 API 2 模式下计算校验和)。

对于字节0x02它应该是0xe3,或者对于字节 c2,它应该是0x23。我试图以多种方式0x1e获得结果,但我从未得到这个值。

当我以相反的方向(从第二个节点到第一个节点)广播数据包时,会出现同样的问题。

两个XBee都配置了9600波特率,没有奇偶校验。Raspberry Pi UART也是如此。


-----编辑:我找到了有关C2字节的答案。C2 是一个位字段。C2 = 1100 0010。位 7 和 6 是 11,这意味着这里是 Digimesh。设置了位 1,因此它是广播数据包。https://dl.dropboxusercontent.com/u/318853/XBee%20900.PNG

仍在寻找此校验和的原因。

您可以通过使用 API 模式 1 来简化代码,并且无需在发送和接收值时对其进行转义和取消转义。 让你的代码找出框架并忽略帧中间的0x7E真的不难:如果你看到一个0x7E后跟一个无效的长度,请继续寻找。 如果您的帧校验和错误,请跳过0x7E并查找下一个。

如果绝对必须使用转义,请确保帧中的长度值和校验和不包含转义字节,并且在发送必要的字节时正确转义它们。

在接收端,取消转义字节,然后计算校验和。