我有两个xbee的系列1.我将它们作为端点设备在API模式下工作并相互通信。第一个xbee连接在树莓派上,而另一个在我的电脑上,我看到了XCTU程序的终端标签。我使用的波特率是125000。
从raspberry pi我尝试发送一个30K字节的jpg图像。我发送100字节长的数据帧(在xbee文档中说的最大)。在循环内部我创建并发送数据包,我还有一个cout
语句打印循环编号。一切都很好,所有字节都被发送。当我注释掉cout
语句时,不会发送所有字节。
根据我的理解,cout
语句作为数据包之间的延迟起作用,但我仍然无法理解为什么会发生这种情况,因为我认为我使用半速...
我希望我很清楚并期待回复。
更新 总而言之,我将波特率改为250000,其行为与125000相同。我还通过检查cts信号实现了硬件流量控制。当xbees处于透明模式时,我需要在150us左右发送字符之间有一段延迟。 api模式也是如此。在api模式下125000波特率的差异在于所需的延迟足以在每个数据包之间进行,但在250000中,我发送的每个字节之间需要延迟。如果我这样做,一切顺利。
接下来我做的是在透明模式下将两个xbees插入我的电脑。我去了xctu软件的终端选项卡,我选择汇编数据包,并以大约3000字节发送到另一个xbee。结果是一样的。第二个xbee接收到大约1500字节,然后每次我从第一个字节发送一个字节到第二个字节时,"丢失字节"以1000的数据包收到。:/
所以有人都知道我做错了什么吗?
答案 0 :(得分:0)
您应该将/ CTS引脚从XBee模块连接到Raspberry Pi,并让您的例程在XBee解除声明时停止发送数据。
在更高的波特率下,可以将数据流式传输到XBee模块,而不是发送到远程模块。本地XBee模块使用/ CTS引脚在其缓冲区几乎已满且主机应停止发送时通知主机。人们将此称为硬件流控制。
可能需要修改Raspberry Pi上的串行驱动程序以利用该信号 - 它应在取消置位时暂停发送缓冲区,并在重新置位时自动恢复发送。