bs_bcu_app/bsp/bsp_eeprom.h

135 lines
3.8 KiB
C
Raw Permalink Normal View History

2024-11-07 17:24:19 +08:00
#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