app_uart_get question

I'm sending data to the serial port in two ways:

First, if I use a terminal emulator and send a character at a time, app_uart_get returns NRF_SUCCESS for each character. The UART error handler is also called once for each character as it goes on the fifo.

Second, if I send a 14-character string using using the "send file" feature of the terminal emulator, app_uart_get only returns NRF_SUCCESS for some of the characters. Others appear to get dropped. I can still see the UART error handler called 14 times as the characters come in, so I know they all arrived. But app_uart_get only returns NRF_SUCCESS 4 or 5 times.

Why would the UART/fifo drop characters that come in without a pause in between?

Here are some code snippets. I'm using the Segger RTT to implement printf.

#define UART_TX_BUF_SIZE 256                         /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 256                         /**< UART RX buffer size. */

void uart_error_handle(app_uart_evt_t * p_event)
{
    printf("UART Error handler.\r\n");
}

    
    const app_uart_comm_params_t comm_params = {
          RX_PIN_NUMBER,
          TX_PIN_NUMBER,
          RTS_PIN_NUMBER,
          CTS_PIN_NUMBER,
          UART_HWFC,
          false,
#if defined (UART_PRESENT)
          NRF_UART_BAUDRATE_115200
#else
          NRF_UARTE_BAUDRATE_115200
#endif
      };

    APP_UART_FIFO_INIT(&comm_params,
                         UART_RX_BUF_SIZE,
                         UART_TX_BUF_SIZE,
                         uart_error_handle,
                         APP_IRQ_PRIORITY_LOWEST,
                         err_code);

    APP_ERROR_CHECK(err_code);

    printf("UART test started.\r\n");
    char_cnt = 0;
    uint32_t uart_status;

    while (true) { 
        uart_status = app_uart_get(&(JSON_char_buff[char_cnt]));
        switch( uart_status ) {
            case NRF_SUCCESS:
            printf("NRF_SUCCESS\r\n");
            char_cnt++;
            continue;

            case NRF_ERROR_NOT_FOUND:
            // printf("NRF_ERROR_NOT_FOUND\r\n");
            continue;

            default:
            printf("Unexpected status = 0x%x\r\n", uart_status );
            continue;
        }
    }

Parents Reply Children
No Data
Related