Hi,
I am using a NRF52832 with S212 in a custom board with a host processor. The host processor configures the NRF52 through UART.
The custom board is configured as slave.The master is an application in a PC with an ANT receiver. The slave and the master are paired at first and then the slave sends some acknowledged data packets to the master.
The problem is sometimes when I instruct the NRF52 to send an acknowledged message through ant_message_send() function, it doesnt send the data but resets the device. Here is the code snippet of the relevant areas.
void message_request()
{
uint32_t err_code;
switch(msgID)
{
case MESG_ACKNOWLEDGED_DATA_ID: // Send Acknowledged data
SEGGER_RTT_WriteString(0, "ACK Request \n");
err_code = ant_message_send(data_send);
if(err_code == NRF_SUCCESS)
SEGGER_RTT_WriteString(0, "no error \n");
else
SEGGER_RTT_WriteString(0, "unknown error \n");
break;
default:
break;
}
memset(data_send,0,ANT_STANDARD_DATA_PAYLOAD_SIZE);
memset(data_array,0,ANT_STANDARD_DATA_PAYLOAD_SIZE);
}
void uart_reply_send(uint8_t len, uint8_t *data)
{
char i;
SEGGER_RTT_WriteString(0, "UART Send \n");
uint8_t data_tosend[32];
memcpy(&data_tosend[1],data,len);
data_tosend[0]=MESG_TX_SYNC;
if(data != NULL_ptr){
data_tosend[1]=len-2;
for(i=0; i<len+1;i++){
app_uart_put(*(data_tosend+i));
}
app_uart_put(endchar);
}
}
void ant_evt_dispatch(ant_evt_t * p_ant_evt)
{
//uint32_t err_code;
if (p_ant_evt->channel == ANT_BROADCAST_CHANNEL_NUMBER)
{
ANT_MESSAGE * p_message = (ANT_MESSAGE *) p_ant_evt->msg.evt_buffer;
switch (p_ant_evt->event)
{
case EVENT_TRANSFER_TX_FAILED:
SEGGER_RTT_WriteString(0, "TX Fail \n");
data_reply[1]=MESG_RESPONSE_EVENT_ID;
data_reply[3] = MSG_EVT_STD_DATA;
data_reply[4] = EVENT_TRANSFER_TX_FAILED;
len=5;
uart_reply_send(5,data_reply);
break;
case EVENT_TRANSFER_TX_COMPLETED:
SEGGER_RTT_WriteString(0, "TX Success \n");
data_reply[1]=MESG_RESPONSE_EVENT_ID;
data_reply[3] = MSG_EVT_STD_DATA;
data_reply[4] = EVENT_TRANSFER_TX_COMPLETED;
uart_reply_send(5,data_reply);
len=5;
break;
default:
break;
}
}
}
If I debug with an RTT Viewer, I can see that as soon as I get "ACK Request", the device is reset. It only happens randomly and once in a while.
Any insight would be appreciated.