Skip to content

Commit 7c5fb2c

Browse files
committed
tweaks
1 parent 734b75c commit 7c5fb2c

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

Marlin/src/HAL/STM32/eeprom_flash.cpp

+28-26
Original file line numberDiff line numberDiff line change
@@ -74,25 +74,13 @@
7474
#define EEPROM_SLOTS ((FLASH_UNIT_SIZE) / (MARLIN_EEPROM_SIZE))
7575
#define SLOT_ADDRESS(slot) (FLASH_ADDRESS_START + (slot * (MARLIN_EEPROM_SIZE)))
7676

77-
#ifdef STM32H7xx
78-
#define FLASHWORD_SIZE 32U // STM32H7xx a FLASHWORD is 32 bytes (256 bits)
79-
#define UNLOCK_FLASH() if (!flash_unlocked) { \
80-
HAL_FLASH_Unlock(); \
81-
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \
82-
FLASH_FLAG_PGSERR); \
83-
flash_unlocked = true; \
84-
}
85-
#else
86-
#define FLASHWORD_SIZE 4U // STM32F4xx a FLASHWORD is 4 bytes sizeof(uint32_t)
87-
#define UNLOCK_FLASH() if (!flash_unlocked) { \
88-
HAL_FLASH_Unlock(); \
89-
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | \
90-
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); \
91-
flash_unlocked = true; \
92-
}
93-
#endif
94-
95-
#define LOCK_FLASH() if (flash_unlocked) { HAL_FLASH_Lock(); flash_unlocked = false; }
77+
#ifdef STM32H7xx
78+
#define FLASHWORD_SIZE 32U // STM32H7xx a FLASHWORD is 32 bytes (256 bits)
79+
#define FLASH_FLAGS_TO_CLEAR (FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGSERR)
80+
#else
81+
#define FLASHWORD_SIZE 4U // STM32F4xx a FLASHWORD is 4 bytes sizeof(uint32_t)
82+
#define FLASH_FLAGS_TO_CLEAR (FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)
83+
#endif
9684

9785
#define EMPTY_UINT32 ((uint32_t)-1)
9886
#define EMPTY_UINT8 ((uint8_t)-1)
@@ -186,7 +174,12 @@ bool PersistentStore::access_finish() {
186174
EraseInitStruct.NbSectors = 1;
187175

188176
current_slot = EEPROM_SLOTS - 1;
189-
UNLOCK_FLASH();
177+
178+
if (!flash_unlocked) {
179+
HAL_FLASH_Unlock();
180+
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAGS_TO_CLEAR);
181+
flash_unlocked = true;
182+
}
190183

191184
TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT());
192185
hal.isr_off();
@@ -197,26 +190,32 @@ bool PersistentStore::access_finish() {
197190
DEBUG_ECHOLNPGM("HAL_FLASHEx_Erase=", status);
198191
DEBUG_ECHOLNPGM("GetError=", HAL_FLASH_GetError());
199192
DEBUG_ECHOLNPGM("SectorError=", SectorError);
200-
LOCK_FLASH();
193+
if (flash_unlocked) {
194+
HAL_FLASH_Lock();
195+
flash_unlocked = false;
196+
}
201197
return false;
202198
}
203199
}
204200

205-
UNLOCK_FLASH();
201+
if (!flash_unlocked) {
202+
HAL_FLASH_Unlock();
203+
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAGS_TO_CLEAR);
204+
flash_unlocked = true;
205+
}
206206

207207
uint32_t offset = 0,
208208
address = SLOT_ADDRESS(current_slot),
209209
address_end = address + MARLIN_EEPROM_SIZE;
210-
// data = 0;
211210

212211
bool success = true;
213212

214213
while (address < address_end) {
215214
#ifdef STM32H7xx
216215
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, address, uint32_t(ram_eeprom + offset));
217216
#else
218-
// memcpy(&data, ram_eeprom + offset, sizeof(data)); // IRON, IMPROVED
219-
// status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data);
217+
//memcpy(&data, ram_eeprom + offset, sizeof(data)); // IRON, IMPROVED
218+
//status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data);
220219
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, *(uint32_t*)(ram_eeprom + offset)); // IRON, OPTIMIZED
221220
#endif
222221
if (status == HAL_OK) {
@@ -232,7 +231,10 @@ bool PersistentStore::access_finish() {
232231
}
233232
}
234233

235-
LOCK_FLASH();
234+
if (flash_unlocked) {
235+
HAL_FLASH_Lock();
236+
flash_unlocked = false;
237+
}
236238

237239
if (success) {
238240
eeprom_data_written = false;

Marlin/src/HAL/STM32/inc/SanityCheck.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
#error "SDCARD_EEPROM_EMULATION requires SDSUPPORT. Enable SDSUPPORT or choose another EEPROM emulation."
3737
#endif
3838

39-
#if !ANY(STM32F4xx, STM32H7xx) && ENABLED(FLASH_EEPROM_LEVELING)
39+
#if NONE(STM32F4xx, STM32H7xx) && ENABLED(FLASH_EEPROM_LEVELING)
4040
#error "FLASH_EEPROM_LEVELING is currently only supported on STM32F4/H7 hardware." // IRON
4141
#endif
4242

0 commit comments

Comments
 (0)