#ifndef PROTOCOL_USER_H #define PROTOCOL_USER_H #include "Protocol_Lib.h" void Protocol_KL30_Wakeup_Init(void); void Protocol_Send_Service(void); // 10ms任务调用 void UART_Put(Protocol_uint16_t Data); typedef enum { Prot_Idle = 0, Prot_Starting, Prot_Start, Prot_Normal, }Prot_User_State_Enum; typedef struct { uint8_t State; uint16_t TimeDelay; }Protocol_User_Ctrl_Struct; extern Protocol_User_Ctrl_Struct Prot_User; void Protocol_User_Ctrl_Init(void ); void BAT32A239_MCU_Update(void); void Prot_Send_Msg_Process(void ); Protocol_uint32_t CalcCrc32(Protocol_uint8_t buf[], int Len); extern Protocol_uint32_t UpdateBAT32A239Protocol_Parse(const Protocol_uint8_t *pData, Protocol_uint32_t len); extern void SendCmd_ResetComond(void); #ifdef UPGRADE_N32G031 #define CMD_SET_BR 0x01//设置串口波特率 #define CMD_GET_INF 0x10//读取芯片型号索引、BOOT 版本号、芯片 ID #define CMD_FLASH_ERASE 0x30//擦除 FLASH #define CMD_FLASH_DWNLD 0x31//下载用户程序到 FLASH #define CMD_DATA_CRC_CHECK 0x32//CRC 校验下载用户程 #define CMD_OPT_RW 0x40//读取/配置选项字节(包含了读保护等级、FLASH 页写保护、Data0/1 配置等) #define CMD_SYS_RESET 0x50//系统复位 #define CMD_APP_GO 0x51//跳转到用户区执行程序 typedef struct { Protocol_uint8_t CMDH; //宏定义所包含的 Protocol_uint8_t CMDL; Protocol_uint16_t LEN; //不关心发送的端格式 Protocol_uint8_t PAR[4];//需要处理好段格式 Protocol_uint8_t DAT[160];//补充的数据直接补充好再传到下层 }UpdateProtocolStructure;//上层协议数据结构 typedef struct { Protocol_uint8_t CMDH ; Protocol_uint8_t CMDL ; Protocol_uint8_t LEN[2]; union { Protocol_uint8_t DAT[128]; struct { Protocol_uint8_t unused_0 :8; Protocol_uint8_t BootVer :8; Protocol_uint8_t BootCmdVer :8; Protocol_uint8_t UCID [16]; Protocol_uint8_t ChipID_UID [12]; Protocol_uint8_t DBGMCU_IDCODE[4]; Protocol_uint8_t Other [16]; Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }Chipinf; struct { Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }Erase; struct { Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }download; struct { Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }verification; struct { Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }reset; struct { Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }appgo; struct { struct Protocol_Lib { Protocol_uint8_t RDP ; Protocol_uint8_t nRDP ; Protocol_uint8_t USER ; Protocol_uint8_t nUSER ; Protocol_uint8_t Data0; Protocol_uint8_t nData0; Protocol_uint8_t Data1; Protocol_uint8_t nData1; Protocol_uint8_t WRP0; Protocol_uint8_t nWRP0; Protocol_uint8_t WRP1; Protocol_uint8_t nWRP1; Protocol_uint8_t RDP2; Protocol_uint8_t nRDP2; Protocol_uint8_t Reserved; Protocol_uint8_t nReserved; }optionbyte; Protocol_uint8_t CR1 :8; Protocol_uint8_t CR2 :8; }flashOpt; }dat; }N32G031_ACK_Structure;//下层应答协议 extern N32G031_ACK_Structure N32G031_ACK; Protocol_uint32_t UpdateN32G031Protocol_Send(UpdateProtocolStructure SendPd); Protocol_uint32_t UpdateN32G031Protocol_Parse(const Protocol_uint8_t *pData, Protocol_uint32_t len); #endif #endif