CAN_Request-Response_protocol/Core/Inc/bootloader.h

91 lines
2.1 KiB
C

#include "main.h"
#include "usart.h"
#include "dma.h"
#include "tim.h"
#include "custom_flash.h"
#include "gpio.h"
#include "can.h"
#include "sdio.h"
#include "fatfs.h"
// KEY defines
#define BOOTLOADER_KEY_ADR (uint32_t)0x08009800
#define BOOTLOADER_KEY_PAGE 20
#define BL_KEY_APP_WRITTEN 0xAAAA5555
// MAIN APP defines
#define MAIN_APP_START_ADR (uint32_t)0x0800C000
#define MAIN_APP_PAGE 21
#define MAIN_APP_NUM_OF_PAGE 250-MAIN_APP_PAGE
// ERROR DEFINES
struct flag
{
unsigned reInitMCU:1; // флаг перепрошивки (очишает память перед прошивкой новой)
unsigned InitOrWait:1; // флаг активной прошивки (1) или ожидания комманды UART/CAN (0)
unsigned StartInit:1; // флаг что необходимо начать прием прошивки/прошивку
unsigned InitBootPeriph:1;// флаг старта инициализации перифирии для прошивки
unsigned BootloaderCMD:3; // комманда: интерфейс для прошивки
unsigned InitMCUReady:1; // окончание прошивки
unsigned HalfOfWrite:1; // какая половина из dma буфера не записана
unsigned SDCardIn:1;
};
struct Bootloader_Errors
{
unsigned FLASH_ERASE:1;
unsigned FLASH_WRITE:1;
unsigned CMD_INVALID:1;
unsigned USART_RECEIVE:1;
#ifdef __CAN_H__
unsigned CAN:1;
#endif
#ifdef __SDIO_H__
unsigned SD_CARD_NOT_INSERTED:1;
unsigned SD_CARD_READ:1;
#endif
};
struct Bootloader_Errors_Counters
{
unsigned FLASH_ERASE;
unsigned FLASH_WRITE;
unsigned CMD_INVALID;
unsigned USART_RECEIVE;
#ifdef __CAN_H__
unsigned CAN_RECEIVE;
#endif
#ifdef __SDIO_H__
unsigned SD_CARD_NOT_INSERTED;
unsigned SD_CARD_READ;
#endif
};
void Bootloader_main(void);
void SD_Programming(FRESULT *res_fresult, HAL_StatusTypeDef *res_hal);
void Bootloader_TIM_Handler(void); // handler for "WD" Timer
void Check_CMD_USART(uint8_t *DataUART);
void SetKey(void);
uint32_t ReadKey(void);
void ResetKey(void);
void Boot_SystemClock_Config(void);