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

时间:2016-01-26 17:25:53

标签: c++ raspberry-pi byte uart xbee

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

要传输的帧: 7e 0 12 10 1 0 0 0 0 0 0 ff ff ff 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

仍然在寻找这个校验和的原因。

1 个答案:

答案 0 :(得分:1)

您可以使用API​​模式1简化代码,并且在发送和接收值时无需转义和取消值。让代码弄清楚框架并忽略框架中间的0x7E并非如此困难:如果您看到0x7E后跟无效长度,请继续查看。如果您的框架校验和错误,请跳过0x7E并查找下一个。

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

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