I am using nRF Connect SDK v2.1.0 in the Toolchain Manager of nRF Connect for Desktop.
The UART data is sent from PC to the board.
I am using the nRF52833 chip, and I believe it is unlikely to be a hardware issue because UART reception works fine in other versions.
The board is unable to receive all the data and only receives a portion of it. The data that is not received enters the UART_RX_STOPPED state in the error_isr.
Even after disabling both Bluetooth Beacon and ESB, when attempting to use UART, I still encounter the error_isr.
I am unable to determine the reason for entering the error_isr.
static void error_isr(const struct device *dev)
{
if (uart0_cb.rx_timeout != SYS_FOREVER_US) {
k_timer_stop(&uart0_cb.rx_timeout_timer);
}
nrf_uart_event_clear(uart0_addr, NRF_UART_EVENT_ERROR);
if (!uart0_cb.rx_enabled) {
nrf_uart_task_trigger(uart0_addr, NRF_UART_TASK_STOPRX);
}
struct uart_event event = {
.type = UART_RX_STOPPED, // ERROR CODE OCCURED 2023 05 25
.data.rx_stop.reason =
UART_ERROR_FROM_MASK(
nrf_uart_errorsrc_get_and_clear(uart0_addr)),
.data.rx_stop.data.len = uart0_cb.rx_counter
- uart0_cb.rx_offset,
.data.rx_stop.data.offset = uart0_cb.rx_offset,
.data.rx_stop.data.buf = uart0_cb.rx_buffer
};
user_callback(dev, &event);
/* Abort transfer. */
// uart_nrfx_rx_disable(dev);
}
void uart_nrfx_isr(const struct device *uart)
{
if (nrf_uart_int_enable_check(uart0_addr, NRF_UART_INT_MASK_ERROR) &&
nrf_uart_event_check(uart0_addr, NRF_UART_EVENT_ERROR)) {
error_isr(uart);
} else if (nrf_uart_int_enable_check(uart0_addr,
NRF_UART_INT_MASK_RXDRDY) &&
nrf_uart_event_check(uart0_addr, NRF_UART_EVENT_RXDRDY)) {
rx_isr(uart);
}
if (nrf_uart_event_check(uart0_addr, NRF_UART_EVENT_TXDRDY)
&& nrf_uart_int_enable_check(uart0_addr,
NRF_UART_INT_MASK_TXDRDY)) {
tx_isr(uart);
}
if (nrf_uart_event_check(uart0_addr, NRF_UART_EVENT_RXTO)) {
rxto_isr(uart);
}
}
Do you need any more additional information?

