This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52832 ANT lost data packets

Hi,

I am using an NRF52832 on a custom board and I programmed the Broadcast RX code into the board. I use ANTware as the master with a channel period of 4 and send broadcast data which has to be received by the custom board. I use RTT_WriteString to output a string every time a Broadcast is received.  

But instead of receiving 4 data packets per second I only receive 1 packet every 2 seconds or so. What could be the reason? 

I use SDK 13.1.0. I have also tried this on PCA10040 board with the same results. The code I use is as follows. 

void ant_evt_dispatch(ant_evt_t * p_ant_evt)
{	
    uint32_t err_code;

        ANT_MESSAGE * p_message = (ANT_MESSAGE *)p_ant_evt->msg.evt_buffer;

        switch (p_ant_evt->event)
        {
            case EVENT_RX:

                if (p_message->ANT_MESSAGE_ucMesgID == MESG_BROADCAST_DATA_ID)
									SEGGER_RTT_WriteString(0,"BC\n");
								if  (p_message->ANT_MESSAGE_ucMesgID == MESG_ACKNOWLEDGED_DATA_ID)
									SEGGER_RTT_WriteString(0,"ACK\n");
                break;

            default:
                break;
        }
}


/**@brief Function for ANT stack initialization.
 *
 * @details Initializes the SoftDevice and the ANT event interrupt.
 */
static void softdevice_setup(void)
{
    uint32_t err_code;

    nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;

    err_code = softdevice_ant_evt_handler_set(ant_evt_dispatch);
    APP_ERROR_CHECK(err_code);

    err_code = softdevice_handler_init(&clock_lf_cfg, NULL, 0, NULL);
    APP_ERROR_CHECK(err_code);

    err_code = ant_stack_static_config();
    APP_ERROR_CHECK(err_code);
}


/**@brief Function for setting up the ANT module to be ready for RX broadcast.
 */
static void ant_channel_rx_broadcast_setup(void)
{
    uint32_t err_code;
	
		err_code = sd_ant_channel_assign(ANT_BROADCAST_CHANNEL_NUMBER,CHANNEL_TYPE_SLAVE,Netno,0x00);
        APP_ERROR_CHECK(err_code);
	
		err_code = sd_ant_channel_id_set(ANT_BROADCAST_CHANNEL_NUMBER,0x0000,0x85,0x01); //CHAN_ID_DEV_NUM, CHAN_ID_DEV_TYPE, CHAN_ID_TRANS_TYPE);
        APP_ERROR_CHECK(err_code);
	
		err_code = sd_ant_channel_radio_freq_set(ANT_BROADCAST_CHANNEL_NUMBER,FREQ);
		APP_ERROR_CHECK(err_code);
	
		err_code = sd_ant_channel_period_set(ANT_BROADCAST_CHANNEL_NUMBER, 4);
		APP_ERROR_CHECK(err_code);
	
		// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
			
		err_code = sd_ant_channel_search_timeout_set(ANT_BROADCAST_CHANNEL_NUMBER, 0x0F);
		APP_ERROR_CHECK(err_code);
	
		err_code = sd_ant_channel_radio_tx_power_set(ANT_BROADCAST_CHANNEL_NUMBER, RADIO_TX_POWER_LVL_3, 0);
		APP_ERROR_CHECK(err_code);

    // Open channel.
    err_code = sd_ant_channel_open(ANT_BROADCAST_CHANNEL_NUMBER);
    APP_ERROR_CHECK(err_code);
}


/**@brief Function for application main entry. Does not return.
 */
int main(void)
{
    softdevice_setup();
    ant_channel_rx_broadcast_setup();
	
	SEGGER_RTT_WriteString(0,"Init");

    // Main loop.
    for (;;)
    {
        // Put CPU in sleep if possible.
        uint32_t err_code = sd_app_evt_wait();
        APP_ERROR_CHECK(err_code);
    }
}

How can I investigate further? Any insights would be appreciated. Thanks.

Parents Reply Children
No Data
Related