Improved (for humans) error reporting for flash programming errors.
authormlu <mlu@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 14 Apr 2009 17:17:38 +0000 (17:17 +0000)
committermlu <mlu@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 14 Apr 2009 17:17:38 +0000 (17:17 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1456 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/stm32x.c

index 5eeb03bb6e2d2ef71e56fe936d14523216492d50..68e9c2593a0a2e9c16f7e0b6553ffbd6aaf19ad3 100644 (file)
@@ -565,8 +565,16 @@ int stm32x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 co
                        break;
                }
                
-               if (buf_get_u32(reg_params[3].value, 0, 32) & 0x14)
+               if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_PGERR)
                {
+                       LOG_ERROR("flash memory not erased before writing");
+                       retval = ERROR_FLASH_OPERATION_FAILED;
+                       break;
+               }
+               
+               if (buf_get_u32(reg_params[3].value, 0, 32) & FLASH_WRPRTERR)
+               {
+                       LOG_ERROR("flash memory write protected");
                        retval = ERROR_FLASH_OPERATION_FAILED;
                        break;
                }
@@ -647,9 +655,15 @@ int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
                status = stm32x_wait_status_busy(bank, 5);
                
                if( status & FLASH_WRPRTERR )
+               {
+                       LOG_ERROR("flash memory not erased before writing");
                        return ERROR_FLASH_OPERATION_FAILED;
+               }
                if( status & FLASH_PGERR )
+               {
+                       LOG_ERROR("flash memory write protected");
                        return ERROR_FLASH_OPERATION_FAILED;
+               }
 
                bytes_written += 2;
                words_remaining--;
@@ -674,9 +688,15 @@ int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
                status = stm32x_wait_status_busy(bank, 5);
                
                if( status & FLASH_WRPRTERR )
+               {
+                       LOG_ERROR("flash memory not erased before writing");
                        return ERROR_FLASH_OPERATION_FAILED;
+               }
                if( status & FLASH_PGERR )
+               {
+                       LOG_ERROR("flash memory write protected");
                        return ERROR_FLASH_OPERATION_FAILED;
+               }
        }
        
        target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);