227 lines
9.7 KiB
C
227 lines
9.7 KiB
C
/** ##########################################################################
|
||
** 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************************************/
|