/* * mcu_flash.h * * Created on: Dec 8, 2025 * Author: cc */ #ifndef MCU_DRIVER_INC_MCU_FLASH_H_ #define MCU_DRIVER_INC_MCU_FLASH_H_ #include "ch564.h" #include #define MCU_APP_Flash_PageSize 0x00001000 //MCU Flash页为4096Byte #define APP_Flash_WriteNum 0x05 //APP写入次数 #define App_Procedure_Ready 0x66 //APP准备就绪标志位 #define App_Procedure_Not_Ready 0x44 //App未准备就绪标志位 //MCU Flash Address range(0x0 -- 0x6FFFF) Size(448K) #define MCU_APP_Flash_Start_Addr 0x00007000 //MCU Flash中APP的起始地址 #define MCU_APP_Data_Start_Addr 0x00007000 //MCU Flash APP数据起始地址 #define MCU_APP_Data_End_Addr 0x00027DFF //MCU Flash APP数据结束地址 #define MCU_APP_Feature_Addr 0x00027E00 //MCU Flash 特征区数据保存地址 #define MCU_APP_Flash_End_Addr 0x00027FFF //MCU Flash中APP的结束地址 #define MCU_APP_Feature_PageAddr 0x00027000 //MCU APP特征区 所在页的地址 #define MCU_APP_Feature_PageOffset 0x00000E00 //MCU APP特征区所在页的偏移量 #define APP_FEATURE_SIZE 0x0200 //512Byte //EEPROM Address range(0x70000 -- 0x77FFF) Size(32K) #define MCU_EEPROM_Start_Addr 0x00070000 #define MCU_EEPROM_MCUDevInfo_Address 0x00070000 //MCU 设备信息地址固定为0x00070000,大小为4096 此区域不可改动 #define MCU_EEPROM_End_Addr 0x00078000 /* EEPROM 保存数据格式: * FLAG - 1Byte 保存标志位 * LEN - 2Byte 保存数据长度 * CHECK - 1Byte 保存数据校验 * DATA - nByte 保存数据内容 * * */ #define EEPROM_SVAE_FLAG 0xAE #define EEPROM_DATA_Size_Max 0x40 //目前保存数据内容最长为100Byte #define EEPROM_PARA_Size 50 #define EEPROM_DEV_NAME_Size 32 #define EEPROM_Offset_SaveFlag 0x00 #define EEPROM_Offset_Datalen 0x01 #define EEPROM_Offset_Check 0x03 #define EEPROM_Offset_Data 0x04 /* 特征区数据结构体 * 注意:由于risc-v环境,没有字节对齐操作 * 所以保存至Flash/MCU Flash中的顺序与结构体定义顺序不一致,使用时需注意 * */ typedef enum{ Feature_Check = 0x00, //特征区 512Byte 的CRC校验 - 2Byte Feature_AppFlag = 0x02, //特征区 - APP标志位 - 1Byte Feature_AppStart = 0x03, //特征区 - APP起始地址 - 4Byte Feature_AppEnd = 0x07, //特征区 - APP结束地址 - 4Byte Feature_AppCrcSize = 0x0B, //特征区 - APP CRC的长度 - 2Byte Feature_AppCrcLen = 0x0D, //特征区 - APP CRC校验的数据大小 - 2Byte Feature_AppFlashCrc = 0x0F, //特征区 - APP CRC }FEATURE_E; #define APP_Feature_CRC_Size 497 typedef struct{ uint8_t app_flag; //APP 标志位 uint8_t app_crc[APP_Feature_CRC_Size]; //APP CRC校验值 uint16_t app_crc_size; //APP CRC校验的数据大小 uint16_t app_crc_len; //APP CRC校验的数据长度 uint16_t crc_check; //特征区数据CRC值 - 用于校验特征区数据是否合法 uint32_t app_start_addr; //APP起始地址 uint32_t app_end_addr; //APP结束地址 }G_SYS_FEATURE_T; /*该信息存放于MCU EEPROM区域中*/ typedef struct{ uint8_t dev_addr; //设备地址 uint8_t dev_type; //设备类型 uint8_t dev_boot_ver; //设备Boot的软件版本号 uint8_t dev_app_ver; //设备APP的软件版本号 uint8_t dev_name_len; //设备名称的长度 uint8_t dev_name[EEPROM_DEV_NAME_Size]; //设备名称 }E_MCU_DEV_INFO; extern E_MCU_DEV_INFO g_mcu_dev; extern G_SYS_FEATURE_T g_app_feature; extern uint8_t g_flash_buff[570]; void EEPROM_Init(void); uint8_t MCU_APP_Flash_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t writeAddr); uint8_t MCU_APP_Flash_Read(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t readAddr); uint8_t MCU_APP_Flash_Erase(uint32_t readAddr,uint16_t NumByteToWrite); uint8_t MCU_APP_Flash_ALLErase(void); uint8_t MCU_EEPROM_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t writeAddr); uint8_t MCU_EEPROM_Read(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t readAddr); uint8_t MCU_EEPROM_Erase(uint32_t readAddr,uint16_t NumByteToWrite); uint8_t MCU_EEPROM_ALLErase(void); uint8_t EEPROM_CheckSum(uint8_t *data,uint16_t len); uint8_t EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info); uint8_t EEPROM_WriteMCUDevInfo(E_MCU_DEV_INFO *info); void EEPROM_Default_MCUDevInfo(E_MCU_DEV_INFO *info); void EEPROM_Validate_MCUDevInfo(E_MCU_DEV_INFO *info); uint8_t Read_APP_Feature_Info(uint8_t option,G_SYS_FEATURE_T *feature_info); uint8_t Write_APP_Feature_Info(uint8_t option,G_SYS_FEATURE_T *feature_info); void APP_Feature_Info_Printf(G_SYS_FEATURE_T *feature_info); #endif /* MCU_DRIVER_INC_MCU_FLASH_H_ */