1.现象
如题,在调试多个52832高频率通信时,每隔一段时间会有载荷长度为0的 NRF_ESB_EVENT_RX_RECEIVED事件发生,52832接收处理部分代码如下:
void rfEventHandler(nrf_esb_evt_t const * p_event)
{
uint8_t i;
switch (p_event->evt_id)
{
case NRF_ESB_EVENT_TX_SUCCESS:
SEGGER_RTT_printf(0,"TX SUCCESS EVENT\r\n");
break;
case NRF_ESB_EVENT_TX_FAILED:
(void) nrf_esb_flush_tx();
(void) nrf_esb_start_tx();
NVIC_SystemReset();
SEGGER_RTT_printf(0,"TX FAILED EVENT\r\n");
break;
case NRF_ESB_EVENT_RX_RECEIVED:
//SEGGER_RTT_printf(0,"RX RECEIVED EVENT\r\n");
if (nrf_esb_read_rx_payload(&rx_payload) == NRF_SUCCESS)
{
SEGGER_RTT_printf(0,"RX EVENT pipe:%d cnt:%d noack:%d pid:%d rssi:%d data:%s\r\n",rx_payload.pipe,rcvCnt++,rx_payload.noack,rx_payload.pid,rx_payload.rssi,rx_payload.data);
//通道检测,判断数据有效性,
switch(rx_payload.pipe)
{
case 0:
SEGGER_RTT_printf(0,"receive PIPE 0 data\r\n");
//0通道的直接转发,有效性由stm32来处理
break;
case 1:
case 2:
SEGGER_RTT_printf(0,"receive PIPE 1 or 2 data\r\n");
//传感器数据 数据有效性检查
if(

本文记录了一次解决52832多模块通信时出现的载荷长度为0的问题过程,通过逐步排查,最终定位到selective_auto_ack配置导致的异常回复ACK现象,并给出了具体的解决方案。
最低0.47元/天 解锁文章
1000

被折叠的 条评论
为什么被折叠?



