#ifndef __LHL_FLASH_H__ #define __LHL_FLASH_H__ //FLASH地址 #define FLASH_PAGE_SIZE_MAX FLASH_PAGE_SIZE //每页最大字节 4096 #define FLASH_PAGE_MAXZISE 30 //最大页数 120K 共30页(0-29页) #define FLASH_PAGE_BYTE_SIZE FLASH_PAGE_SIZE_MAX //当前需要一页大小,实际就用一整页byte #define CORRECT_PAGE_NUM 4 //校准数据占用页数 #define CORRECT_DATA_PAGE (FLASH_PAGE_MAXZISE - CORRECT_PAGE_NUM-1)//校准数据页起始页 //FLASH存储页码 #define APP_PAGE 0 //程序页 默认值,从0X8000000开始 #define VENDER_PARAMS_PAGE 16 //厂家数据页 #define USER_PARAMS_PAGE 17 //用户数据页 #define USER_DCOEF_TAG_PAGE 18 //二次修正标签页 //FLASH实际地址0x08000000开始 #define VENDER_PARAMS_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*VENDER_PARAMS_PAGE))//厂家数据存储位置 #define USER_PARAMS_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*USER_PARAMS_PAGE)) //用户参数存储位置 #define USER_DCOEF_TAG_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*USER_DCOEF_TAG_PAGE))//二次修正标签页 #define CORRECT_DATA_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*CORRECT_DATA_PAGE)) //校准参数存储位置 #define CORRECT_DATA_SIZE (CORRECT_PAGE_NUM* FLASH_PAGE_SIZE) //校准数据最大长度 #define CORRECT_DATA_MID (CORRECT_DATA_SIZE / 2) //校准数据中间位置 #define CALIB_INDEX_INTEERVAL (CALIB_REAL_SIZE / 3) //数据索引 #define CALIB_MAX_INDEX (CALIB_SIZE / 3 - 2*CALIB_COMP_FAC) //最大内码 #define CALIB_MIN_INDEX (CALIB_COMP_FAC*3) //3倍压缩率内码截至 #define CALIB_REAL_SIZE (CORRECT_PAGE_NUM*FLASH_PAGE_SIZE) //实际数据大小 #define CALIB_SIZE CALIB_REAL_SIZE*CALIB_COMP_FAC //数据总长 #define CALIB_COMP_FAC 6 //压缩比,支持2,4,6,8对应内码8192,16384,24576,32768 #define CALIB_WIDTH 64 //固定宽度64字节 由于Flash每次最少写入4字节,对该值应当有限制 #define CALIB_DEPTH (CALIB_SIZE/CALIB_WIDTH) //768 //帧数 #define CALIB_DATA_LEN (CALIB_DEPTH/CALIB_COMP_FAC) //128 //压缩后帧数,实际传输的帧数 #define CORRECT2_PAGE_NUM 4 //校准数据占用页数 #define CORRECT2_DATA_ADDR CORRECT_DATA_ADDR-(5*FLASH_PAGE_SIZE)//校准参数存储位置 extern u8 munWriteParams;//写寄存器参数标志位 可行的参数如下: //写寄存器参数标志 #define WP_NOT 0x00 //无写入参数 #define WP_USER 0x01 //写用户寄存器标志 #define WP_VENDER 0x02 //写厂家寄存器标志 #define WP_DEF 0x03 //恢复出厂默认值 #define WP_DCOEF_TAG 0x04 //写二次修正及tag #define WP_CORRECT 0x05 //写校准标志 extern u8 mucSaveParams;//Flash写状态标志位 可行的参数如下: //Flash状态标志 #define PARAMS_COMPL 0x00 //写入完成 #define PARAMS_READY 0xAA //准备写入 #define PARAMS_READY_AX 0xBB //准备写入 #define PARAMS_ING 0x55 //写入中 extern volatile u8 * const USER_PARAMS ; extern volatile u8 * const VENDER_PARAMS ; extern volatile u8 * const CORRECT_DATA ; extern volatile u8 * const CORRECT2_DATA ; void FLASH_Erase_Data_Page(u8 UserPage) ;//__attribute__((noinline));// 添加禁止内联属性 void FLASH_Write_Data_Page(u8 UserPage, void *pBuffer, u32 byteSize) ;//__attribute__((noinline));// 添加禁止内联属性 void ReadParameterFromFlash( void *value,u16 offset, u8 size ,u8 UserPage ); void FLASH_Write_Calib_Data_ToFlash(u16 FrameX, u8 *pBuffer); void FLASH_Write_Calib2_Data_ToFlash(u16 FrameN, u8 *pBuffer ); void ReadCalibDataFromFlash(u32 frameN , u8 *data ,u16 size ) ;//__attribute__((noinline));// 添加禁止内联属性 void ReadCalib2DataFromFlash(u32 frameN , u8 *data ,u16 size ); void ReadDataFromFlash(u32 offset , u8 *data ,u16 size ); void SaveSysParams(void); /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ #endif