LL01/code_app_out/Source/bsp/eeprom_cfg.h

227 lines
9.7 KiB
C
Raw Normal View History

2025-04-26 16:03:23 +08:00
/** ##########################################################################
** Filename :
** Project :
** Module :
** Processor :
** Version :
** Compiler :
** Date/Time :
** Abstract :
** Contents :
** Note :
**
** (c) Copyright dmdz Co.,Ltd
** --------------------------------------------------------------------------
** R E V I S I O N H I S T O R Y
** --------------------------------------------------------------------------
** Date Ver Author Description
** -20230602- --V1.0-- --mingyea--- ----
** #########################################################################*/
#ifndef EEPROM_CFG_H__
#define EEPROM_CFG_H__
/*---------------------------------------------------------------------------
- I N C L U D E F I L E S
----------------------------------------------------------------------------*/
#include "common_types.h"
#include "boot_app_cfg.h"
/*---------------------------------------------------------------------------
- D E F I N E S / M A C R O S
----------------------------------------------------------------------------*/
#define NVM_EEPROM_EXT_EN //开启本模块
#define RAM_EEPROM_OP_RAM_ADDR RAM_NO_INIT_ADDR
#define RAM_EEPROM_DATA_RAM_ADDR RAM_WDOG_ADDR
//#define assert_param DEVICE_ASSERT
#define EEPROM_FLASH_CAN_REWRITE_TO_BIT_ZERO //芯片支持flash再次把bit=1写成bit=0--复旦微支持,杰发不支持
#define FLASH_ADDRS_ALIGN 4
#define FLASH_ADDRS_ALIGN_RES_MASK 0x03u //0xFFFFFFFCu
//以下是公共配置
#define EFLASH_PAGE_SIEZ (u16)0x0800 //真正的扇区大小,这里叫做小页的大小
#define EEPROM_VIRT_ADDRESS_OFFSET 1u //地址的偏移因为0000是标志要加1当做0001来用 -- 逻辑地址
#define EEPROM_EXT_TASK_TIME_UNIT 1u
#define EEPROM_EXT_TIMEOUT (5000/EEPROM_EXT_TASK_TIME_UNIT)
#define EEPROM_EXT_UN_WRITE_INIT ((u32)0xFFFFFFFF) /* 沒有該數據時,讀取回來的默認值*/
#define EEPROM_READ_U32_NUM 4u //每次讀取幾個U32----实际含义是每次读取U8的个数
#define EEPROM_FLAG_NOT_FIRST_RESET 0x57263762u //RAM区分是否初次上电--不能亂改要和boot程序保持一致测试完都改回 0x57263762u
#define EEPROM_FLAG_FIRST_RESET_CLEAR 0x00000000u //清除--RAM区分是否初次上电
#define EFLASH_READ_NOT_VALID_ADDR_CUR 0x0u //0xffffffffu
#define EEPROM_OPTIMIZE_SEARCH_FAST //优化查找的速度--直接定位到当前地址
#ifdef EEPROM_OPTIMIZE_SEARCH_FAST
#define EEPROM_EXT_DATA_MAX_OFFSET 10u //多偏移几个来查找,防止找漏了
#endif
////以下是按不同片区划分,而不同
#define EEPROM_AREA_ID_0 0u
#define EEPROM_AREA_ID_1 1u
#define EEPROM_AREA_ID_COM EEPROM_AREA_ID_0 //片区1 只在app用到的储存
#define EEPROM_AREA_ID_APP EEPROM_AREA_ID_1 //片区2 在app和boot都用到的储存
#define EEPROM_AREA_TOTAL 2u //片区的划分,根据用途不同
#define EEPROM_AREA_TOTAL_FOR_RAM 2u //片区的划分,根据用途不同
///////和应用相关---片区1
#define EEPROM_AREA0_EFLASH_PAGE_NUM 1u //每个大页,内部有多少个小页
#define EFLASH_AREA0_MASS_PAGE_SIZE (u16)((u16)EFLASH_PAGE_SIEZ*EEPROM_AREA0_EFLASH_PAGE_NUM) /* Page size = 8KByte 大的页,一共有两大页,用于切换使用*/
/* EEPROM start address in Flash */
#define EFLASH_AREA0_START_ADDRESS ((u32)0x0001C000) /* EEPROM emulation start address: after 64KByte of used Flash memory */
/* Pages 0 and 1 base and end addresses */
#define EFLASH_AREA0_PAGE0_BASE_ADDRESS ((u32)(EFLASH_AREA0_START_ADDRESS + 0x0000u))
#define EFLASH_AREA0_PAGE0_END_ADDRESS ((u32)(EFLASH_AREA0_START_ADDRESS + (EFLASH_AREA0_MASS_PAGE_SIZE - 1u)))
#define EFLASH_AREA0_PAGE1_BASE_ADDRESS ((u32)(EFLASH_AREA0_START_ADDRESS + EFLASH_AREA0_MASS_PAGE_SIZE))
#define EFLASH_AREA0_PAGE1_END_ADDRESS ((u32)(EFLASH_AREA0_START_ADDRESS + (2u * EFLASH_AREA0_MASS_PAGE_SIZE - 1u)))
/* Variables' number */
#define EEPROM_AREA0_ADDR_TOTAL_U32 (((u16)EFLASH_AREA0_MASS_PAGE_SIZE/2u/4u)-1u) //一个大扇区,转换成多少个字,
#define EEPROM_AREA0_ADDR_TOTAL_U8 (EEPROM_AREA0_ADDR_TOTAL_U32*4u)
#define EEPROM_AREA0_RAM_ADDR_START 0x20006000u //相映射的 RAM地址要和icf上定义的相一致
#define EEPROM_AREA0_RAM_ADDR_END (EEPROM_AREA0_RAM_ADDR_START+EEPROM_AREA0_ADDR_TOTAL_U8-1u) //0x002FFFu 最後一頁缺少4字節,要減少 47FB
#define EEPROM_AREA0_RAM_ADDR_START_OFFSET 0u //
///////和应用相关---片区2
#define EEPROM_AREA1_EFLASH_PAGE_NUM 3u //每个大页,内部有多少个小页
#define EFLASH_AREA1_MASS_PAGE_SIZE (u16)((u16)EFLASH_PAGE_SIEZ*EEPROM_AREA1_EFLASH_PAGE_NUM) /* Page size = 8KByte 大的页,一共有两大页,用于切换使用*/
/* EEPROM start address in Flash */
#define EFLASH_AREA1_START_ADDRESS ((u32)EFLASH_AREA0_PAGE1_END_ADDRESS+1u) /* EEPROM emulation start address: after 64KByte of used Flash memory */
/* Pages 0 and 1 base and end addresses */
#define EFLASH_AREA1_PAGE0_BASE_ADDRESS ((u32)(EFLASH_AREA1_START_ADDRESS + 0x0000u))
#define EFLASH_AREA1_PAGE0_END_ADDRESS ((u32)(EFLASH_AREA1_START_ADDRESS + (EFLASH_AREA1_MASS_PAGE_SIZE - 1u)))
#define EFLASH_AREA1_PAGE1_BASE_ADDRESS ((u32)(EFLASH_AREA1_START_ADDRESS + EFLASH_AREA1_MASS_PAGE_SIZE))
#define EFLASH_AREA1_PAGE1_END_ADDRESS ((u32)(EFLASH_AREA1_START_ADDRESS + (2u * EFLASH_AREA1_MASS_PAGE_SIZE - 1u)))
/* Variables' number */
#define EEPROM_AREA1_ADDR_TOTAL_U32 (((u16)EFLASH_AREA1_MASS_PAGE_SIZE/2u/4u)-1u) //一个大扇区,转换成多少个字,
#define EEPROM_AREA1_ADDR_TOTAL_U8 (EEPROM_AREA1_ADDR_TOTAL_U32*4u)
#define EEPROM_AREA1_RAM_ADDR_START 0x20006400u //(EEPROM_AREA0_RAM_ADDR_END+1u) //
#define EEPROM_AREA1_RAM_ADDR_END (EEPROM_AREA1_RAM_ADDR_START+EEPROM_AREA1_ADDR_TOTAL_U8-1u) //0x002FFFu 最後一頁缺少4字節,要減少 47FB
#define EEPROM_AREA1_RAM_ADDR_START_OFFSET 0u //
#if EEPROM_AREA_TOTAL > 1u
#define EEPROM_AERA_END_ADDR (EFLASH_AREA1_PAGE1_END_ADDRESS+1u-4u)
#else
#define EEPROM_AERA_END_ADDR (EFLASH_AREA0_PAGE1_END_ADDRESS+1u-4u)
#endif
//总的
#define EEPROM_FLASH_ADDR_START EFLASH_AREA0_START_ADDRESS //总的eeprom的flash的起始地址
#define EEPROM_FLASH_ADDR_END 0x1FFFFu //总的eeprom的flash的结束地址--暂时没用到,先用 EEPROM_AERA_END_ADDR
////RAM总区间范围
#define EEPROM_RAM_ADDR_START 0x20006000u //相映射的 RAM地址要和icf上定义的相一致
#define EEPROM_RAM_ADDR_END (0x20006FFF-4u)//(0x20006FFF-4u*EEPROM_AREA_TOTAL_FOR_RAM) //见icf---注意这里减多少和EEPROM_AREA1_RAM_ADDR_START有关
#define EEPROM_RAM_MAX_U8 ((EFLASH_AREA0_MASS_PAGE_SIZE+EFLASH_AREA1_MASS_PAGE_SIZE)/4u)
#define EEPROM_AREAx_EFLASH_PAGE_NUM(x) g_eeprom_user_info[x].sector_num
#define EFLASH_AREAx_MASS_PAGE_SIZE(x) g_eeprom_user_info[x].mass_page_size_byte
#define EEPROM_AREAx_ADDR_TOTAL_U32(x) g_eeprom_user_info[x].mass_page_addr_total_u32
#define EEPROM_AREAx_ADDR_TOTAL_U8(x) g_eeprom_user_info[x].mass_page_addr_total_u8
#define EEPROM_AREAx_RAM_ADDR_START(x) g_eeprom_user_info[x].ram_start_addr
#define EEPROM_AREAx_RAM_ADDR_END(x) g_eeprom_user_info[x].ram_end_addr
#define EFLASH_AREAx_PAGE0_BASE_ADDRESS(x) g_eeprom_user_info[x].eflash_page0_start_addr
#define EFLASH_AREAx_PAGE0_END_ADDRESS(x) g_eeprom_user_info[x].eflash_page0_end_addr
#define EFLASH_AREAx_PAGE1_BASE_ADDRESS(x) g_eeprom_user_info[x].eflash_page1_start_addr
#define EFLASH_AREAx_PAGE1_END_ADDRESS(x) g_eeprom_user_info[x].eflash_page1_end_addr
#ifdef NVM_EEPROM_EXT_EN
#define EEPROM_EXT_STATE_MACHILE_ENABLE //用状态机方式,实现
#define EEPROM_EXT_NOT_TRANS_MORE_WHEN_FULL //写满时,不要重复的擦写
#endif
#define EEPROM_EXT_JUDGE_PAGE_ADDR //为了安全,在最底层,再加一次判断地址范围
//extern MEMORY_MAP_FLAG_NO_OPTIME MEMORY_MAP_RAM_EEPROM u8 g_ram_for_eeprom_data[EEPROM_RAM_MAX_U8];
#ifdef NVM_EEPROM_EXT_EN
//#define EEPROM_EXT_DEBUG_EN //变量跟踪
//#define EEPROM_EXT_DEBUG_IO_EN //io测试时间
//#define EEPROM_INPUT_TEST //修改RAM值用来测试
#endif
/*---------------------------------------------------------------------------
- T Y P E D E F I N I T I O N S
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
- G L O B A L V A R I A B L E S
- only configuration table allowed here,variables are not allowed!
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
- C O N S T A N T S
----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
- F U N C T I O N P R O T O T Y P E
----------------------------------------------------------------------------*/
#ifdef EEPROM_INPUT_TEST
//给外部接口--任务
void eeprom_ext_input_test(void);
#endif
#if 0
#define EEPROM_EXT_TEST_ON() TEST1_ON()
#define EEPROM_EXT_TEST_OFF() TEST1_OFF()
#define EEPROM_EXT_TEST1_ON() TEST1_ON()
#define EEPROM_EXT_TEST1_OFF() TEST1_OFF()
#define EEPROM_EXT_ERASE_TEST_ON() //TEST1_ON()
#define EEPROM_EXT_ERASE_TEST_OFF() //TEST1_OFF()
#else
#ifdef EEPROM_EXT_DEBUG_IO_EN
void EEPROM_EXT_TEST_ON(u8 id);
void EEPROM_EXT_TEST_OFF(u8 id);
#define EEPROM_EXT_TEST1_ON EEPROM_EXT_TEST_ON
#define EEPROM_EXT_TEST1_OFF EEPROM_EXT_TEST_OFF
#define EEPROM_EXT_ERASE_TEST_ON EEPROM_EXT_TEST_ON
#define EEPROM_EXT_ERASE_TEST_OFF EEPROM_EXT_TEST_OFF
#endif
void eeprom_test_task(void);
#endif
#endif /* __EEPROM_H */
/*******************************END OF FILE************************************/