Files
CHJ/user/MCU/lhl_flash.h
2026-03-20 21:19:04 +08:00

90 lines
4.5 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.

#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