nRF51 SDK - S130 SoftDevice
|
The DFU process is designed to be transport agnostic, as long as a reliable transport layer is used. The DFU bootloader example supports two transport layers: Bluetooth low energy (BLE) and UART (HCI).
Different types of messages are used to, for example, initialize a DFU, to send the init packet, and to send the actual data. Depending on the transport layer that is use, packets might be written to different channels. For example, BLE uses different end points for control packets (DFU messages) and data packets (init packet and firmware fragments), while serial transport uses different packet formats only.
All transports have different fixed maximum sizes for a data unit. To transfer data that exceeds these maximum sizes, the data must be split up into smaller packets. The DFU target will then reassemble the firmware fragments. However, the DFU process does not implement sequence numbers or a DFU packet loss mechanism, so the transport layer must submit the DFU packets in the right order and one at a time. The DFU example does not detect out-of-sequence packets, and the transport must ensure that all packets are delivered in the right order.
For more information about the BLE and serial transport, see the following page: