#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