From aaacf6cea83e45dbbde63269a0b81b213975ee38 Mon Sep 17 00:00:00 2001
From: cTn
Date: Wed, 7 May 2014 08:07:49 +0200
Subject: [PATCH] support global and local chip erase
---
js/stm32.js | 93 +++++++++++++++++++-------------------
tabs/firmware_flasher.html | 3 +-
tabs/firmware_flasher.js | 20 ++++++++
3 files changed, 68 insertions(+), 48 deletions(-)
diff --git a/js/stm32.js b/js/stm32.js
index 230728e5dc..004df70355 100644
--- a/js/stm32.js
+++ b/js/stm32.js
@@ -396,58 +396,57 @@ STM32_protocol.prototype.upload_procedure = function(step) {
break;
case 4:
// erase memory
- // EXPERIMENTAL
- console.log('Executing local erase (only needed pages)');
- STM32.GUI_status('Erasing');
+ if (!$('input.erase_chip').is(':checked')) {
+ // EXPERIMENTAL
+ console.log('Executing local erase (only needed pages)');
+ STM32.GUI_status('Erasing');
- self.send([self.command.erase, 0xBC], 1, function(reply) { // 0x43 ^ 0xFF
- if (self.verify_response(self.status.ACK, reply)) {
- // the bootloader receives one byte that contains N, the number of pages to be erased – 1
- var max_address = self.hex.data[self.hex.data.length - 1].address + self.hex.data[self.hex.data.length - 1].bytes - 0x8000000;
- var erase_pages_n = Math.ceil(max_address / self.page_size);
+ self.send([self.command.erase, 0xBC], 1, function(reply) { // 0x43 ^ 0xFF
+ if (self.verify_response(self.status.ACK, reply)) {
+ // the bootloader receives one byte that contains N, the number of pages to be erased – 1
+ var max_address = self.hex.data[self.hex.data.length - 1].address + self.hex.data[self.hex.data.length - 1].bytes - 0x8000000;
+ var erase_pages_n = Math.ceil(max_address / self.page_size);
- var buff = [];
- buff.push(erase_pages_n - 1);
- var checksum = buff[0];
- for (var i = 0; i < erase_pages_n; i++) {
- buff.push(i);
- checksum ^= i;
+ var buff = [];
+ buff.push(erase_pages_n - 1);
+ var checksum = buff[0];
+ for (var i = 0; i < erase_pages_n; i++) {
+ buff.push(i);
+ checksum ^= i;
+ }
+ buff.push(checksum);
+
+ self.send(buff, 1, function(reply) {
+ if (self.verify_response(self.status.ACK, reply)) {
+ console.log('Erasing: done');
+ console.log('Writing data ...');
+ STM32.GUI_status('Flashing ...');
+
+ // proceed to next step
+ self.upload_procedure(5);
+ }
+ });
}
- buff.push(checksum);
+ });
+ } else {
+ console.log('Executing global chip erase');
+ STM32.GUI_status('Erasing');
- self.send(buff, 1, function(reply) {
- if (self.verify_response(self.status.ACK, reply)) {
- console.log('Erasing: done');
- console.log('Writing data ...');
- STM32.GUI_status('Flashing ...');
+ self.send([self.command.erase, 0xBC], 1, function(reply) { // 0x43 ^ 0xFF
+ if (self.verify_response(self.status.ACK, reply)) {
+ self.send([0xFF, 0x00], 1, function(reply) {
+ if (self.verify_response(self.status.ACK, reply)) {
+ console.log('Erasing: done');
+ console.log('Writing data ...');
+ STM32.GUI_status('Flashing ...');
- // proceed to next step
- self.upload_procedure(5);
- }
- });
- }
- });
-
- // OLD BUT GOLD
- /*
- console.log('Executing global chip erase');
- STM32.GUI_status('Erasing');
-
- self.send([self.command.erase, 0xBC], 1, function(reply) { // 0x43 ^ 0xFF
- if (self.verify_response(self.status.ACK, reply)) {
- self.send([0xFF, 0x00], 1, function(reply) {
- if (self.verify_response(self.status.ACK, reply)) {
- console.log('Erasing: done');
- console.log('Writing data ...');
- STM32.GUI_status('Flashing ...');
-
- // proceed to next step
- self.upload_procedure(5);
- }
- });
- }
- });
- */
+ // proceed to next step
+ self.upload_procedure(5);
+ }
+ });
+ }
+ });
+ }
break;
case 5:
// upload
diff --git a/tabs/firmware_flasher.html b/tabs/firmware_flasher.html
index 58b6049dbb..4bce6a18c9 100644
--- a/tabs/firmware_flasher.html
+++ b/tabs/firmware_flasher.html
@@ -11,7 +11,8 @@
If you are flashing "bare" board with no firmware preloaded or you have bootloader pins shorted, check this box.
-
+
+
diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js
index a504f6c09c..684cebe43c 100644
--- a/tabs/firmware_flasher.js
+++ b/tabs/firmware_flasher.js
@@ -200,6 +200,26 @@ function tab_initialize_firmware_flasher() {
}).change();
});
+ chrome.storage.local.get('erase_chip', function(result) {
+ if (typeof result.erase_chip === 'undefined') {
+ // wasn't saved yet
+ $('input.updating').prop('checked', false);
+ } else {
+ if (result.erase_chip) {
+ $('input.erase_chip').prop('checked', true);
+ } else {
+ $('input.erase_chip').prop('checked', false);
+ }
+ }
+
+ // bind UI hook so the status is saved on change
+ $('input.erase_chip').change(function() {
+ var status = $(this).is(':checked');
+
+ chrome.storage.local.set({'erase_chip': status});
+ });
+ });
+
/*
chrome.storage.local.get('dev_mode', function(result) {
if (typeof result.dev_mode !== 'undefined') {