我正在使用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
仍然在寻找这个校验和的原因。
答案 0 :(得分:1)
您可以使用API模式1简化代码,并且在发送和接收值时无需转义和取消值。让代码弄清楚框架并忽略框架中间的0x7E
并非如此困难:如果您看到0x7E
后跟无效长度,请继续查看。如果您的框架校验和错误,请跳过0x7E
并查找下一个。
如果绝对必须使用转义,请确保框架中的长度值和校验和不包含转义字节,并且在发送时正确转义必要字节。
在接收端,取消字节,然后计算校验和。