修改事项: 1、新增TFTP IAP升级功能,只是代码移植完毕,没有测试使用 2、代码空间编译优化,零等待区域空间已满,而应用层代码已全部挪移到非零等待区域中,但还是会增加零等待区的空间占用。 待优化
122 lines
5.2 KiB
C
122 lines
5.2 KiB
C
/*
|
||
* 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_ */
|