Files
RCU_C1P_Module/MCU_Driver/inc/mcu_flash.h
caocong cc8783e9f8 feat:新增TFTP IAP升级功能
修改事项:
1、新增TFTP IAP升级功能,只是代码移植完毕,没有测试使用
2、代码空间编译优化,零等待区域空间已满,而应用层代码已全部挪移到非零等待区域中,但还是会增加零等待区的空间占用。 待优化
2025-12-10 14:06:45 +08:00

122 lines
5.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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 <stdint.h>
#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_ */