Hi,
I have added libuarte example in-app template and sent data from Arduino to nRF52840 successfully. But after receiving some data and I am getting the following error. Any solution please?
Thanks!

Hi,
I have added libuarte example in-app template and sent data from Arduino to nRF52840 successfully. But after receiving some data and I am getting the following error. Any solution please?
Thanks!

Thanks, Elfving
I am trying to do the same, saving data from the buffer in an array and then freeing the buffer. All in the RX event. Here is my event handler. is this the right way to free RX buffer?void uart_event_handler(void *context, nrf_libuarte_async_evt_t *p_evt) {
nrf_libuarte_async_t *p_libuarte = (nrf_libuarte_async_t *)context;
ret_code_t ret;
switch (p_evt->type) {
case NRF_LIBUARTE_ASYNC_EVT_ERROR:
break;
case NRF_LIBUARTE_ASYNC_EVT_RX_DATA:
if (count_data < 50) {
if ((unsigned char)*(p_evt->data.rxtx.p_data) != 0)
{
// Receive complete
received_data[count_data] = (unsigned char)*(p_evt->data.rxtx.p_data);
count_data = count_data + 1;
if ((unsigned char)*(p_evt->data.rxtx.p_data) == 35)
{
check_data();
data_completed = true;
}
}
} else {
count_data = 0;
}
buffer_t buf;
if (!nrf_queue_is_empty(&m_buf_queue)) {
buffer_t buf;
ret = nrf_queue_pop(&m_buf_queue, &buf);
APP_ERROR_CHECK(ret);
UNUSED_RETURN_VALUE(nrf_libuarte_async_tx(p_libuarte, buf.p_data, buf.length));
}
// ret = nrf_libuarte_async_tx(p_libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
// if (ret == NRF_ERROR_BUSY) {
// buffer_t buf = {
// .p_data = p_evt->data.rxtx.p_data,
// .length = p_evt->data.rxtx.length,
// };
// ret = nrf_queue_push(&m_buf_queue, &buf);
// APP_ERROR_CHECK(ret);
//} else {
// APP_ERROR_CHECK(ret);
//}
// printf("Counter : %d",count_data);
// nrf_libuarte_async_rx_free(p_libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
m_loopback_phase = true;
break;
case NRF_LIBUARTE_ASYNC_EVT_TX_DONE:
if (m_loopback_phase) {
nrf_libuarte_async_rx_free(p_libuarte, p_evt->data.rxtx.p_data, p_evt->data.rxtx.length);
if (!nrf_queue_is_empty(&m_buf_queue)) {
buffer_t buf;
ret = nrf_queue_pop(&m_buf_queue, &buf);
APP_ERROR_CHECK(ret);
UNUSED_RETURN_VALUE(nrf_libuarte_async_tx(p_libuarte, buf.p_data, buf.length));
}
}
// printf("Tx Called\n");
break;
default:
break;
}
}
//UART
Reply, please.
Hello Muqarrab, sorry about the delay.
That looks promising. I think you can remove the loopback phase variable as well, and move the nrf_libuarte_async_rx_free call to the end of the RX event.
Regards,
Elfving