90 lines
4.5 KiB
C
90 lines
4.5 KiB
C
#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
|
||
|
||
|