UART RAW protocol

nRF5 SDK v12.2.0

This information applies to the following SoftDevice: S132

The UART RAW protocol implements the Serialization PHY API using the UART interface.

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

UART RAW packet

Packets are transmitted in the following format:

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

UART driver

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

The implementation is event-driven. Events from the low-level driver are handled in a 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 , and APP_UART_DATA .

The following ser_phy_evt_t events are sent to the upper layer:

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

Function ser_phy_close() closes UART using the app_uart_close() function. It also deregisters the SER_PHY event callback.

Note
During initialization of UART, the pin connected to the RX line is configured as pull-down until the 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.