我需要广播一个半径为1的数据包,接收到这个数据包的设备返回一个带有这次通讯的LQI和RSSI的包回来,然后接收设备把发送方的短地址、发送的LQI和RSSI、接收的LQI和RSSI通过串口打印出来,从而知道该点的信号强度。
串口数据包的格式为:
包头(2字节) + 命令字(1) + 数据长度(1) + 短地址(2) + 设备识别码(1) + 发送LQI(1) + 发送RSSI(1) + 接收LQI(1) + 接收RSSI(1) + 校验和(1) + 包尾(2)
一共14个字节。
目前串口使用的是协议栈默认的DMA发送,缓存大小也是默认的128字节。发现周边节点一多,串口就发不全了。
128 / 14 ≈ 9,也就是最多只能发送9个数据包。
解决猜想:
一、 手动调用HalUARTPoll(),这样是否会发生DMA没发送完成导致的丢数据?
二、 关闭RF中断,等串口发送完再打开。这样是否会出现无线丢包?
三、 是否有其他更好的方法?