我目前正在研究微控制器 (mbed LPC1768) 和 XBEE 3 Zigbee 3.0 之间的 SPI 连接。我的目标是在我的 mbed 和我的计算机(无线)之间发送浮动。我已完成所有设置并使用另一个与我的计算机连接的 XBEE 设备接收数据。我用单播发送。我工作得很好,我想通过发送正弦波并在 Simulink 中绘制它来测试结果
这是正弦曲线
如您所见,它有点有效,但信号中存在一些巨大的错误。这些错误的值总是出现在相同的位置(当我发送相同的值时)。后来我用 XCTU 阅读了该消息,我注意到它收到的消息在某种程度上被“操纵”了。但这仅在特定值下出现。
这是我用 mbed 发送的消息:
uint8_t Message[23] {0x7E, 0x0, 0x13, 0x10, 0x1, 0x0, 0x13, 0xA2, 0x0, 0x41, 0xC1, 0x80, 0xD5, 0xFF, 0xFE, 0x0, 0x0, 0xBB, 0xBE, 0xDD, 0x7D, 0x3F};
请注意,0xBB 是 4 个浮点字节的“标头”字节。 (校验和稍后在程序中计算)。
这里突然有 5 个字节位于接收到的数据帧字段中!最后一个值是校验和
我知道接收的数据包与我发送的数据包不同,但它不应该以特定值更改我的消息内容。其他值仅正确接收 4 个数据字节。这里有什么问题?抱歉我的英语不好。
我尝试发送正弦波,没有任何错误,但一些特定值正在以某种方式发生变化。
尝试切换到 API 模式 1 (ATAP=1)。当 ATAP 设置为 2 时,XBee 使用 0x7D“转义”某些值。
这里是 Digi 关于 转义 API 模式的文档:
在您的示例中,转义值是:
0x7D 0x31 -> 0x11
0x7D 0x33 -> 0x13
0x7D 0x5E -> 0x7E
0x7D 0x5D -> 0x7D
因此数据包来自 00 13 A2 00 41 C1 7E 38,并且具有正确的有效负载 BB BE DD 7D 3F。
我还没有遇到需要 API 模式 2 的应用程序。切换到 ATAP=1,确保您的软件知道它正在“未转义”模式下运行,并且它应该可以解决您的问题。
您能分享一下您的SPI通信示例吗?你用的是Arduino吗?