hpgl_xy/stm32f103t8u6-bootloader/src/commands.h
2021-04-04 20:33:45 +02:00

59 lines
1.6 KiB
C

#pragma once
// Legend:
// -> is a transmission via endpoint 2 (out) from the host to the MCU
// <- is a transmission via endpoint 1 (in) from the MCU to the host
typedef enum
{
// Does nothing
CMD_NOP = 0x00,
// Basic bootloader info. Returns 19 to 64 bytes (cf. BootloaderInfo_t):
// <- Build date: u32 (YYYYMMDD as an unsigned integer)
// <- Build number: u32
// <- Flash application base address: u32
// <- Maximum application size: u32
// <- Major version: u8
// <- Minor version: u8
// <- Patch version: u8
// <- Identifier string (variable length, not zero-terminated)
CMD_BOOTLOADER_INFO = 0x01,
// Calculate a CRC32 of a memory region:
// -> Start address: u32
// -> Length: u32
// <- CRC32: u32
CMD_READ_CRC = 0x02,
// Read memory contents
// -> Start address: u32
// -> Length n: u32
// <- Data: n bytes
CMD_READ_MEMORY = 0x03,
// Erase a single 1 KiB flash page
// -> Page number: u8
// <- Return code (0 for success): u8
CMD_ERASE_PAGE = 0x04,
// Program flash
// -> Start adress: u32
// -> Data: n bytes (n must be even)
CMD_PROGRAM = 0x05,
// Exit bootloader and start application software
CMD_EXIT = 0xff
} Command_t;
typedef struct
{
uint32_t build_date;
uint32_t build_number;
uint32_t flash_application_start;
uint32_t flash_application_size;
uint8_t version_major;
uint8_t version_minor;
uint8_t version_patch;
char identifier[];
} __attribute__((packed, aligned(1))) BootloaderInfo_t;