diff --git a/js/stm32.js b/js/stm32.js
index dea6d70e..8a2870e1 100644
--- a/js/stm32.js
+++ b/js/stm32.js
@@ -1,5 +1,5 @@
var STM32_protocol = function() {
- this.hex_to_flash; // data to flash
+ this.parsed_hex; // hex object
this.receive_buffer;
@@ -118,8 +118,8 @@ STM32_protocol.prototype.initialize = function() {
// reset and set some variables before we start
self.receive_buffer = [];
- self.flashing_memory_address = 0x08000000;
- self.verify_memory_address = 0x08000000;
+ self.flashing_memory_address = self.parsed_hex.extended_linear_address;
+ self.verify_memory_address = self.parsed_hex.extended_linear_address;
self.bytes_flashed = 0;
self.bytes_verified = 0;
@@ -204,6 +204,7 @@ STM32_protocol.prototype.send = function(Array, bytes_to_read, callback) {
STM32_protocol.prototype.verify_response = function(val, data) {
if (val != data[0]) {
console.log('STM32 Communication failed, wrong response, expected: ' + val + ' received: ' + data[0]);
+ STM32.GUI_status('STM32 Communication failed, wrong response, expected: ' + val + ' received: ' + data[0]);
// disconnect
this.upload_procedure(99);
@@ -220,7 +221,10 @@ STM32_protocol.prototype.verify_chip_signature = function(signature) {
switch (signature) {
case 0x412:
// low density
- return false;
+ // not tested
+ console.log('Chip recognized as F1 Low-density');
+
+ return true;
break;
case 0x410:
// medium density
@@ -230,25 +234,41 @@ STM32_protocol.prototype.verify_chip_signature = function(signature) {
break;
case 0x414:
// high density
- return false
+ // not tested
+ console.log('Chip recognized as F1 High-density');
+
+ return true;
break;
case 0x418:
// connectivity line
- return false;
+ // not tested
+ console.log('Chip recognized as F1 Connectivity line');
+
+ return true;
break;
case 0x420:
// medium density value line
- return false;
+ // not tested
+ console.log('Chip recognized as F1 Medium-density value line');
+
+ return true;
break;
case 0x428:
// high density value line
- return false;
+ // not tested
+ console.log('Chip recognized as F1 High-density value line');
+
+ return true;
break;
case 0x430:
// XL density
- return false;
+ // not tested
+ console.log('Chip recognized as F1 XL-density value line');
+
+ return true;
break;
default:
+ console.log('Chip NOT recognized: ' + signature);
return false;
};
};
@@ -311,8 +331,6 @@ STM32_protocol.prototype.upload_procedure = function(step) {
// proceed to next step
self.upload_procedure(4);
} else {
- console.log('Chip not supported, sorry :-(');
-
// disconnect
self.upload_procedure(99);
}
@@ -342,11 +360,11 @@ STM32_protocol.prototype.upload_procedure = function(step) {
break;
case 5:
// upload
- if (self.bytes_flashed < self.hex_to_flash.length) {
- if ((self.bytes_flashed + 256) <= self.hex_to_flash.length) {
+ if (self.bytes_flashed < self.parsed_hex.data.length) {
+ if ((self.bytes_flashed + 256) <= self.parsed_hex.data.length) {
var data_length = 256;
} else {
- var data_length = self.hex_to_flash.length - self.bytes_flashed;
+ var data_length = self.parsed_hex.data.length - self.bytes_flashed;
}
console.log('STM32 - Writing to: 0x' + self.flashing_memory_address.toString(16) + ', ' + data_length + ' bytes');
@@ -364,8 +382,8 @@ STM32_protocol.prototype.upload_procedure = function(step) {
var checksum = array_out[0];
for (var i = 0; i < data_length; i++) {
- array_out[i + 1] = self.hex_to_flash[self.bytes_flashed]; // + 1 because of the first byte offset
- checksum ^= self.hex_to_flash[self.bytes_flashed];
+ array_out[i + 1] = self.parsed_hex.data[self.bytes_flashed]; // + 1 because of the first byte offset
+ checksum ^= self.parsed_hex.data[self.bytes_flashed];
self.bytes_flashed++;
self.flashing_memory_address++;
@@ -395,11 +413,11 @@ STM32_protocol.prototype.upload_procedure = function(step) {
break;
case 6:
// verify
- if (self.bytes_verified < self.hex_to_flash.length) {
- if ((self.bytes_verified + 256) <= self.hex_to_flash.length) {
+ if (self.bytes_verified < self.parsed_hex.data.length) {
+ if ((self.bytes_verified + 256) <= self.parsed_hex.data.length) {
var data_length = 256;
} else {
- var data_length = self.hex_to_flash.length - self.bytes_verified;
+ var data_length = self.parsed_hex.data.length - self.bytes_verified;
}
console.log('STM32 - Reading from: 0x' + self.verify_memory_address.toString(16) + ', ' + data_length + ' bytes');
@@ -433,7 +451,7 @@ STM32_protocol.prototype.upload_procedure = function(step) {
}
});
} else {
- var result = self.verify_flash(self.hex_to_flash, self.verify_hex);
+ var result = self.verify_flash(self.parsed_hex.data, self.verify_hex);
if (result) {
console.log('Verifying: done');
@@ -459,7 +477,11 @@ STM32_protocol.prototype.upload_procedure = function(step) {
self.send([self.command.go, 0xDE], 1, function(reply) { // 0x21 ^ 0xFF
if (self.verify_response(self.status.ACK, reply)) {
- self.send([0x08, 0x00, 0x00, 0x00, 0x08], 1, function(reply) {
+ var gt_address = self.parsed_hex.extended_linear_address;
+ var address = [(gt_address >> 24), (gt_address >> 16) & 0x00FF, (gt_address >> 8) & 0x00FF, (gt_address & 0x00FF)];
+ var address_checksum = address[0] ^ address[1] ^ address[2] ^ address[3];
+
+ self.send([address[0], address[1], address[2], address[3], address_checksum], 1, function(reply) {
if (self.verify_response(self.status.ACK, reply)) {
// disconnect
self.upload_procedure(99);
diff --git a/tabs/firmware_flasher.js b/tabs/firmware_flasher.js
index 755fbff8..b27d3091 100644
--- a/tabs/firmware_flasher.js
+++ b/tabs/firmware_flasher.js
@@ -3,7 +3,7 @@ function tab_initialize_firmware_flasher() {
GUI.active_tab = 'firmware_flasher';
var intel_hex = false; // standard intel hex in string format
- var raw_hex = false; // parsed raw hex in array format
+ var parsed_hex = false; // parsed raw hex in array format
$('#content').load("./tabs/firmware_flasher.html", function() {
// UI Hooks
@@ -31,9 +31,9 @@ function tab_initialize_firmware_flasher() {
STM32.GUI_status('Firmware loaded, ready for flashing');
intel_hex = e.target.result;
- raw_hex = read_hex_file(intel_hex);
+ parsed_hex = read_hex_file(intel_hex);
- $('span.size').html((raw_hex.length / 1000) + ' kB');
+ $('span.size').html((parsed_hex.bytes / 1000) + ' kB');
$('a.flash_firmware').removeClass('locked');
};
@@ -52,10 +52,10 @@ function tab_initialize_firmware_flasher() {
$.get('https://raw.github.com/multiwii/baseflight/master/obj/baseflight.hex', function(data) {
intel_hex = data;
- raw_hex = read_hex_file(intel_hex);
+ parsed_hex = read_hex_file(intel_hex);
$('span.path').html('Using remote Firmware');
- $('span.size').html((raw_hex.length / 1000) + ' kB');
+ $('span.size').html((parsed_hex.bytes / 1000) + ' kB');
$('a.flash_firmware').removeClass('locked');
STM32.GUI_status('Remote Firmware loaded, ready for flashing');
@@ -68,8 +68,8 @@ function tab_initialize_firmware_flasher() {
$('a.flash_firmware').click(function() {
if (!$(this).hasClass('locked')) {
if (!GUI.connect_lock) { // button disabled while flashing is in progress
- if (raw_hex != false) {
- STM32.hex_to_flash = raw_hex.slice(0);
+ if (parsed_hex != false) {
+ STM32.parsed_hex = parsed_hex;
STM32.connect();
} else {