mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-16 04:45:20 +03:00
Merge pull request #1861 from jflyper/bfcdev-h7-rev-v-erase-weirdness-workaround
Workaround for H7 Rev.V weirdness on erase beyond 1MB
This commit is contained in:
commit
d022cb827e
1 changed files with 38 additions and 11 deletions
|
@ -803,6 +803,19 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
|
||||||
var page = 0;
|
var page = 0;
|
||||||
var total_erased = 0; // bytes
|
var total_erased = 0; // bytes
|
||||||
|
|
||||||
|
var erase_page_next = function() {
|
||||||
|
TABS.firmware_flasher.flashProgress((page + 1) / erase_pages.length * 100);
|
||||||
|
page++;
|
||||||
|
|
||||||
|
if(page == erase_pages.length) {
|
||||||
|
console.log("Erase: complete");
|
||||||
|
GUI.log(i18n.getMessage('dfu_erased_kilobytes', (total_erased / 1024).toString()));
|
||||||
|
self.upload_procedure(4);
|
||||||
|
} else {
|
||||||
|
erase_page();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var erase_page = function() {
|
var erase_page = function() {
|
||||||
var page_addr = erase_pages[page].page * self.flash_layout.sectors[erase_pages[page].sector].page_size +
|
var page_addr = erase_pages[page].page * self.flash_layout.sectors[erase_pages[page].sector].page_size +
|
||||||
self.flash_layout.sectors[erase_pages[page].sector].start_address;
|
self.flash_layout.sectors[erase_pages[page].sector].start_address;
|
||||||
|
@ -818,18 +831,32 @@ STM32DFU_protocol.prototype.upload_procedure = function (step) {
|
||||||
|
|
||||||
setTimeout(function () {
|
setTimeout(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.dfuDNLOAD_IDLE) {
|
|
||||||
// update progress bar
|
|
||||||
TABS.firmware_flasher.flashProgress((page + 1) / erase_pages.length * 100);
|
|
||||||
page++;
|
|
||||||
|
|
||||||
if(page == erase_pages.length) {
|
if (data[4] == self.state.dfuDNBUSY) {
|
||||||
console.log("Erase: complete");
|
|
||||||
GUI.log(i18n.getMessage('dfu_erased_kilobytes', (total_erased / 1024).toString()));
|
//
|
||||||
self.upload_procedure(4);
|
// H743 Rev.V (probably other H7 Rev.Vs also) remains in dfuDNBUSY state after the specified delay time.
|
||||||
}
|
// STM32CubeProgrammer deals with behavior with an undocumented procedure as follows.
|
||||||
else
|
// 1. Issue DFU_CLRSTATUS, which ends up with (14,10) = (errUNKNOWN, dfuERROR)
|
||||||
erase_page();
|
// 2. Issue another DFU_CLRSTATUS which delivers (0,2) = (OK, dfuIDLE)
|
||||||
|
// 3. Treat the current erase successfully finished.
|
||||||
|
// Here, we call clarStatus to get to the dfuIDLE state.
|
||||||
|
//
|
||||||
|
|
||||||
|
console.log('erase_page: dfuDNBUSY after timeout, clearing');
|
||||||
|
|
||||||
|
self.clearStatus(function() {
|
||||||
|
self.controlTransfer('in', self.request.GETSTATUS, 0, 0, 6, 0, function (data) {
|
||||||
|
if (data[4] == self.state.dfuIDLE) {
|
||||||
|
erase_page_next();
|
||||||
|
} else {
|
||||||
|
console.log('Failed to erase page 0x' + page_addr.toString(16) + ' (did not reach dfuIDLE after clearing');
|
||||||
|
self.upload_procedure(99);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
} else if (data[4] == self.state.dfuDNLOAD_IDLE) {
|
||||||
|
erase_page_next();
|
||||||
} else {
|
} else {
|
||||||
console.log('Failed to erase page 0x' + page_addr.toString(16));
|
console.log('Failed to erase page 0x' + page_addr.toString(16));
|
||||||
self.upload_procedure(99);
|
self.upload_procedure(99);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue