Skip to content

Commit 6edf842

Browse files
committed
chore(wb0): add EEPROM support
Signed-off-by: Frederic Pillon <[email protected]>
1 parent f247f7f commit 6edf842

File tree

6 files changed

+47
-26
lines changed

6 files changed

+47
-26
lines changed

libraries/EEPROM/src/utility/stm32_eeprom.c

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,15 @@ extern "C" {
5252
#endif /* !FLASH_DATA_SECTOR */
5353
#endif /* FLASH_SECTOR_TOTAL || FLASH_SECTOR_NB */
5454

55-
/* Be able to change FLASH_PAGE_NUMBER to use if relevant */
56-
#if !defined(FLASH_PAGE_NUMBER) && defined(FLASH_PAGE_SIZE)
57-
#define FLASH_PAGE_NUMBER ((uint32_t)(((LL_GetFlashSize() * 1024) / FLASH_PAGE_SIZE) - 1))
58-
#endif /* !FLASH_PAGE_NUMBER */
55+
/* Be able to change EEPROM_FLASH_PAGE_NUMBER to use if relevant */
56+
#if !defined(EEPROM_FLASH_PAGE_NUMBER) && defined(FLASH_PAGE_SIZE)
57+
#if defined(STM32WB0x)
58+
/* STM32WB0x define the FLASH_PAGE_NUMBER */
59+
#define EEPROM_FLASH_PAGE_NUMBER (FLASH_PAGE_NUMBER - 1)
60+
#else
61+
#define EEPROM_FLASH_PAGE_NUMBER ((uint32_t)(((LL_GetFlashSize() * 1024) / FLASH_PAGE_SIZE) - 1))
62+
#endif
63+
#endif /* !EEPROM_FLASH_PAGE_NUMBER */
5964

6065
/* Be able to change FLASH_END to use */
6166
#if !defined(FLASH_END)
@@ -73,9 +78,12 @@ extern "C" {
7378
#else
7479
#define FLASH_END ((uint32_t)(FLASH_BASE + (FLASH_DATA_SECTOR * FLASH_SECTOR_SIZE) + FLASH_SECTOR_SIZE - 1))
7580
#endif /* FLASH_BANK_2 */
76-
#elif defined(FLASH_BASE) && defined(FLASH_PAGE_NUMBER) && defined (FLASH_PAGE_SIZE)
77-
/* If FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
78-
#define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
81+
#elif defined(FLASH_START_ADDR)
82+
/* If EEPROM_FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
83+
#define FLASH_END ((uint32_t)(FLASH_START_ADDR + (((EEPROM_FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
84+
#elif defined(FLASH_BASE) && defined(EEPROM_FLASH_PAGE_NUMBER) && defined (FLASH_PAGE_SIZE)
85+
/* If EEPROM_FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
86+
#define FLASH_END ((uint32_t)(FLASH_BASE + (((EEPROM_FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
7987
#endif
8088
#ifndef FLASH_END
8189
#error "FLASH_END could not be defined"
@@ -235,27 +243,32 @@ void eeprom_buffer_flush(void)
235243
uint32_t pageError = 0;
236244
#if defined(FLASH_TYPEPROGRAM_QUADWORD)
237245
uint64_t data[2] = {0x0000};
238-
#else
246+
#elif defined(FLASH_TYPEPROGRAM_DOUBLEWORD)
239247
#if defined(STM32U3xx)
240248
uint32_t dataAddr = 0;
241249
#else
250+
/* Double word*/
242251
uint64_t data = 0;
243-
#endif
252+
#endif /* STM32U3xx */
253+
#elif defined(FLASH_TYPEPROGRAM_WORD)
254+
uint32_t data = 0;
244255
#endif
245256

246257
/* ERASING page */
247258
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
248259
#if defined(FLASH_BANK_NUMBER)
249260
EraseInitStruct.Banks = FLASH_BANK_NUMBER;
250261
#endif /* FLASH_BANK_NUMBER */
251-
#if defined (FLASH_PAGE_NUMBER) && defined(FLASH_SIZE)
252-
EraseInitStruct.Page = FLASH_PAGE_NUMBER;
262+
#if defined (EEPROM_FLASH_PAGE_NUMBER) && defined(FLASH_SIZE)
263+
EraseInitStruct.Page = EEPROM_FLASH_PAGE_NUMBER;
253264
#else
254265
EraseInitStruct.PageAddress = FLASH_BASE_ADDRESS;
255266
#endif
256267
EraseInitStruct.NbPages = 1;
257-
258-
if (HAL_FLASH_Unlock() == HAL_OK) {
268+
#if !defined(PROT_LEVEL_NONE)
269+
if (HAL_FLASH_Unlock() == HAL_OK)
270+
#endif
271+
{
259272
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
260273
if (HAL_FLASHEx_Erase(&EraseInitStruct, &pageError) == HAL_OK) {
261274
while (address <= address_end) {
@@ -265,7 +278,8 @@ void eeprom_buffer_flush(void)
265278
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_QUADWORD, address, (uint32_t)data) == HAL_OK) {
266279
address += 16;
267280
offset += 16;
268-
#else
281+
#elif defined(FLASH_TYPEPROGRAM_DOUBLEWORD)
282+
/* 64 bits */
269283
#if defined(STM32U3xx)
270284
dataAddr = (uint32_t)((uint8_t *)eeprom_buffer + offset);
271285

@@ -277,13 +291,21 @@ void eeprom_buffer_flush(void)
277291
#endif
278292
address += 8;
279293
offset += 8;
294+
#elif defined(FLASH_TYPEPROGRAM_WORD)
295+
/* 32 bits */
296+
memcpy(&data, eeprom_buffer + offset, sizeof(uint32_t));
297+
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, (uint32_t)data) == HAL_OK) {
298+
address += 4;
299+
offset += 4;
280300
#endif
281301
} else {
282302
address = address_end + 1;
283303
}
284304
}
285305
}
306+
#if !defined(PROT_LEVEL_NONE)
286307
HAL_FLASH_Lock();
308+
#endif /* FLASH_KEY1 || FLASH_PEKEY1 */
287309
}
288310
#else /* FLASH_TYPEERASE_SECTORS */
289311
uint32_t SectorError = 0;
@@ -339,8 +361,7 @@ void eeprom_buffer_flush(void)
339361
HAL_FLASH_Lock();
340362
#endif
341363
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
342-
if (icache_enabled)
343-
{
364+
if (icache_enabled) {
344365
/* Re-enable instruction cache */
345366
if (HAL_ICACHE_Enable() != HAL_OK) {
346367
Error_Handler();

variants/STM32WBxx/WB15CCU/variant_NUCLEO_WB15CC.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@
9393
#define PIN_SERIAL_TX PA9
9494
#endif
9595

96-
// Only 128k provided for cpu1, so defined the FLASH_PAGE_NUMBER
96+
// Only 128k provided for cpu1, so defined the EEPROM_FLASH_PAGE_NUMBER
9797
// for EEPROM emulation to the last 128k pages.
98-
#define FLASH_PAGE_NUMBER 63
98+
#define EEPROM_FLASH_PAGE_NUMBER 63
9999

100100
/*----------------------------------------------------------------------------
101101
* Arduino objects - C++ only

variants/STM32WBxx/WB35C(C-E)UxA_WB55C(C-E-G)U/variant_MKR_SHARKY.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@
8888
/* Extra HAL configuration */
8989
#define PREFETCH_ENABLE 1U
9090

91-
// Only 512k provided for cpu1, so defined the FLASH_PAGE_NUMBER
91+
// Only 512k provided for cpu1, so defined the EEPROM_FLASH_PAGE_NUMBER
9292
// for EEPROM emulation to the last 512k pages.
93-
#define FLASH_PAGE_NUMBER 127
93+
#define EEPROM_FLASH_PAGE_NUMBER 127
9494

9595
/*----------------------------------------------------------------------------
9696
* Arduino objects - C++ only

variants/STM32WBxx/WB55R(C-E-G)V/variant_P_NUCLEO_WB55RG.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@
122122
#define PIN_SERIAL_TX PB6
123123
#endif
124124

125-
// Only 512k provided for cpu1, so defined the FLASH_PAGE_NUMBER
125+
// Only 512k provided for cpu1, so defined the EEPROM_FLASH_PAGE_NUMBER
126126
// for EEPROM emulation to the last 512k pages.
127-
#define FLASH_PAGE_NUMBER 127
127+
#define EEPROM_FLASH_PAGE_NUMBER 127
128128

129129
// Extra HAL modules
130130
#if !defined(HAL_QSPI_MODULE_DISABLED)

variants/STM32WBxx/WB55R(C-E-G)V/variant_STEAM32_WB55RG.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@
201201
#define PIN_SERIAL_TX SERIAL_TX
202202
#endif
203203

204-
// Only 512k provided for cpu1, so defined the FLASH_PAGE_NUMBER
204+
// Only 512k provided for cpu1, so defined the EEPROM_FLASH_PAGE_NUMBER
205205
// for EEPROM emulation to the last 512k pages.
206-
#define FLASH_PAGE_NUMBER 127
206+
#define EEPROM_FLASH_PAGE_NUMBER 127
207207

208208
// Extra HAL modules
209209
#if !defined(HAL_QSPI_MODULE_DISABLED)

variants/STM32WBxx/WB5MMGH/variant_STM32WB5MM_DK.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,9 @@
149149
#define PIN_SERIAL_TX PB6
150150
#endif
151151

152-
// Only 512k provided for cpu1, so defined the FLASH_PAGE_NUMBER
152+
// Only 512k provided for cpu1, so defined the EEPROM_FLASH_PAGE_NUMBER
153153
// for EEPROM emulation to the last 808k pages.
154-
#define FLASH_PAGE_NUMBER 201
154+
#define EEPROM_FLASH_PAGE_NUMBER 201
155155

156156
// Extra HAL modules
157157
#if !defined(HAL_QSPI_MODULE_DISABLED)

0 commit comments

Comments
 (0)