Fix multi-page flash writing.
authorPeter Zotov <whitequark@whitequark.org>
Thu, 17 Feb 2011 13:44:20 +0000 (16:44 +0300)
committerPeter Zotov <whitequark@whitequark.org>
Thu, 17 Feb 2011 13:44:20 +0000 (16:44 +0300)
src/gdb-server.c

index 1c9cd4c69f43b053a3568232a6d96ab6ab3e0e1b..a6169d9a4d89eb2fd5a8fc0c520acafe3265f420 100644 (file)
@@ -231,12 +231,19 @@ static int flash_go(struct stlink* sl) {
                printf("flash_do: block %08x -> %04x\n", fb->addr, fb->length);
                #endif
 
-               stlink_erase_flash_page(sl, fb->addr);
+               unsigned length = fb->length;
+               for(stm32_addr_t page = fb->addr; page < fb->addr + fb->length; page += 0x400) {
+                       #ifdef DEBUG
+                       printf("flash_do: page %08x\n", page);
+                       #endif
 
-               if(!stlink_write_flash(sl, fb->addr, fb->data, fb->length) < 0) {
-                       fprintf(stderr, "Flash writing failed.\n");
-                       goto error;
+                       stlink_erase_flash_page(sl, page);
+
+                       if(stlink_write_flash(sl, page, fb->data + (page - fb->addr),
+                                       length > 0x400 ? 0x400 : length) < 0)
+                               goto error;
                }
+
        }
 
        stlink_reset(sl);