UART RAW protocol

nRF5 SDK v11.0.0

nRF5 SDK v11.0.0

UART RAW protocol

UART RAW protocol implements Serialization PHY API using UART interface.

UART RAW for serialization uses 4 standard UART lines ( RX , TX , /CTS , /RTS ). Hardware flow control is enabled. The protocol supports full duplex communication.
Every packet consists of 2-byte header followed by payload. Packet header contains number of bytes of the payload. Header is transmitted least significant byte first.

UART RAW packet

Packets are transmitted in the following format :

TX_RAW_PACKET = [TX_HEADER][TX_PAYLOAD]

UART_460800_medium.png
Figure 1: Reception and transmission of a packet

Firstly, on RX line length is received as a header: [RX_HEADER]=[0x0004] It is then followed by payload [RX_PAYLOAD]=[0x00 0x78 0x41 0x03]
After the reception of a packet, transmission starts on TX line. Packet format is the same as during reception: [TX_HEADER]=[0x0006] , [TX_PAYLOAD]=[0x01 0x78 0x00 0x00 0x00 0x00]

UART driver

UART RAW protocol for serialization is implemented in 'ser_phy_nrf51_uart.c' file. It uses 'app_uart.c' as a low-level UART driver.

The implementation is event-driven. Events from the low-level driver are handled in static 'ser_phy_uart_evt_callback()' function. Three types of app_uart_evt_t
events are processed: APP_UART_COMMUNICATION_ERROR , APP_UART_TX_EMPTY , APP_UART_DATA .

Following ser_phy_evt_t events are send to upper layer:

Function ser_phy_open() initializes UART using APP_UART_INIT macro with configuration structure of type app_uart_comm_params_t as input. It also registers
SER_PHY event callback.

Function ser_phy_close() closes UART using app_uart_close() function. It also de-registers SER_PHY event callback.

Note: During initialization of UART, pin connected to the RX line is configured as pull-down until first byte is received. This is done to avoid false byte detection due to
glitches on the line when the other side is turned off or starting up.