Transport protocol between host tools and bootloader.
- Framing: COBS with
0x00packet delimiter - Serialization:
postcard(serde) - Max data payload per
DataBlock:1024bytes
Defined in crispy-common-rs/src/protocol.rs.
GetStatusStartUpdate { bank, size, crc32, version }DataBlock { offset, data }FinishUpdateSetActiveBank { bank }WipeAllReboot
Ack(AckStatus)Status { active_bank, version_a, version_b, state, bootloader_version? }
bootloader_version is an optional packed semantic version (major.minor.patch)
encoded as a u32:
major = (value >> 20) & 0x03FFminor = (value >> 10) & 0x03FFpatch = value & 0x03FF
Older bootloader builds may omit this field; host tools should handle its absence.
OkCrcErrorFlashErrorBadCommandBadStateBankInvalid
IdleUpdateModeReceiving
StartUpdate.versionis provided by the host for the target bank.- The version is persisted to
BootData.version_aorBootData.version_bonly after a successfulFinishUpdate(RAM CRC check + flash CRC check). SetActiveBankswitches the active bank but does not rewrite bank version metadata.WipeAllresets boot metadata (BootData::default_new()), including bank versions.Status.bootloader_versionis optional and encoded as packed semver (u32) for backward compatibility with older bootloader builds.