@@ -69,7 +69,7 @@ static int stm32f4_erase_all_flash(STM32F4_PRIV_t *priv)
6969 if (priv -> cortex -> ops -> check_error (priv -> cortex -> priv )) {
7070 // TODO: handle error
7171 printf ("Error while waiting for erase end\n" );
72- return 1 ;
72+ return STM32F4_ERASE_NEVER_END ;
7373 }
7474 }
7575
@@ -78,7 +78,7 @@ static int stm32f4_erase_all_flash(STM32F4_PRIV_t *priv)
7878 if ((sr & STM32F4_SR_ERROR_MASK ) || !(sr & STM32F4_SR_EOP )) {
7979 // TODO: handle error
8080 printf ("Error after erase 0x%x\n" , sr );
81- return 1 ;
81+ return sr | STM32F4_ERASE_ERROR_BIT ;
8282 }
8383 return 0 ;
8484}
@@ -100,7 +100,7 @@ static int stm32f4_flash_write(STM32F4_PRIV_t *priv, uint32_t dest, const uint32
100100 if (priv -> cortex -> ops -> check_error (priv -> cortex -> priv )) {
101101 // TODO: handle error
102102 printf ("ERROR: Filed to setup write operation\n" );
103- return 1 ;
103+ return STM32F4_ERROR_ON_FLASH_WRITE_SETUP ;
104104 }
105105
106106 /* Execute the stub */
@@ -115,7 +115,7 @@ static int stm32f4_flash_write(STM32F4_PRIV_t *priv, uint32_t dest, const uint32
115115 if (sr & STM32F4_SR_ERROR_MASK ) {
116116 // TODO: handle error
117117 printf ("ERROR: writing ended with error 0x%x\n" , sr );
118- return 1 ;
118+ return sr | STM32F4_FLASH_ERROR_BIT ;
119119 }
120120
121121 return 0 ;
@@ -128,14 +128,16 @@ static int stm32f4_program(void *priv_void, FIL *file)
128128 uint32_t addr = 0x8000000 ; // start of flash memory
129129 uint32_t * data = pvPortMalloc (STM32F4_SIZE_OF_ONE_WRITE /sizeof (uint32_t ));
130130 STM32F4_PRIV_t * priv = priv_void ;
131+ uint16_t result ;
131132
132133 printf ("Start flashing STM32F4x\n" );
133134
134135 priv -> cortex -> ops -> halt_request (priv -> cortex -> priv );
135136 stm32f4_flash_unlock (priv );
136- if (stm32f4_erase_all_flash (priv )) {
137+ result = stm32f4_erase_all_flash (priv );
138+ if (result ) {
137139 vPortFree (data );
138- return 1 ;
140+ return result ;
139141 }
140142
141143 do {
@@ -151,15 +153,17 @@ static int stm32f4_program(void *priv_void, FIL *file)
151153 // add modified bytes to bytes that will be written
152154 br ++ ;
153155 br <<= 2 ;
154- if (stm32f4_flash_write (priv , addr , data , br )) {
156+ result = stm32f4_flash_write (priv , addr , data , br );
157+ if (result ) {
155158 vPortFree (data );
156- return 1 ;
159+ return result ;
157160 }
158161 // Unaligned read is always smaller then SIZE_OF_ONE_WRITE.
159162 // This is EOF so we have done here.
160163 break ;
161164 }
162- if (stm32f4_flash_write (priv , addr , data , br )) {
165+ result = stm32f4_flash_write (priv , addr , data , br );
166+ if (result ) {
163167 vPortFree (data );
164168 return 1 ;
165169 }
0 commit comments