]> git.gag.com Git - fw/stlink/blobdiff - src/stlink-usb.c
Fixed flash utility for STM32F4
[fw/stlink] / src / stlink-usb.c
index e7a9ba6428f85e4b949775810cadd198e58bca85..63eddab3e792e204fb22f6ffe6c73fe4b435413a 100644 (file)
@@ -680,15 +680,38 @@ stlink_t* stlink_open_usb(const int verbose) {
     slu->cmd_len = (slu->protocoll == 1)? STLINK_SG_SIZE: STLINK_CMD_SIZE;
 
     /* success */
+
     if (stlink_current_mode(sl) == STLINK_DEV_DFU_MODE) {
-      printf("-- exit_dfu_mode\n");
       stlink_exit_dfu_mode(sl);
     }
+
+    if (stlink_current_mode(sl) != STLINK_DEV_DEBUG_MODE) {
+      stlink_enter_swd_mode(sl);
+    }
+
     stlink_version(sl);
 
     /* per device family initialization */
-    stlink_core_id(sl);
-    if (sl->core_id == 0x2ba01477) /* stm32l */ {
+    stlink_identify_device(sl);
+
+    if (sl->chip_id == STM32F4_CHIP_ID) {
+
+       /* flash memory settings */
+        sl->flash_base = STM32_FLASH_BASE;
+        sl->flash_size = STM32F4_FLASH_SIZE;
+        sl->flash_pgsz = STM32F4_FLASH_PGSZ;   //Dummy, pages size is variable in this config
+
+        /* system memory */
+        sl->sys_base = STM32_SYSTEM_BASE;
+        sl->sys_size = STM32_SYSTEM_SIZE;
+
+        /* sram memory settings */
+        sl->sram_base = STM32_SRAM_BASE;
+        sl->sram_size = STM32_SRAM_SIZE;
+
+      }
+
+    else if (sl->core_id == STM32L_CORE_ID) {
 
       /* flash memory settings */
       sl->flash_base = STM32_FLASH_BASE;
@@ -703,7 +726,8 @@ stlink_t* stlink_open_usb(const int verbose) {
       sl->sram_base = STM32_SRAM_BASE;
       sl->sram_size = STM32L_SRAM_SIZE;
 
-    } else /* stm32vl */ {
+    }
+    else if (sl->core_id == STM32VL_CORE_ID) {
 
       /* flash memory settings */
       sl->flash_base = STM32_FLASH_BASE;
@@ -719,6 +743,10 @@ stlink_t* stlink_open_usb(const int verbose) {
       sl->sram_size = STM32_SRAM_SIZE;
 
     }
+    else {
+      fprintf(stderr, "unknown coreid: %x\n", sl->core_id);
+      goto on_libusb_error;
+    }
 
     error = 0;