多个NRF52832高频通信时生成字节长度为0的接收事件问题解决

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

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(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值