Skip to content

Commit c711143

Browse files
committed
library(eeproom): add STM32H5xx support
Signed-off-by: Frederic Pillon <frederic.pillon@st.com>
1 parent 74fd5b5 commit c711143

File tree

2 files changed

+65
-4
lines changed

2 files changed

+65
-4
lines changed

libraries/EEPROM/src/utility/stm32_eeprom.c

+64-3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "stm32_eeprom.h"
2020
#include "stm32yyxx_ll_utils.h"
2121
#include <string.h>
22+
#include <stdbool.h>
2223

2324
#ifdef __cplusplus
2425
extern "C" {
@@ -37,15 +38,19 @@ extern "C" {
3738
#endif /* !FLASH_BANK_NUMBER */
3839

3940
/* Be able to change FLASH_DATA_SECTOR to use if relevant */
40-
#if defined(FLASH_SECTOR_TOTAL)
41+
#if defined(FLASH_SECTOR_TOTAL) || defined(FLASH_SECTOR_NB)
4142
#if !defined(FLASH_DATA_SECTOR)
43+
#if defined(FLASH_SECTOR_TOTAL)
4244
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
45+
#elif defined(FLASH_SECTOR_NB)
46+
#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_NB - 1))
47+
#endif
4348
#else
4449
#ifndef FLASH_BASE_ADDRESS
4550
#error "FLASH_BASE_ADDRESS have to be defined when FLASH_DATA_SECTOR is defined"
4651
#endif
4752
#endif /* !FLASH_DATA_SECTOR */
48-
#endif /* FLASH_SECTOR_TOTAL */
53+
#endif /* FLASH_SECTOR_TOTAL || FLASH_SECTOR_NB */
4954

5055
/* Be able to change FLASH_PAGE_NUMBER to use if relevant */
5156
#if !defined(FLASH_PAGE_NUMBER) && defined(FLASH_PAGE_SIZE)
@@ -62,6 +67,12 @@ extern "C" {
6267
#define FLASH_END FLASH_BANK2_END
6368
#elif defined (FLASH_BANK1_END) && (FLASH_BANK_NUMBER == FLASH_BANK_1)
6469
#define FLASH_END FLASH_BANK1_END
70+
#elif defined(FLASH_DATA_SECTOR)
71+
#if defined(FLASH_BANK_2) && (FLASH_BANK_NUMBER == FLASH_BANK_2)
72+
#define FLASH_END ((uint32_t)(FLASH_BASE + FLASH_BANK_SIZE + (FLASH_DATA_SECTOR * FLASH_SECTOR_SIZE) + FLASH_SECTOR_SIZE - 1))
73+
#else
74+
#define FLASH_END ((uint32_t)(FLASH_BASE + (FLASH_DATA_SECTOR * FLASH_SECTOR_SIZE) + FLASH_SECTOR_SIZE - 1))
75+
#endif /* FLASH_BANK_2 */
6576
#elif defined(FLASH_BASE) && defined(FLASH_PAGE_NUMBER) && defined (FLASH_PAGE_SIZE)
6677
/* If FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
6778
#define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
@@ -164,7 +175,25 @@ void eeprom_buffered_write_byte(uint32_t pos, uint8_t value)
164175
*/
165176
void eeprom_buffer_fill(void)
166177
{
178+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
179+
bool icache_enabled = false;
180+
if (HAL_ICACHE_IsEnabled() == 1) {
181+
icache_enabled = true;
182+
/* Disable instruction cache prior to internal cacheable memory update */
183+
if (HAL_ICACHE_Disable() != HAL_OK) {
184+
Error_Handler();
185+
}
186+
}
187+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
167188
memcpy(eeprom_buffer, (uint8_t *)(FLASH_BASE_ADDRESS), E2END + 1);
189+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
190+
if (icache_enabled) {
191+
/* Re-enable instruction cache */
192+
if (HAL_ICACHE_Enable() != HAL_OK) {
193+
Error_Handler();
194+
}
195+
}
196+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
168197
}
169198

170199
#if defined(EEPROM_RETRAM_MODE)
@@ -188,6 +217,16 @@ void eeprom_buffer_flush(void)
188217
*/
189218
void eeprom_buffer_flush(void)
190219
{
220+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
221+
bool icache_enabled = false;
222+
if (HAL_ICACHE_IsEnabled() == 1) {
223+
icache_enabled = true;
224+
/* Disable instruction cache prior to internal cacheable memory update */
225+
if (HAL_ICACHE_Disable() != HAL_OK) {
226+
Error_Handler();
227+
}
228+
}
229+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
191230
FLASH_EraseInitTypeDef EraseInitStruct;
192231
uint32_t offset = 0;
193232
uint32_t address = FLASH_BASE_ADDRESS;
@@ -240,6 +279,8 @@ void eeprom_buffer_flush(void)
240279
uint32_t SectorError = 0;
241280
#if defined(FLASH_TYPEPROGRAM_FLASHWORD)
242281
uint64_t data[4] = {0x0000};
282+
#elif defined(FLASH_TYPEPROGRAM_QUADWORD)
283+
uint32_t data[4] = {0x0000};
243284
#else
244285
uint32_t data = 0;
245286
#endif
@@ -249,7 +290,9 @@ void eeprom_buffer_flush(void)
249290
#if defined(FLASH_BANK_NUMBER)
250291
EraseInitStruct.Banks = FLASH_BANK_NUMBER;
251292
#endif
293+
#if defined(FLASH_VOLTAGE_RANGE_3)
252294
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
295+
#endif
253296
EraseInitStruct.Sector = FLASH_DATA_SECTOR;
254297
EraseInitStruct.NbSectors = 1;
255298

@@ -263,11 +306,20 @@ void eeprom_buffer_flush(void)
263306
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, address, (uint32_t)data) == HAL_OK) {
264307
address += 32;
265308
offset += 32;
266-
#else
309+
#elif defined(FLASH_TYPEPROGRAM_QUADWORD)
310+
/* 128 bits */
311+
memcpy(&data, eeprom_buffer + offset, 4 * sizeof(uint32_t));
312+
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_QUADWORD, address, (uint32_t)data) == HAL_OK) {
313+
address += 16;
314+
offset += 16;
315+
#elif defined(FLASH_TYPEPROGRAM_WORD)
267316
memcpy(&data, eeprom_buffer + offset, sizeof(uint32_t));
268317
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data) == HAL_OK) {
269318
address += 4;
270319
offset += 4;
320+
#else
321+
#error "Unknown FLASH Program Type."
322+
if (0) {}
271323
#endif
272324
} else {
273325
address = address_end + 1;
@@ -276,6 +328,15 @@ void eeprom_buffer_flush(void)
276328
}
277329
HAL_FLASH_Lock();
278330
#endif
331+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
332+
if (icache_enabled)
333+
{
334+
/* Re-enable instruction cache */
335+
if (HAL_ICACHE_Enable() != HAL_OK) {
336+
Error_Handler();
337+
}
338+
}
339+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
279340
}
280341

281342
#endif /* defined(EEPROM_RETRAM_MODE) */

libraries/EEPROM/src/utility/stm32_eeprom.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ extern "C" {
8484
* emulation. Anyway, all the sector size will be erased.
8585
* So pay attention to not use this sector for other stuff.
8686
*/
87-
#define FLASH_PAGE_SIZE ((uint32_t)(16*1024)) /* 16kB page */
87+
#define FLASH_PAGE_SIZE ((uint32_t)(8*1024)) /* 8kB page */
8888
#endif
8989

9090
#if defined(DATA_EEPROM_BASE) || defined(FLASH_EEPROM_BASE)

0 commit comments

Comments
 (0)