@@ -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
0 commit comments