@@ -94,23 +94,16 @@ static inline uint32_t get_flash_end(void) {
94
94
#define FLASH_BASE_ADDRESS ((uint32_t)(FLASH_BASE + (FLASH_PAGE_NUMBER * FLASH_PAGE_SIZE)))
95
95
#endif
96
96
97
- static uint8_t tmpEE [E2END ] = {0 };
98
-
99
- void get_data_from_flash (void );
100
- void set_data_to_flash (void );
97
+ static uint8_t eeprom_buffer [E2END ] = {0 };
101
98
102
99
/**
103
- * @brief Function read a byte from eeprom
100
+ * @brief Function reads a byte from emulated eeprom (flash)
104
101
* @param pos : address to read
105
102
* @retval byte : data read from eeprom
106
103
*/
107
104
uint8_t eeprom_read_byte (const uint16_t pos ) {
108
- uint8_t byte = 0 ;
109
-
110
- get_data_from_flash ();
111
- byte = tmpEE [pos ];
112
-
113
- return byte ;
105
+ eeprom_buffer_fill ();
106
+ return eeprom_buffered_read_byte (pos );
114
107
}
115
108
116
109
/**
@@ -120,26 +113,44 @@ uint8_t eeprom_read_byte(const uint16_t pos) {
120
113
* @retval none
121
114
*/
122
115
void eeprom_write_byte (uint16_t pos , uint8_t value ) {
123
- tmpEE [ pos ] = value ;
124
- set_data_to_flash ();
116
+ eeprom_buffered_write_byte ( pos , value ) ;
117
+ eeprom_buffer_flush ();
125
118
}
126
119
127
120
/**
128
- * @brief Function reads a byte from emulated eeprom (flash)
121
+ * @brief Function reads a byte from the eeprom buffer
122
+ * @param pos : address to read
123
+ * @retval byte : data read from eeprom
124
+ */
125
+ uint8_t eeprom_buffered_read_byte (const uint16_t pos ) {
126
+ return eeprom_buffer [pos ];
127
+ }
128
+
129
+ /**
130
+ * @brief Function writes a byte to the eeprom buffer
131
+ * @param pos : address to write
132
+ * @param value : value to write
133
+ * @retval none
134
+ */
135
+ void eeprom_buffered_write_byte (uint16_t pos , uint8_t value ) {
136
+ eeprom_buffer [pos ] = value ;
137
+ }
138
+
139
+ /**
140
+ * @brief This function copies the data from flash into the buffer
129
141
* @param none
130
142
* @retval none
131
143
*/
132
- void get_data_from_flash (void ) {
133
- memcpy (tmpEE , (uint8_t * )(FLASH_BASE_ADDRESS ), E2END );
144
+ void eeprom_buffer_fill (void ) {
145
+ memcpy (eeprom_buffer , (uint8_t * )(FLASH_BASE_ADDRESS ), E2END );
134
146
}
135
147
136
148
/**
137
- * @brief The function write into the flash.
149
+ * @brief This function writes the buffer content into the flash
138
150
* @param none
139
151
* @retval none
140
152
*/
141
- void set_data_to_flash (void ) {
142
- /* Copy in flash */
153
+ void eeprom_buffer_flush (void ) {
143
154
FLASH_EraseInitTypeDef EraseInitStruct ;
144
155
uint32_t offset = 0 ;
145
156
uint32_t address = FLASH_BASE_ADDRESS ;
@@ -183,12 +194,12 @@ void set_data_to_flash(void) {
183
194
if (HAL_FLASHEx_Erase (& EraseInitStruct , & pageError ) == HAL_OK ) {
184
195
while (address < address_end ) {
185
196
#if defined(STM32L0xx ) || defined(STM32L1xx )
186
- memcpy (& data , tmpEE + offset , sizeof (uint32_t ));
197
+ memcpy (& data , eeprom_buffer + offset , sizeof (uint32_t ));
187
198
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_WORD , address , data ) == HAL_OK ) {
188
199
address += 4 ;
189
200
offset += 4 ;
190
201
#else
191
- data = * ((uint64_t * )(((uint8_t * )tmpEE + offset )));
202
+ data = * ((uint64_t * )(((uint8_t * )eeprom_buffer + offset )));
192
203
193
204
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_DOUBLEWORD , address , data ) == HAL_OK ) {
194
205
address += 8 ;
@@ -215,7 +226,7 @@ void set_data_to_flash(void) {
215
226
216
227
if (HAL_FLASHEx_Erase (& EraseInitStruct , & SectorError ) == HAL_OK ) {
217
228
while (address < address_end ) {
218
- memcpy (& data , tmpEE + offset , sizeof (uint32_t ));
229
+ memcpy (& data , eeprom_buffer + offset , sizeof (uint32_t ));
219
230
if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_WORD , address , data ) == HAL_OK ) {
220
231
address += 4 ;
221
232
offset += 4 ;
0 commit comments