135 lines
3.8 KiB
C
135 lines
3.8 KiB
C
#ifndef _BSP_EEPROM_H_
|
|
#define _BSP_EEPROM_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "drv_flash.h"
|
|
|
|
|
|
/*****************************MCU eeprom配置*****************************/
|
|
#define BSP_EEPROM_REWRITE_CNT 3
|
|
|
|
#define BSP_EEPROM_AREA_BIT_MASK 0x03
|
|
#define BSP_EEPROM_AREA_NONE 0x00
|
|
#define BSP_EEPROM_AREA_DYNAMIC 0x01
|
|
#define BSP_EEPROM_AREA_STATIC 0x02
|
|
|
|
#define BSP_EEPROM_CHECK_MAX_MIN_BIT_MASK 0x04
|
|
#define BSP_EEPROM_CHECK_MAX_MIN_OFF 0x00
|
|
#define BSP_EEPROM_CHECK_MAX_MIN_ON 0x04
|
|
|
|
#define BSP_EEPROM_CHECK_EQUAL_BIT_MASK 0x08
|
|
#define BSP_EEPROM_CHECK_EQUAL_OFF 0x00
|
|
#define BSP_EEPROM_CHECK_EQUAL_ON 0x08
|
|
|
|
#define NONE_CHECK (BSP_EEPROM_AREA_NONE | BSP_EEPROM_CHECK_MAX_MIN_ON)
|
|
#define STATIC_CHECK (BSP_EEPROM_AREA_STATIC | BSP_EEPROM_CHECK_MAX_MIN_ON | BSP_EEPROM_CHECK_EQUAL_ON)
|
|
#define STATIC_UNCHECK_MAX_MIN (BSP_EEPROM_AREA_STATIC | BSP_EEPROM_CHECK_MAX_MIN_OFF | BSP_EEPROM_CHECK_EQUAL_ON)
|
|
#define STATIC_UNCHECK_ALL (BSP_EEPROM_AREA_STATIC | BSP_EEPROM_CHECK_MAX_MIN_OFF | BSP_EEPROM_CHECK_EQUAL_OFF)
|
|
#define DAYNMIC_CHECK (BSP_EEPROM_AREA_DYNAMIC | BSP_EEPROM_CHECK_MAX_MIN_ON | BSP_EEPROM_CHECK_EQUAL_ON)
|
|
#define DAYNMIC_UNCHECK_MAX_MIN (BSP_EEPROM_AREA_DYNAMIC | BSP_EEPROM_CHECK_MAX_MIN_OFF | BSP_EEPROM_CHECK_EQUAL_ON)
|
|
#define DAYNMIC_UNCHECK_ALL (BSP_EEPROM_AREA_DYNAMIC | BSP_EEPROM_CHECK_MAX_MIN_OFF| BSP_EEPROM_CHECK_EQUAL_OFF)
|
|
|
|
#define PARAM_CONVERT(v, fac, off) (((v)+(off))*(fac))
|
|
#define PARAM_COMBINE(high, low) (((uint16_t)((uint16_t)high) << 8) | ((uint8_t)(low)))
|
|
|
|
typedef enum
|
|
{
|
|
kEepromDataType_Low = 0,
|
|
kEepromDataType_High = 1,
|
|
kEepromDataType_Full = 2,
|
|
kEepromDataType_Double = 4,
|
|
kEepromDataType_End,
|
|
}EepromDataType;
|
|
|
|
|
|
typedef union
|
|
{
|
|
uint32_t value;
|
|
struct
|
|
{
|
|
uint16_t value;
|
|
uint16_t idx;
|
|
}item;
|
|
}EepromPoData;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t property;
|
|
uint16_t config_default;
|
|
uint16_t config_min;
|
|
uint16_t config_max;
|
|
}EepromDataFormat;
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t type;
|
|
uint8_t erase_page_num;
|
|
uint16_t area_size;
|
|
uint16_t data_cnt;
|
|
uint32_t main_addr;
|
|
uint32_t sub_addr;
|
|
uint32_t write_addr;
|
|
}AreaItem;
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t backup_area_page_num;
|
|
uint16_t total_data_cnt;
|
|
uint32_t check_addr_offset;
|
|
uint32_t backup_area_addr;
|
|
uint16_t * data_buf;
|
|
const EepromDataFormat * format;
|
|
FlashItem *flash;
|
|
|
|
AreaItem static_area;
|
|
AreaItem dynamic_area;
|
|
}EEpromItem;
|
|
|
|
|
|
#define EEPROM_STATIC_INIT(_name, _format, _len, _flash) \
|
|
uint16_t _name##_buf[_len]; \
|
|
EEpromItem _name = \
|
|
{ \
|
|
0, \
|
|
(_len), \
|
|
0, \
|
|
0, \
|
|
_name##_buf, \
|
|
_format, \
|
|
_flash, \
|
|
}
|
|
|
|
#define EEPROM_STATIC_INIT_CCM(_name, _format, _len, _flash) \
|
|
uint16_t _name##_buf[_len] __attribute__((section (".CCM_RAM"))); \
|
|
EEpromItem _name = \
|
|
{ \
|
|
0, \
|
|
(_len), \
|
|
0, \
|
|
0, \
|
|
_name##_buf, \
|
|
_format, \
|
|
_flash, \
|
|
}
|
|
|
|
|
|
bool bsp_eeprom_init(EEpromItem *item, uint8_t backup_page_num, uint8_t static_page_num, uint8_t dynamic_page_num, uint32_t start_addr);
|
|
bool bsp_eeprom_set_data(uint16_t idx, uint32_t value, EepromDataType type);
|
|
bool bsp_eeprom_save_data(uint16_t idx, uint32_t value, EepromDataType type);
|
|
void bsp_eeprom_power_off_save_data(EepromPoData *data, uint32_t len);
|
|
bool bsp_eeprom_backup_static_area(void);
|
|
bool bsp_eeprom_recovery_static_area(EEpromItem *item, uint16_t except_idx);
|
|
uint32_t bsp_eeprom_get_data(uint16_t idx, EepromDataType type);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|