blob: 0b12f3c8d56e45f49098020712fad775d3cdae78 [file] [log] [blame] [view]
# SMP over console
This document specifies how the mcumgr Simple Management Procotol (SMP) is
transmitted over text consoles.
## Overview
Mcumgr packets sent over serial are fragmented into frames of 127 bytes or
fewer. This 127-byte maximum applies to the entire frame, including header,
CRC, and terminating newline.
The initial frame in a packet has the following format:
```
offset 0: 0x06 0x09
=== Begin base64 encoding ===
offset 2: <16-bit packet-length>
offset ?: <body>
offset ?: <crc16> (if final frame)
=== End base64 encoding ===
offset ?: 0x0a (newline)
```
All subsequent frames have the following format:
```
offset 0: 0x04 0x14
=== Begin base64 encoding ===
offset 2: <body>
offset ?: <crc16> (if final frame)
=== End base64 encoding ===
offset ?: 0x0a (newline)
```
All integers are represented in big-endian. The packet fields are described
below:
| Field | Description |
| ----- | ----------- |
| 0x06 0x09 | Byte pair indicating the start of a packet. |
| 0x04 0x14 | Byte pair indicating the start of a continuation frame. |
| Packet length | The combined total length of the *unencoded* body plus the final CRC (2 bytes). Length is in Big-Endian format. |
| Body | The actual SMP data (i.e., 8-byte header and CBOR key-value map). |
| CRC16 | A CRC16 of the *unencoded* body of the entire packet. This field is only present in the final frame of a packet. |
| Newline | A 0x0a byte; terminates a frame. |
The packet is fully received when <packet-length> bytes of body has been
received.
## CRC details
The CRC16 should be calculated with the following parameters:
| Field | Value |
| ------------- | ------------- |
| Polynomial | 0x1021 |
| Initial Value | 0 |