]> git.sur5r.net Git - openocd/commitdiff
- stm32x flash driver: add support for low density devices
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 27 Nov 2008 12:14:46 +0000 (12:14 +0000)
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 27 Nov 2008 12:14:46 +0000 (12:14 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1189 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/stm32x.c

index 0f62da91194de04a46a690ccd5736e5fc625bd4c..1b821059c6fa038b80d9903f4a31189db586e748 100644 (file)
@@ -727,6 +727,21 @@ int stm32x_probe(struct flash_bank_s *bank)
                        num_pages = 128;
                }
        }
+       else if ((device_id & 0x7ff) == 0x412)
+       {
+               /* low density - we have 1k pages
+                * 4 pages for a protection area */
+               page_size = 1024;
+               stm32x_info->ppage_size = 4;
+               
+               /* check for early silicon */
+               if (num_pages == 0xffff)
+               {
+                       /* number of sectors incorrect on revA */
+                       LOG_WARNING( "STM32 flash size failed, probe inaccurate - assuming 32k flash" );
+                       num_pages = 32;
+               }
+       }
        else if ((device_id & 0x7ff) == 0x414)
        {
                /* high density - we have 2k pages
@@ -822,6 +837,23 @@ int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size)
                                break;
                }
        }
+       else if ((device_id & 0x7ff) == 0x412)
+       {
+               printed = snprintf(buf, buf_size, "stm32x (Low Density) - Rev: ");
+               buf += printed;
+               buf_size -= printed;
+               
+               switch(device_id >> 16)
+               {
+                       case 0x1000:
+                               snprintf(buf, buf_size, "A");
+                               break;
+                       
+                       default:
+                               snprintf(buf, buf_size, "unknown");
+                               break;
+               }
+       }
        else if ((device_id & 0x7ff) == 0x414)
        {
                printed = snprintf(buf, buf_size, "stm32x (High Density) - Rev: ");
@@ -1016,7 +1048,7 @@ int stm32x_handle_options_write_command(struct command_context_s *cmd_ctx, char
        if (argc < 4)
        {
                command_print(cmd_ctx, "stm32x options_write <bank> <SWWDG|HWWDG> <RSTSTNDBY|NORSTSTNDBY> <RSTSTOP|NORSTSTOP>");
-               return ERROR_OK;        
+               return ERROR_OK;
        }
        
        bank = get_flash_bank_by_num(strtoul(args[0], NULL, 0));