3

症状: 我这里有几个 XBee 24-ZB系列 2,它们作为协调器连接在 PC 上,作为路由器连接在终端设备 (AVR) 上(无睡眠)。

当发送大量数据时,路由器/终端设备 XBee 可能会突然冻结 DIN 线路。它仍然可以通过无线电进行通信,它仍然可以将接收到的数据串行传输到微控制器 (DOUT),但忽略 DIN。

XBee 在透明模式下运行,并且无论您多久尝试一次,它都会忽略 AT 命令(带有保护时间的 +++)。我非常确定波形是干净的,用滤波电容读取 VCC 是稳定的,阅读手册和数据表。

唯一的解决方案是重置 XBee 或重新启动 XBee 设备。

波特率: 我尝试了 111111 和 250000。对于 XBee(0% 误差)和同样在 16 MHz 晶体上运行的 AVR,它们是完美的匹配。在 XBee 工作期间,它可以传输大量数据而不会出现任何损坏,并且微控制器的复位不会改变任何事情。

4

3 回答 3

3

这件事的原因似乎是一个(已知的!)固件错误。

XBee 具有通常在微控制器上不使用的硬件流控制;它是额外的线路、路由、编程,在大多数情况下并不那么重要。XBee 有一个用于串行输入的接收缓冲区,可以填满。它应该忽略其他数据;如果您发送的数量超过了它可以通过无线发送的数量,它将开始丢失字节。

如果接收缓冲区满后继续发送数据,它将进入非法状态,这绝对是一个错误,恕我直言。如果您推送数据一段时间,它将无限期地停止获取数据,直到硬重置。

注意:它也不再发送任何无线电数据,因此即使缓冲区已满,它也不会继续使用它。我试图从 digi 支持部门获得确认,但如果不支付 99 美元,他们将不会回应这一事实(一个问题 = 99 美元)。我不会花 100 美元来讨论他们固件中的错误。他们应该修复它!

解决方案是要么实现硬件流控制,要么绝对确保您不会发送太多数据。无线电吞吐量为 5 到 39 kbit/s,具体取决于具体情况,因此您需要包含 ACK 的 API 模式或等待无线电伙伴设备的响应(自己的 ACK 层)。

我用两个不同的原型和三个全新的 XBee 模块 (XB24-ZB) 验证了这一事实。

如果有人有关于该主题的更多信息,我将不胜感激。

于 2014-06-26T15:28:13.983 回答
1

有几种可能的解决方案:

  • 将波特率降低到不能溢出 XBee 模块的串行缓冲区的程度。
  • 实现硬件流控制,并在 XBee 模块取消断言 CTS(告诉您其缓冲区已满)时停止发送数据。
  • 等待另一端收到的数据包的确认。
  • 切换到 API 模式并等待每个发送帧的 Tx 状态帧。

我同意这是 XBee 固件中的一个错误,如果您在取消断言 CTS 后继续发送字节,它不应该锁定。

但我也会争辩说,即使 XBee 没有锁定,你仍然会遇到问题。你真的希望它开始随机丢弃数据吗?

正确的设计会同时使用 CTS 和 RTS 信号,以避免在主机和 XBee 模块之间丢失任何数据。主机在其缓冲区接近满时取消断言 RTS,并且在 XBee 模块取消断言 CTS 时不发送数据。

于 2014-06-27T21:26:05.510 回答
0

看起来这个问题似乎永远不会消失,这是一种耻辱,因为正如人们所指出的那样,这是一个根本性的缺陷。

我试图通过流量控制来解决它,这似乎有所帮助,但路由器固件 XBee 设备似乎仍然会崩溃。我猜它同时接收要路由的数据包...

我的完整和最终解决方案是让连接的设备控制 XBee 的重置引脚,因此当它崩溃时,设备可以在超时后重置它。这不是一个很好的解决方案,但它是 100% 有效的。

于 2016-07-05T07:41:58.757 回答