49 lines
2.0 KiB
C
49 lines
2.0 KiB
C
#ifndef __BOOTLOADER_H
|
|
#define __BOOTLOADER_H
|
|
|
|
#include "boot_project_setup.h"
|
|
#include "string.h"
|
|
|
|
|
|
#define BL_KEY_APP_WRITTEN 0xAAAA5555
|
|
|
|
// ERROR DEFINES
|
|
|
|
/**
|
|
* @brief Состояние бутлоадера
|
|
*/
|
|
typedef enum {
|
|
BL_STATE_INIT = 0, ///< Состояние: инициализация
|
|
BL_STATE_JUMP_TO_APP, ///< Состояние: запуск приложения
|
|
BL_STATE_IDLE, ///< Состояние: ожидание команд
|
|
BL_STATE_ERASE, ///< Состояние: стирание флеша
|
|
BL_STATE_RECEIVE_UART, ///< Состояние: прием прошивки по UART
|
|
BL_STATE_RECEIVE_CAN, ///< Состояние: прием прошивки по CAN
|
|
BL_STATE_WRITE, ///< Состояние: запись данных
|
|
BL_STATE_VERIFY, ///< Состояние: проверка прошивки
|
|
BL_STATE_ERROR ///< Состояние: ошибка
|
|
} BootloaderState_t;
|
|
|
|
|
|
typedef struct {
|
|
BootloaderState_t state; ///< текущее состояние бутлоадера
|
|
uint32_t addr; ///< текущий адрес прошивки
|
|
|
|
uint8_t fw_size; ///< размер прошивки
|
|
uint8_t fw_buffer[PAGE_SIZE]; ///< буфер для приема прошивки (UART/CAN)
|
|
uint32_t fw_len; ///< длина принятого пакета
|
|
uint32_t fw_crc; ///< контрольная сумма прошивки
|
|
|
|
UART_HandleTypeDef *huart; ///< хендлер UART
|
|
CAN_HandleTypeDef *hcan; ///< хендер CAN
|
|
CAN_TxHeaderTypeDef TxHeader; ///< Заголовок CAN сообщения для отправки
|
|
BootloaderState_t prev_state; ///< предыдущее состояние бутлоадера
|
|
} Bootloader_t;
|
|
|
|
|
|
void Bootloader_Task(Bootloader_t *bl);
|
|
uint8_t Receive_FW_Command(Bootloader_t *bl);
|
|
|
|
void Error_Handler(void);
|
|
|
|
#endif //__BOOTLOADER_H
|