SDK version 15.2.0 (latest at the moment of writing).
I am having trouble reading from UART in > 1 byte chunks where exact length is not known upfront.
The problem is, UART driver will not return partial result even after explicit abort (which i invoke from a timer).
This is because despite what the documentation states:
317 /**
318 * @brief Function for aborting any ongoing reception.
319 * @note @ref NRFX_UARTE_EVT_RX_DONE event will be generated in non-blocking mode.
320 * It will contain number of bytes received until abort was called. The event
321 * handler will be called from UARTE interrupt context.
322 *
323 * @param[in] p_instance Pointer to the driver instance structure.
324 */
325 void nrfx_uarte_rx_abort(nrfx_uarte_t const * p_instance);
The RX_DONE event is not raised unless the amount of data is not exactly equal to the amount specified in the rx call:
526 nrf_uarte_event_clear(p_uarte, NRF_UARTE_EVENT_ENDRX);
527 size_t amount = nrf_uarte_rx_amount_get(p_uarte);
528 // If the transfer was stopped before completion, amount of transfered bytes
529 // will not be equal to the buffer length. Interrupted transfer is ignored.
530 if (amount == p_cb->rx_buffer_length)
531 {
"Interrupted transfer is ignored." vs "It will contain number of bytes received until abort was called." - this looks like a bug to me.