mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-19 14:25:14 +03:00
Support EXST flashing.
This commit is contained in:
parent
52e3aa223c
commit
2cfc173ee9
1 changed files with 71 additions and 27 deletions
|
@ -337,6 +337,15 @@ STM32DFU_protocol.prototype.getChipInfo = function (_interface, callback) {
|
||||||
// F40x: "@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg"
|
// F40x: "@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg"
|
||||||
// F72x: "@Internal Flash /0x08000000/04*016Kg,01*64Kg,03*128Kg"
|
// F72x: "@Internal Flash /0x08000000/04*016Kg,01*64Kg,03*128Kg"
|
||||||
// F74x: "@Internal Flash /0x08000000/04*032Kg,01*128Kg,03*256Kg"
|
// F74x: "@Internal Flash /0x08000000/04*032Kg,01*128Kg,03*256Kg"
|
||||||
|
|
||||||
|
// H750 SPRacing H7 EXST: "@External Flash /0x90000000/998*128Kg,1*128Kg,4*128Kg,21*128Ka"
|
||||||
|
// H750 SPRacing H7 EXST: "@External Flash /0x90000000/1001*128Kg,3*128Kg,20*128Ka" - Early BL firmware with incorrect string, treat as above.
|
||||||
|
|
||||||
|
// H750 Partitions: Flash, Config, Firmware, 1x BB Management block + x BB Replacement blocks)
|
||||||
|
if (str == "@External Flash /0x90000000/1001*128Kg,3*128Kg,20*128Ka") {
|
||||||
|
str = "@External Flash /0x90000000/998*128Kg,1*128Kg,4*128Kg,21*128Ka"
|
||||||
|
}
|
||||||
|
|
||||||
// split main into [location, start_addr, sectors]
|
// split main into [location, start_addr, sectors]
|
||||||
|
|
||||||
var tmp0 = str.replace(/[^\x20-\x7E]+/g, "");
|
var tmp0 = str.replace(/[^\x20-\x7E]+/g, "");
|
||||||
|
@ -507,7 +516,7 @@ STM32DFU_protocol.prototype.clearStatus = function (callback) {
|
||||||
STM32DFU_protocol.prototype.loadAddress = function (address, callback, abort) {
|
STM32DFU_protocol.prototype.loadAddress = function (address, callback, abort) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.controlTransfer('out', self.request.DNLOAD, 0, 0, 0, [0x21, address, (address >> 8), (address >> 16), (address >> 24)], function () {
|
self.controlTransfer('out', self.request.DNLOAD, 0, 0, 0, [0x21, address & 0xff, (address >> 8) & 0xff, (address >> 16) & 0xff, (address >> 24) & 0xff], function () {
|
||||||
self.controlTransfer('in', self.request.GETSTATUS, 0, 0, 6, 0, function (data) {
|
self.controlTransfer('in', self.request.GETSTATUS, 0, 0, 6, 0, function (data) {
|
||||||
if (data[4] == self.state.dfuDNBUSY) {
|
if (data[4] == self.state.dfuDNBUSY) {
|
||||||
var delay = data[1] | (data[2] << 8) | (data[3] << 16);
|
var delay = data[1] | (data[2] << 8) | (data[3] << 16);
|
||||||
|
@ -560,31 +569,59 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
|
||||||
console.log('Failed to detect chip info, resultCode: ' + resultCode);
|
console.log('Failed to detect chip info, resultCode: ' + resultCode);
|
||||||
self.upload_procedure(99);
|
self.upload_procedure(99);
|
||||||
} else {
|
} else {
|
||||||
if (typeof chipInfo.internal_flash === "undefined") {
|
if (typeof chipInfo.internal_flash !== "undefined") {
|
||||||
console.log('Failed to detect internal flash');
|
// internal flash
|
||||||
self.upload_procedure(99);
|
self.chipInfo = chipInfo;
|
||||||
}
|
|
||||||
|
self.flash_layout = chipInfo.internal_flash;
|
||||||
self.chipInfo = chipInfo;
|
self.available_flash_size = self.flash_layout.total_size - (self.hex.start_linear_address - self.flash_layout.start_address);
|
||||||
|
|
||||||
self.flash_layout = chipInfo.internal_flash;
|
GUI.log(i18n.getMessage('dfu_device_flash_info', (self.flash_layout.total_size / 1024).toString()));
|
||||||
self.available_flash_size = self.flash_layout.total_size - (self.hex.start_linear_address - self.flash_layout.start_address);
|
|
||||||
|
if (self.hex.bytes_total > self.available_flash_size) {
|
||||||
GUI.log(i18n.getMessage('dfu_device_flash_info', (self.flash_layout.total_size / 1024).toString()));
|
GUI.log(i18n.getMessage('dfu_error_image_size',
|
||||||
|
[(self.hex.bytes_total / 1024.0).toFixed(1),
|
||||||
if (self.hex.bytes_total > self.available_flash_size) {
|
(self.available_flash_size / 1024.0).toFixed(1)]));
|
||||||
GUI.log(i18n.getMessage('dfu_error_image_size',
|
self.upload_procedure(99);
|
||||||
[(self.hex.bytes_total / 1024.0).toFixed(1),
|
} else {
|
||||||
(self.available_flash_size / 1024.0).toFixed(1)]));
|
self.getFunctionalDescriptor(0, function (descriptor, resultCode) {
|
||||||
self.upload_procedure(99);
|
self.transferSize = resultCode ? 2048 : descriptor.wTransferSize;
|
||||||
} else {
|
console.log('Using transfer size: ' + self.transferSize);
|
||||||
self.getFunctionalDescriptor(0, function (descriptor, resultCode) {
|
self.clearStatus(function () {
|
||||||
self.transferSize = resultCode ? 2048 : descriptor.wTransferSize;
|
self.upload_procedure(1);
|
||||||
console.log('Using transfer size: ' + self.transferSize);
|
});
|
||||||
self.clearStatus(function () {
|
|
||||||
self.upload_procedure(1);
|
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
} else if (typeof chipInfo.external_flash !== "undefined") {
|
||||||
|
// external flash, flash to the 3rd partition.
|
||||||
|
self.chipInfo = chipInfo;
|
||||||
|
self.flash_layout = chipInfo.external_flash;
|
||||||
|
|
||||||
|
var firmware_partition_index = 2;
|
||||||
|
var firmware_sectors = self.flash_layout.sectors[firmware_partition_index];
|
||||||
|
var firmware_partition_size = firmware_sectors.total_size;
|
||||||
|
|
||||||
|
self.available_flash_size = firmware_partition_size;
|
||||||
|
|
||||||
|
GUI.log(i18n.getMessage('dfu_device_flash_info', (self.flash_layout.total_size / 1024).toString()));
|
||||||
|
|
||||||
|
if (self.hex.bytes_total > self.available_flash_size) {
|
||||||
|
GUI.log(i18n.getMessage('dfu_error_image_size',
|
||||||
|
[(self.hex.bytes_total / 1024.0).toFixed(1),
|
||||||
|
(self.available_flash_size / 1024.0).toFixed(1)]));
|
||||||
|
self.upload_procedure(99);
|
||||||
|
} else {
|
||||||
|
self.getFunctionalDescriptor(0, function (descriptor, resultCode) {
|
||||||
|
self.transferSize = resultCode ? 2048 : descriptor.wTransferSize;
|
||||||
|
console.log('Using transfer size: ' + self.transferSize);
|
||||||
|
self.clearStatus(function () {
|
||||||
|
self.upload_procedure(2); // no option bytes to deal with
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log('Failed to detect internal or external flash');
|
||||||
|
self.upload_procedure(99);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -607,7 +644,7 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
|
||||||
var delay = data[1] | (data[2] << 8) | (data[3] << 16);
|
var delay = data[1] | (data[2] << 8) | (data[3] << 16);
|
||||||
var total_delay = delay + 20000; // wait at least 20 seconds to make sure the user does not disconnect the board while erasing the memory
|
var total_delay = delay + 20000; // wait at least 20 seconds to make sure the user does not disconnect the board while erasing the memory
|
||||||
var timeSpentWaiting = 0;
|
var timeSpentWaiting = 0;
|
||||||
var incr = 1000; // one sec incements
|
var incr = 1000; // one sec increments
|
||||||
var waitForErase = setInterval(function () {
|
var waitForErase = setInterval(function () {
|
||||||
|
|
||||||
TABS.firmware_flasher.flashProgress(Math.min(timeSpentWaiting / total_delay, 1) * 100);
|
TABS.firmware_flasher.flashProgress(Math.min(timeSpentWaiting / total_delay, 1) * 100);
|
||||||
|
@ -758,9 +795,16 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (erase_pages.length == 0) {
|
||||||
|
console.log('Aborting, No flash pages to erase');
|
||||||
|
self.upload_procedure(99);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TABS.firmware_flasher.flashingMessage(i18n.getMessage('stm32Erase'), TABS.firmware_flasher.FLASH_MESSAGE_TYPES.NEUTRAL);
|
TABS.firmware_flasher.flashingMessage(i18n.getMessage('stm32Erase'), TABS.firmware_flasher.FLASH_MESSAGE_TYPES.NEUTRAL);
|
||||||
console.log('Executing local chip erase');
|
console.log('Executing local chip erase', erase_pages);
|
||||||
|
|
||||||
var page = 0;
|
var page = 0;
|
||||||
var total_erased = 0; // bytes
|
var total_erased = 0; // bytes
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue