Skip to content

Commit 35545ff

Browse files
committed
Fixes for stm32wb hal
1 parent f2ba779 commit 35545ff

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

hal/stm32wb.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ PKA_HandleTypeDef hpka = { };
109109

110110
#define FLASH_CR_PER (1 << 1)
111111
#define FLASH_CR_PG (1 << 0)
112+
#define FLASH_CR_FSTPG (1 << 18)
112113

113114
#endif /* !WOLFSSL_STM32_PKA */
114115

@@ -141,17 +142,20 @@ int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len)
141142
{
142143
int i = 0;
143144
uint32_t *src, *dst;
145+
uint32_t reg;
144146
flash_clear_errors();
145-
FLASH_CR |= FLASH_CR_PG;
147+
reg = FLASH_CR & (~FLASH_CR_FSTPG);
148+
FLASH_CR = reg | FLASH_CR_PG;
146149

147150
while (i < len) {
148151
flash_clear_errors();
149152
if ((len - i > 3) && ((((address + i) & 0x07) == 0) && ((((uint32_t)data) + i) & 0x07) == 0)) {
153+
uint32_t idx = i >> 2;
150154
src = (uint32_t *)data;
151-
dst = (uint32_t *)(address + FLASHMEM_ADDRESS_SPACE);
155+
dst = (uint32_t *)(address);
152156
flash_wait_complete();
153-
dst[i >> 2] = src[i >> 2];
154-
dst[(i >> 2) + 1] = src[(i >> 2) + 1];
157+
dst[idx] = src[idx];
158+
dst[idx + 1] = src[idx + 1];
155159
flash_wait_complete();
156160
i+=8;
157161
} else {
@@ -204,14 +208,17 @@ int RAMFUNCTION hal_flash_erase(uint32_t address, int len)
204208
uint32_t p;
205209
if (len == 0)
206210
return -1;
211+
address -= FLASHMEM_ADDRESS_SPACE;
207212
end_address = address + len - 1;
208213
for (p = address; p < end_address; p += FLASH_PAGE_SIZE) {
209-
uint32_t reg = FLASH_CR & (~(FLASH_CR_PNB_MASK << FLASH_CR_PNB_SHIFT));
210-
FLASH_CR = reg | ((p >> 12) << FLASH_CR_PNB_SHIFT) | FLASH_CR_PER | FLASH_CR_PG;
214+
uint32_t reg;
215+
flash_clear_errors();
216+
reg = FLASH_CR & ~((FLASH_CR_PNB_MASK << FLASH_CR_PNB_SHIFT) | FLASH_CR_FSTPG | FLASH_CR_PG);
217+
FLASH_CR = reg | ((p >> 12) << FLASH_CR_PNB_SHIFT) | FLASH_CR_PER;
211218
DMB();
212219
FLASH_CR |= FLASH_CR_STRT;
213220
flash_wait_complete();
214-
FLASH_CR &= ~(FLASH_CR_PER | FLASH_CR_PG);
221+
FLASH_CR &= ~(FLASH_CR_PER);
215222
}
216223
return 0;
217224
}
@@ -310,7 +317,6 @@ void hal_prepare_boot(void)
310317
#ifdef SPI_FLASH
311318
spi_release();
312319
#endif
313-
hal_flash_lock();
314320
clock_pll_off();
315321
}
316322

lib/wolfssl

0 commit comments

Comments
 (0)