XBee DigiMesh帧中的奇怪位和错误的校验和
XBee DigiMesh strange bit in frame and wrong checksum
我正在使用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
并查找下一个。
如果绝对必须使用转义,请确保帧中的长度值和校验和不包含转义字节,并且在发送必要的字节时正确转义它们。
在接收端,取消转义字节,然后计算校验和。
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 计算校验和的逐位运算符
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- C++文件传输的校验和算法
- 如何从 IP 校验和字段中计算十六进制值
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 目录校验和
- 编译后如何计算某些二进制功能(或基本块)的校验和
- PMS5003带有ESP8266-许多校验和错误
- 未正确的校验和释放对象 - 打印时错误
- 将C++校验和函数转换为 Java
- 确定是否使用boost.asio计算UDP校验和
- 校验和CRC 16从C 到Java
- 不同的CRC32校验和同一文件
- Qt,tcp/ip通信校验和
- 错误的校验和错误遍布程序
- XBee DigiMesh帧中的奇怪位和错误的校验和
- 释放对象的错误校验和与将多维向量传递给c++中的静态函数有关
- 在大输入时释放对象的校验和错误