HPM SDK
HPMicro Software Development Kit
eeprom_emulation.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023-2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef _EEPROM_EMULATION_H
9 #define _EEPROM_EMULATION_H
10 
11 #include <stdint.h>
12 #include "user_config.h"
13 #include "hpm_nor_flash.h"
14 #include "hpm_common.h"
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 #define E2P_DEBUG_LEVEL_TRACE (0)
21 #define E2P_DEBUG_LEVEL_INFO (1)
22 #define E2P_DEBUG_LEVEL_WARN (2)
23 #define E2P_DEBUG_LEVEL_ERROR (3)
24 
25 #ifndef E2P_DEBUG_TRACE
26 # if E2P_DEBUG_LEVEL <= E2P_DEBUG_LEVEL_TRACE
27 # define E2P_TRACE(fmt, ...) printf("%s: %d: debug: "fmt"%s\n", __func__, __LINE__, __VA_ARGS__)
28 # define e2p_trace(...) E2P_TRACE(__VA_ARGS__, "")
29 # else
30 # define e2p_trace(...)
31 # endif
32 #endif
33 
34 #ifndef E2P_DEBUG_INFO
35 # if E2P_DEBUG_LEVEL <= E2P_DEBUG_LEVEL_INFO
36 # define E2P_INFO(fmt, ...) printf(""fmt"%s\n", __VA_ARGS__)
37 # define e2p_info(...) E2P_INFO(__VA_ARGS__, "")
38 # else
39 # define e2p_info(...)
40 # endif
41 #endif
42 
43 #ifndef E2P_DEBUG_WARN
44 # if E2P_DEBUG_LEVEL <= E2P_DEBUG_LEVEL_WARN
45 # define E2P_WARN(fmt, ...) printf(""fmt"%s\n", __VA_ARGS__)
46 # define e2p_warn(...) E2P_WARN(__VA_ARGS__, "")
47 # else
48 # define e2p_warn(...)
49 # endif
50 #endif
51 
52 #ifndef E2P_DEBUG_ERROR
53 # if E2P_DEBUG_LEVEL <= E2P_DEBUG_LEVEL_ERROR
54 # define E2P_ERR(fmt, ...) printf(""fmt"%s\n", __VA_ARGS__)
55 # define e2p_err(...) E2P_ERR(__VA_ARGS__, "")
56 # else
57 # define e2p_err(...)
58 # endif
59 #endif
60 
61 #define E2P_MAX_VAR_CNT (100)
62 #ifdef EEPROM_MAX_VAR_CNT
63 #undef E2P_MAX_VAR_CNT
64 #define E2P_MAX_VAR_CNT EEPROM_MAX_VAR_CNT
65 #endif
66 
67 enum {
73 };
74 
75 typedef enum {
76  e2p_invalid = 0xCCCC,
77  e2p_valid = 0xEEEE,
78  e2p_earsed = 0xFFFF,
80 
81 enum {
89 };
90 
91 typedef struct {
92  uint32_t version;
93  uint32_t magic;
94  uint32_t state;
95 } e2p_header;
96 
97 #pragma pack(push, 1)
98 typedef struct {
99  uint32_t block_id;
100  uint32_t data_addr;
101  uint16_t length;
102  uint16_t valid_state;
103  uint32_t crc;
104 } e2p_block;
105 #pragma pack(pop)
106 
107 typedef struct {
108  uint32_t start_addr;
109  uint32_t sector_cnt;
110  uint16_t erase_size;
111  uint32_t version;
112 
113  uint32_t (*flash_read)(uint8_t *buf, uint32_t addr, uint32_t size);
114  uint32_t (*flash_write)(uint8_t *buf, uint32_t addr, uint32_t size);
115  void (*flash_erase)(uint32_t start_addr, uint32_t size);
116 } e2p_config_t;
117 
118 typedef struct {
121 
122  uint32_t p_data;
123  uint32_t p_info;
124  uint32_t remain_size;
125 } e2p_t;
126 
127 #define E2P_MAGIC_ID (0x48504D43) /*'H' 'P' 'M' 'C'*/
128 
129 #define E2P_VALID_STATE (0xFFFFFFF0)
130 #define E2P_EARSED_ID (0xFFFFFFFF)
131 #define E2P_EARSED_VAR (0xFF)
132 
133 #define E2P_FLUSH_TRY (0)
134 #define E2P_FLUSH_BEGIN (1)
135 #define E2P_CRITICAL_ENTER() e2p_enter_critical()
136 #define E2P_CRITICAL_EXIT() e2p_exit_critical()
137 
138 void e2p_enter_critical(void);
139 void e2p_exit_critical(void);
140 
148 
155 hpm_stat_t e2p_flush(uint8_t flag);
156 
165 hpm_stat_t e2p_write(uint32_t block_id, uint16_t length, uint8_t *data);
166 
175 hpm_stat_t e2p_read(uint32_t block_id, uint16_t length, uint8_t *data);
176 
183 uint32_t e2p_generate_id(const char *name);
184 
188 void e2p_clear(void);
189 
193 void e2p_show_info(void);
194 
195 /*
196  e2p_t demo = {
197  .config.start_addr = 0x80080000,
198  .config.erase_size = 4096,
199  .config.sector_cnt = 128,
200  .config.version = 0x4553,
201  .config.flash_read = flash_read,
202  .config.flash_write = flash_write,
203  .config.flash_erase = flash_erase,
204  };
205 
206 
207  int main(void)
208  {
209  e2p_config(&demo);
210 
211 
212  ...
213  ...
214  }
215 
216 */
217 
218 #ifdef __cplusplus
219 }
220 #endif
221 
222 #endif
e2p_valid_state
Definition: eeprom_emulation.h:75
@ e2p_invalid
Definition: eeprom_emulation.h:76
@ e2p_valid
Definition: eeprom_emulation.h:77
@ e2p_earsed
Definition: eeprom_emulation.h:78
@ E2P_ERROR_BAD_ADDR
Definition: eeprom_emulation.h:87
@ E2P_ERROR_MUL_VAR
Definition: eeprom_emulation.h:88
@ E2P_STATUS_OK
Definition: eeprom_emulation.h:82
@ E2P_ERROR_INIT_ERR
Definition: eeprom_emulation.h:85
@ E2P_ERROR_NO_MEM
Definition: eeprom_emulation.h:84
@ E2P_ERROR
Definition: eeprom_emulation.h:83
@ E2P_ERROR_BAD_ID
Definition: eeprom_emulation.h:86
hpm_stat_t e2p_read(uint32_t block_id, uint16_t length, uint8_t *data)
eeprom emulation read
Definition: eeprom_emulation.c:466
void e2p_clear(void)
format whole area, 0xFF
Definition: eeprom_emulation.c:489
uint32_t e2p_generate_id(const char *name)
generate custom id
Definition: eeprom_emulation.c:499
hpm_stat_t e2p_flush(uint8_t flag)
eeprom emulation flush whole area, remove redundancy
Definition: eeprom_emulation.c:377
@ e2p_state_valid
Definition: eeprom_emulation.h:68
@ e2p_state_start
Definition: eeprom_emulation.h:71
@ e2p_state_write
Definition: eeprom_emulation.h:70
@ e2p_state_finish
Definition: eeprom_emulation.h:69
@ e2p_state_invalid
Definition: eeprom_emulation.h:72
void e2p_enter_critical(void)
Definition: hpm_nor_flash.c:13
void e2p_show_info(void)
show e2p instance info include config info and store info
Definition: eeprom_emulation.c:505
hpm_stat_t e2p_config(e2p_t *e2p)
eeprom emulation config
Definition: eeprom_emulation.c:316
void e2p_exit_critical(void)
Definition: hpm_nor_flash.c:18
hpm_stat_t e2p_write(uint32_t block_id, uint16_t length, uint8_t *data)
eeprom emulation write
Definition: eeprom_emulation.c:452
uint32_t hpm_stat_t
Definition: hpm_common.h:123
static void size
Definition: hpm_math.h:6899
Definition: eeprom_emulation.h:98
uint32_t block_id
Definition: eeprom_emulation.h:99
uint32_t crc
Definition: eeprom_emulation.h:103
uint16_t length
Definition: eeprom_emulation.h:101
uint16_t valid_state
Definition: eeprom_emulation.h:102
uint32_t data_addr
Definition: eeprom_emulation.h:100
Definition: eeprom_emulation.h:107
uint16_t erase_size
Definition: eeprom_emulation.h:110
uint32_t start_addr
Definition: eeprom_emulation.h:108
uint32_t sector_cnt
Definition: eeprom_emulation.h:109
uint32_t version
Definition: eeprom_emulation.h:111
Definition: eeprom_emulation.h:91
uint32_t version
Definition: eeprom_emulation.h:92
uint32_t state
Definition: eeprom_emulation.h:94
uint32_t magic
Definition: eeprom_emulation.h:93
Definition: eeprom_emulation.h:118
uint32_t remain_size
Definition: eeprom_emulation.h:124
uint32_t p_data
Definition: eeprom_emulation.h:122
uint32_t p_info
Definition: eeprom_emulation.h:123
nor_flash_config_t nor_config
Definition: eeprom_emulation.h:120
e2p_config_t config
Definition: eeprom_emulation.h:119
Definition: hpm_nor_flash.h:27