]> git.sur5r.net Git - openocd/blobdiff - src/flash/stm32x.c
- correct spelling typo in stm32x flash driver
[openocd] / src / flash / stm32x.c
index 7039a3d41d012bc1d7995714b0b1a58d7b196b95..ebb55f838b71280f1f5d3dc6b13c1cca6461efbb 100644 (file)
@@ -292,7 +292,7 @@ int stm32x_blank_check(struct flash_bank_s *bank, int first, int last)
        {
                return ERROR_TARGET_NOT_HALTED;
        }
-       
+
        buffer = malloc(256);
        
        for (i = first; i <= last; i++)
@@ -356,11 +356,11 @@ int stm32x_erase(struct flash_bank_s *bank, int first, int last)
        int i;
        u32 status;
        
-       if (target->state != TARGET_HALTED)
+       if (bank->target->state != TARGET_HALTED)
        {
                return ERROR_TARGET_NOT_HALTED;
        }
-       
+
        /* unlock flash registers */
        target_write_u32(target, STM32_FLASH_KEYR, KEY1);
        target_write_u32(target, STM32_FLASH_KEYR, KEY2);
@@ -516,7 +516,7 @@ int stm32x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 co
                if ((retval = target->type->run_algorithm(target, 0, NULL, 4, reg_params, stm32x_info->write_algorithm->address, \
                                stm32x_info->write_algorithm->address + (sizeof(stm32x_flash_write_code) - 10), 10000, &armv7m_info)) != ERROR_OK)
                {
-                       ERROR("error executing str7x flash write algorithm");
+                       ERROR("error executing stm32x flash write algorithm");
                        break;
                }
                
@@ -552,11 +552,11 @@ int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
        u8 status;
        u32 retval;
        
-       if (target->state != TARGET_HALTED)
+       if (bank->target->state != TARGET_HALTED)
        {
                return ERROR_TARGET_NOT_HALTED;
        }
-       
+
        if (offset & 0x1)
        {
                WARNING("offset 0x%x breaks required 2-byte alignment", offset);
@@ -646,6 +646,11 @@ int stm32x_probe(struct flash_bank_s *bank)
        u16 num_sectors;
        u32 device_id;
        
+       if (bank->target->state != TARGET_HALTED)
+       {
+               return ERROR_TARGET_NOT_HALTED;
+       }
+
        stm32x_info->probed = 0;
        
        /* read stm32 device id register */
@@ -660,6 +665,15 @@ int stm32x_probe(struct flash_bank_s *bank)
     
        /* get flash size from target */
        target_read_u16(target, 0x1FFFF7E0, &num_sectors);
+       
+       /* check for early silicon rev A */
+       if ((device_id >> 16) == 0 )
+       {
+               /* number of sectors incorrect on revA */
+               WARNING( "STM32 Rev A Silicon detected, probe inaccurate - assuming 128k flash" );
+               num_sectors = 128;
+       }
+       
        INFO( "flash size = %dkbytes", num_sectors );
        
        bank->base = 0x08000000;