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д<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#define App_Procedure_Ready 0x66 //APP<50><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
|||
|
|
#define App_Procedure_Not_Ready 0x44 //Appδ<CEB4><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
|||
|
|
|
|||
|
|
//MCU Flash Address range(0x0 -- 0x6FFFF) Size(448K)
|
|||
|
|
#define MCU_APP_Flash_Start_Addr 0x00007000 //MCU Flash<73><68>APP<50><50><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
|||
|
|
#define MCU_APP_Data_Start_Addr 0x00007000 //MCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
|||
|
|
#define MCU_APP_Data_End_Addr 0x00027DFF //MCU Flash APP<50><50><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
#define MCU_APP_Feature_Addr 0x00027E00 //MCU Flash <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
#define MCU_APP_Flash_End_Addr 0x00027FFF //MCU Flash<73><68>APP<50>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
|
|||
|
|
#define MCU_APP_Feature_PageAddr 0x00027000 //MCU APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ҳ<EFBFBD>ĵ<EFBFBD>ַ
|
|||
|
|
#define MCU_APP_Feature_PageOffset 0x00000E00 //MCU APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
|
#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 <20>豸<EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ<EFBFBD>̶<EFBFBD>Ϊ0x00070000<30><30><EFBFBD><EFBFBD>СΪ4096 <20><><EFBFBD><EFBFBD><EFBFBD>ɸĶ<C9B8>
|
|||
|
|
#define MCU_EEPROM_End_Addr 0x00078000
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* EEPROM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><CABD>
|
|||
|
|
* FLAG - 1Byte <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
|||
|
|
* LEN - 2Byte <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* CHECK - 1Byte <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>
|
|||
|
|
* DATA - nByte <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* */
|
|||
|
|
#define EEPROM_SVAE_FLAG 0xAE
|
|||
|
|
#define EEPROM_DATA_Size_Max 0x40 //Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ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
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
|
|||
|
|
* ע<EFBFBD>⣺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>risc-v<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ֽڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash/MCU Flash<EFBFBD>е<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD>嶨<EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD>ʹ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>
|
|||
|
|
* */
|
|||
|
|
typedef enum{
|
|||
|
|
Feature_Check = 0x00, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 512Byte <20><>CRCУ<43><D0A3> - 2Byte
|
|||
|
|
Feature_AppFlag = 0x02, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP<50><50>־λ - 1Byte
|
|||
|
|
Feature_AppStart = 0x03, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP<50><50>ʼ<EFBFBD><CABC>ַ - 4Byte
|
|||
|
|
Feature_AppEnd = 0x07, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ - 4Byte
|
|||
|
|
Feature_AppCrcSize = 0x0B, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP CRC<52>ij<EFBFBD><C4B3><EFBFBD> - 2Byte
|
|||
|
|
Feature_AppCrcLen = 0x0D, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP CRCУ<43><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С - 2Byte
|
|||
|
|
Feature_AppFlashCrc = 0x0F, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP CRC
|
|||
|
|
}FEATURE_E;
|
|||
|
|
|
|||
|
|
#define APP_Feature_CRC_Size 497
|
|||
|
|
|
|||
|
|
typedef struct{
|
|||
|
|
uint8_t app_flag; //APP <20><>־λ
|
|||
|
|
uint8_t app_crc[APP_Feature_CRC_Size]; //APP CRCУ<43><D0A3>ֵ
|
|||
|
|
|
|||
|
|
uint16_t app_crc_size; //APP CRCУ<43><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
|
|||
|
|
uint16_t app_crc_len; //APP CRCУ<43><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
uint16_t crc_check; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRCֵ - <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD>
|
|||
|
|
|
|||
|
|
uint32_t app_start_addr; //APP<50><50>ʼ<EFBFBD><CABC>ַ
|
|||
|
|
uint32_t app_end_addr; //APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
}G_SYS_FEATURE_T;
|
|||
|
|
|
|||
|
|
/*<2A><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU EEPROM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
typedef struct{
|
|||
|
|
|
|||
|
|
uint8_t dev_addr; //<2F>豸<EFBFBD><E8B1B8>ַ
|
|||
|
|
uint8_t dev_type; //<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
|
uint8_t dev_boot_ver; //<2F>豸Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
|||
|
|
uint8_t dev_app_ver; //<2F>豸APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
|||
|
|
uint8_t dev_name_len; //<2F>豸<EFBFBD><E8B1B8><EFBFBD>Ƶij<C6B5><C4B3><EFBFBD>
|
|||
|
|
uint8_t dev_name[EEPROM_DEV_NAME_Size]; //<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
}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_ */
|