nRF51 SDK - S120 SoftDevice
|
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.
Packets are transmitted in the following format :
TX_RAW_PACKET = [TX_HEADER][TX_PAYLOAD]
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 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.