@@ -42,8 +42,8 @@ extern "C" {
4242/* Be able to change FLASH_BANK_NUMBER to use if relevant */
4343#if !defined(FLASH_BANK_NUMBER ) && \
4444 (defined(STM32F0xx ) || defined(STM32F1xx ) || defined(STM32G4xx ) || \
45- defined(STM32H7xx ) || defined(STM32L1xx ) || defined( STM32L4xx ))
46- /* Fo STM32F0xx, FLASH_BANK_1 is not defined only FLASH_BANK1_END is defined */
45+ defined(STM32H7xx ) || defined(STM32L4xx ))
46+ /* For STM32F0xx, FLASH_BANK_1 is not defined only FLASH_BANK1_END is defined */
4747#if defined(STM32F0xx )
4848#define FLASH_BANK_1 1U
4949#endif
@@ -58,7 +58,7 @@ extern "C" {
5858#endif /* !FLASH_BANK_NUMBER */
5959
6060/* Be able to change FLASH_DATA_SECTOR to use if relevant */
61- #if defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32F7xx ) || \
61+ #if defined(STM32F2xx ) || defined(STM32F4xx ) || defined(STM32F7xx ) || \
6262 defined(STM32H7xx )
6363#if !defined(FLASH_DATA_SECTOR )
6464#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
@@ -77,8 +77,8 @@ extern "C" {
7777#endif /* !FLASH_PAGE_NUMBER */
7878
7979/* Be able to change FLASH_END to use */
80- #if !defined(FLASH_END ) && !defined( STM32L0xx )
81- #if defined (STM32F0xx ) || defined (STM32F1xx ) || defined( STM32L1xx )
80+ #if !defined(FLASH_END )
81+ #if defined (STM32F0xx ) || defined (STM32F1xx )
8282#if defined (FLASH_BANK2_END ) && (FLASH_BANK_NUMBER == FLASH_BANK_2 )
8383#define FLASH_END FLASH_BANK2_END
8484#elif defined (FLASH_BANK1_END ) && (FLASH_BANK_NUMBER == FLASH_BANK_1 )
@@ -117,6 +117,8 @@ static inline uint32_t get_flash_end(void)
117117#define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
118118#elif defined(EEPROM_RETRAM_MODE )
119119#define FLASH_END ((uint32_t)(EEPROM_RETRAM_START_ADDRESS + EEPROM_RETRAM_MODE_SIZE -1))
120+ #elif defined(DATA_EEPROM_END )
121+ #define FLASH_END DATA_EEPROM_END
120122#endif
121123#ifndef FLASH_END
122124#error "FLASH_END could not be defined"
@@ -130,9 +132,7 @@ static inline uint32_t get_flash_end(void)
130132 * in order to prevent overwritting
131133 * program data
132134 */
133- #if defined(STM32L0xx )
134- #define FLASH_BASE_ADDRESS ((uint32_t)(DATA_EEPROM_BASE))
135- #elif defined(EEPROM_RETRAM_MODE )
135+ #if defined(EEPROM_RETRAM_MODE )
136136#define FLASH_BASE_ADDRESS EEPROM_RETRAM_START_ADDRESS
137137#else
138138#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_END + 1) - FLASH_PAGE_SIZE))
@@ -142,7 +142,9 @@ static inline uint32_t get_flash_end(void)
142142#endif
143143#endif /* FLASH_BASE_ADDRESS */
144144
145+ #if !defined(DATA_EEPROM_BASE )
145146static uint8_t eeprom_buffer [E2END + 1 ] __attribute__((aligned (8 ))) = {0 };
147+ #endif
146148
147149/**
148150 * @brief Function reads a byte from emulated eeprom (flash)
@@ -151,8 +153,17 @@ static uint8_t eeprom_buffer[E2END + 1] __attribute__((aligned(8))) = {0};
151153 */
152154uint8_t eeprom_read_byte (const uint32_t pos )
153155{
156+ #if defined(DATA_EEPROM_BASE )
157+ __IO uint8_t data = 0 ;
158+ if (pos <= (DATA_EEPROM_END - DATA_EEPROM_BASE )) {
159+ /* with actual EEPROM, pos is a relative address */
160+ data = * (__IO uint8_t * )(DATA_EEPROM_BASE + pos );
161+ }
162+ return (uint8_t )data ;
163+ #else
154164 eeprom_buffer_fill ();
155165 return eeprom_buffered_read_byte (pos );
166+ #endif /* _EEPROM_BASE */
156167}
157168
158169/**
@@ -163,10 +174,22 @@ uint8_t eeprom_read_byte(const uint32_t pos)
163174 */
164175void eeprom_write_byte (uint32_t pos , uint8_t value )
165176{
177+ #if defined(DATA_EEPROM_BASE )
178+ /* with actual EEPROM, pos is a relative address */
179+ if (pos <= (DATA_EEPROM_END - DATA_EEPROM_BASE )) {
180+ if (HAL_FLASHEx_DATAEEPROM_Unlock () == HAL_OK ) {
181+ HAL_FLASHEx_DATAEEPROM_Program (FLASH_TYPEPROGRAMDATA_BYTE , (pos + DATA_EEPROM_BASE ), (uint32_t )value );
182+ HAL_FLASHEx_DATAEEPROM_Lock ();
183+ }
184+ }
185+ #else
166186 eeprom_buffered_write_byte (pos , value );
167187 eeprom_buffer_flush ();
188+ #endif /* _EEPROM_BASE */
168189}
169190
191+ #if !defined(DATA_EEPROM_BASE )
192+
170193/**
171194 * @brief Function reads a byte from the eeprom buffer
172195 * @param pos : address to read
@@ -224,8 +247,8 @@ void eeprom_buffer_flush(void)
224247 uint32_t address = FLASH_BASE_ADDRESS ;
225248 uint32_t address_end = FLASH_BASE_ADDRESS + E2END ;
226249#if defined (STM32F0xx ) || defined (STM32F1xx ) || defined (STM32F3xx ) || \
227- defined (STM32G0xx ) || defined (STM32G4xx ) || defined ( STM32L0xx ) || \
228- defined (STM32L1xx ) || defined ( STM32L4xx ) || defined (STM32WBxx )
250+ defined (STM32G0xx ) || defined (STM32G4xx ) || \
251+ defined (STM32L4xx ) || defined (STM32WBxx )
229252 uint32_t pageError = 0 ;
230253 uint64_t data = 0 ;
231254
@@ -243,38 +266,20 @@ void eeprom_buffer_flush(void)
243266 EraseInitStruct .NbPages = 1 ;
244267
245268 if (HAL_FLASH_Unlock () == HAL_OK ) {
246- #if defined(STM32L0xx )
247- __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
248- FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_RDERR | \
249- FLASH_FLAG_FWWERR | FLASH_FLAG_NOTZEROERR );
250- #elif defined(STM32L1xx )
251- #if defined(FLASH_SR_RDERR )
252- __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
253- FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_RDERR );
254- #else
255- __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
256- FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR );
257- #endif
258- #elif defined (STM32G0xx ) || defined (STM32G4xx ) || defined (STM32L4xx ) || \
269+ #if defined (STM32G0xx ) || defined (STM32G4xx ) || defined (STM32L4xx ) || \
259270 defined (STM32WBxx )
260271 __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_ALL_ERRORS );
261272#else
262273 __HAL_FLASH_CLEAR_FLAG (FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR );
263274#endif
264275 if (HAL_FLASHEx_Erase (& EraseInitStruct , & pageError ) == HAL_OK ) {
265276 while (address <= address_end ) {
266- #if defined(STM32L0xx ) || defined(STM32L1xx )
267- memcpy (& data , eeprom_buffer + offset , sizeof (uint32_t ));
268- if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_WORD , address , data ) == HAL_OK ) {
269- address += 4 ;
270- offset += 4 ;
271- #else
277+
272278 data = * ((uint64_t * )((uint8_t * )eeprom_buffer + offset ));
273279
274280 if (HAL_FLASH_Program (FLASH_TYPEPROGRAM_DOUBLEWORD , address , data ) == HAL_OK ) {
275281 address += 8 ;
276282 offset += 8 ;
277- #endif
278283 } else {
279284 address = address_end + 1 ;
280285 }
@@ -326,6 +331,8 @@ void eeprom_buffer_flush(void)
326331
327332#endif /* defined(EEPROM_RETRAM_MODE) */
328333
334+ #endif /* ! DATA_EEPROM_BASE */
335+
329336#ifdef __cplusplus
330337}
331338#endif
0 commit comments