2025-04-26 16:03:23 +08:00

227 lines
9.7 KiB
C
Raw Permalink 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.

/** ##########################################################################
** 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************************************/