48b789c0c4
- bsp.c/h: 外部SPI Flash只读驱动(SPI1, 与App同总线Mode3) - main.c/h: BL_STASH_TO_B状态: AppSize门禁 -> 外部Flash逐8KB搬运B区 -> CRC校验 -> 进BL_COPY_TO_A复用现有搬运链 - 搬运幂等: 搬运中断电重启后B区仍有效自动重搬
81 lines
2.0 KiB
C
81 lines
2.0 KiB
C
#ifndef __MAIN__H
|
|
#define __MAIN__H
|
|
#include "bsp.h"
|
|
|
|
#define CRC16_BASE 0xA001
|
|
|
|
#define APP_START_FLAG 0x55AA5A5A
|
|
#define APP_UPDATE_FLAG 0xA5A5AA55
|
|
#define APP_BOOT_UPGRADE_FLAG 0x5A5A55A5 //升级完成标记:Boot升级成功后置位,App启动时据此擦除外部参数分区并恢复APP_START_FLAG(与App侧bsp.h定义保持一致)
|
|
#define APP_UPDATE_SPI_FLAG 0xA5A55A5A //Cat1远程升级: 固件已存外部SPI Flash暂存区, Boot据此搬运(与App侧bsp.h定义保持一致)
|
|
|
|
typedef enum {
|
|
UPDATE_CMD_NULL,
|
|
UPDATE_CMD_SLAVE_RES = 0x01, //从机应答命令(ACK)
|
|
UPDATE_CMD_SLAVE_REQ_DATA = 0x02, //从机请求数据命令
|
|
UPDATE_CMD_MASTER_REQ = 0x81, //主机升级请求
|
|
UPDATE_CMD_MASTRE_RES_DATA = 0x82, //主机下发数据
|
|
}UpdateCmd_m;
|
|
|
|
//帧头结构体
|
|
typedef struct {
|
|
uint8_t Header;
|
|
uint8_t DevMac[6];
|
|
uint8_t Cmd;
|
|
uint8_t PayloadLen;
|
|
}__attribute__ ((packed))FrameHeader_t, *FrameH;
|
|
|
|
|
|
//主机下发升级请求载荷结构体
|
|
typedef struct {
|
|
uint16_t PackageNum;
|
|
uint32_t AppSize;
|
|
uint32_t AppCrc32;
|
|
}__attribute__ ((packed))UpDataRequset_t, *UDReq;
|
|
|
|
//从机请求下发数据结构体
|
|
typedef struct {
|
|
uint16_t PackageIndex;
|
|
uint16_t PackageNum;
|
|
}__attribute__ ((packed))GetDataRequest_t, *GDReq;
|
|
|
|
//主机应答下发数据结构体
|
|
typedef struct {
|
|
uint16_t PackageIndex;
|
|
uint16_t PackageNum;
|
|
uint8_t DataLen;
|
|
}__attribute__ ((packed))DownResponse_t, *DownRes;
|
|
|
|
typedef enum {
|
|
BL_IDLE,
|
|
BL_ERASE_FLASH,
|
|
BL_GET_DATA,
|
|
BL_WAIT_REV,
|
|
BL_GET_DATA_TIMEOUT,
|
|
BL_START_APP,
|
|
BL_COPY_TO_A, //B区镜像搬运到A区阶段
|
|
BL_STASH_TO_B, //外部SPI Flash暂存区搬运到B区阶段(Cat1远程升级)
|
|
BL_RESET
|
|
}BootStatus_m;
|
|
|
|
typedef struct {
|
|
BootPara_t Para;
|
|
BootStatus_m Status;
|
|
|
|
uint32_t AppPackageCnt;
|
|
uint32_t AppPackageIdx;
|
|
uint32_t RevErrCnt;
|
|
uint32_t CopyRetryCnt; //搬运重试计数
|
|
|
|
uint32_t FeedDogDlyCnt;
|
|
uint32_t BootLoader1mSDlyCnt;
|
|
|
|
bool RxFlag;
|
|
uint32_t UartRevTimeOutCnt;
|
|
uint8_t RxBuff[260];
|
|
uint16_t RxLen;
|
|
uint16_t UpDateFlag;
|
|
}BootLoader_t;
|
|
#endif
|
|
|