mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
121 lines
2.7 KiB
C
121 lines
2.7 KiB
C
/*
|
|
* Copyright (C) 2020 Benjamin Valentin
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
|
|
/**
|
|
* @defgroup sys_riotboot_serial Serial Bootloader Protocol
|
|
* @ingroup sys
|
|
* @{
|
|
*
|
|
* @file
|
|
* @brief riotboot as a serial bootloader
|
|
*
|
|
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
|
|
*
|
|
* @}
|
|
*/
|
|
|
|
#ifndef RIOTBOOT_SERIAL_H
|
|
#define RIOTBOOT_SERIAL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief riotboot commands
|
|
* Commands typically have the format [type|length|value]
|
|
* where type and length are one byte and value is $length bytes.
|
|
*
|
|
* Commands are signed with a CRC-8 checksum that is calculated
|
|
* over the entire record. The Checksum is not part of length.
|
|
* @{
|
|
*/
|
|
/**
|
|
* start application.
|
|
* parameter:
|
|
* - '\n': launch default application
|
|
* - '0' : launch slot 0
|
|
* - '1' : launch slot 1
|
|
*/
|
|
#define RIOTBOOT_CMD_BOOT 'b'
|
|
|
|
/**
|
|
* erase page
|
|
* parameter:
|
|
* - length of page number (8 bit - should be 4)
|
|
* - page number (32 bit little endian)
|
|
*/
|
|
#define RIOTBOOT_CMD_ERASE 'e'
|
|
|
|
/**
|
|
* write data
|
|
* parameter:
|
|
* - length of data + address (8 bit)
|
|
* - destination address (32 bit little endian)
|
|
* - data (up to (RX_BUF_LEN-6) bytes)
|
|
*/
|
|
#define RIOTBOOT_CMD_WRITE 'w'
|
|
|
|
/**
|
|
* get page of address
|
|
* parameter:
|
|
* - length of address (8 bit - should be 4)
|
|
* - address (32 bit little endian)
|
|
*
|
|
* returns status code followed by 32 bit little endian
|
|
* value that represents the page in which the address lies.
|
|
*/
|
|
#define RIOTBOOT_CMD_GET_PAGE 'P'
|
|
/** @} */
|
|
|
|
/**
|
|
* @brief riotboot response codes to commands
|
|
* @{
|
|
*/
|
|
/** operation successful */
|
|
#define RIOTBOOT_STAT_OK '.'
|
|
/** CRC error - try again */
|
|
#define RIOTBOOT_STAT_BAD_CRC '?'
|
|
/** illegal parameter */
|
|
#define RIOTBOOT_STAT_ILLEGAL '!'
|
|
/** @} */
|
|
|
|
/**
|
|
* @brief riotboot serial loader synchronisation
|
|
* @{
|
|
*/
|
|
/* sent to stop auto-boot */
|
|
#define RIOTBOOT_ENTER_LOADER 'B'
|
|
/* sent to probe if auto-boot is paused and riotboot is active */
|
|
#define RIOTBOOT_PROBE '?'
|
|
|
|
/* continuously sent by riotboot before booting */
|
|
#define RIOTBOOT_STAT_WAITING 'b'
|
|
/* indicates riotboot is ready to accept commands */
|
|
#define RIOTBOOT_STAT_READY '>'
|
|
/** @} */
|
|
|
|
/**
|
|
* @brief CRC-8 Polynom used for riotboot chunks
|
|
*/
|
|
#ifndef RIOTBOOT_CRC8_POLY
|
|
#define RIOTBOOT_CRC8_POLY (0x31)
|
|
#endif
|
|
|
|
/**
|
|
* @brief Start interactive serial bootloader
|
|
* @return slot to boot, -1 if default slot should be started
|
|
*/
|
|
int riotboot_serial_loader(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* RIOTBOOT_SERIAL_H */
|