您好!
我们有一个系统使用 TI-15.4堆栈传感器/收集器作为网络协处理器。 外部 MCU (MSP430)会定期尝试通过传感器节点向外发送数据。 如果没有收到操作成功的显式确认代码、外部 MCU 将尝试再次重新发送相同的数据、直到收到此类确认。 此类确认代码通过以下函数发送到外部 MCU:
// sensor.c /*! * @brief MAC Data Confirm callback. * * @param pDataCnf - pointer to the data confirm information */ static void dataCnfCB(ApiMac_mcpsDataCnf_t *pDataCnf)
一般来说、系统运行良好。 在测试期间、传感器节点有时会发送 noAck 回调代码、并且外部 MCU 将重新发送、由它进行处理。
//api_mac.h /*! The operation or data request failed because no acknowledgement was received */ ApiMac_status_noAck = 0xE9,
但经过现场长时间测试、我们发现尽管采用了重新发送策略、但仍有小部分预期由外部 MCU 发出的数据包未到达目的地。 百分比范围为0%至1%、大致取决于网络中的传感器节点数量以及传感器节点与收集器节点之间的距离。 传感器节点越多、传感器节点越多、数据丢失的百分比就越大。
理论上、此类数据丢失可能发生在以下3个步骤中的任何一个:
1) 1)通过 UART 从外部 MCU 传输到传感器节点。 如果在此步骤中数据包损坏、则传感器节点根本不会发出确认代码、因此不会触发重新发送。
2) 2)通过射频从传感器节点到收集器节点。
3)集电极到外部 MCU (STM32)。 如果收集器节点未能发送其接收到的一些数据包、则说明了在传感器节点发送确认发送操作成功后数据包丢失的原因。
我们正在新固件中添加配置、以防止1)这种情况发生。 但是、这是否有助于减少数据丢失需要很长时间才能找出。 因此、我想评估2)和3)的可能性、并查看是否可以采取任何措施来缓解。
提前感谢。
ZL