From e62a1b07bf02c5277b7c3056823d69ec7f1b9e4f Mon Sep 17 00:00:00 2001 From: alienkenny Date: Fri, 6 Mar 2026 20:44:23 +0200 Subject: [PATCH] Missed erase function (#549) * Update swd.h * Update swd.cpp * Update usbflasher.cpp --- ESP32_AP-Flasher/include/swd.h | 1 + ESP32_AP-Flasher/src/swd.cpp | 14 +++++++++++++- ESP32_AP-Flasher/src/usbflasher.cpp | 13 ++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ESP32_AP-Flasher/include/swd.h b/ESP32_AP-Flasher/include/swd.h index cdaab847..13b1256c 100644 --- a/ESP32_AP-Flasher/include/swd.h +++ b/ESP32_AP-Flasher/include/swd.h @@ -56,6 +56,7 @@ class nrfswd : protected swd { uint8_t nrf_read_bank(uint32_t address, uint32_t buffer[], int size); uint8_t nrf_write_bank(uint32_t address, uint32_t buffer[], int size); + uint8_t nrf_erase_all(); uint8_t erase_all_flash(); uint8_t erase_uicr(); uint8_t erase_page(uint32_t page); diff --git a/ESP32_AP-Flasher/src/swd.cpp b/ESP32_AP-Flasher/src/swd.cpp index 867da1ff..f468d653 100644 --- a/ESP32_AP-Flasher/src/swd.cpp +++ b/ESP32_AP-Flasher/src/swd.cpp @@ -264,7 +264,19 @@ void nrfswd::write_register(uint32_t address, uint32_t value) { bool state3 = DP_Read(DP_RDBUFF, temp); // if (showDebug) Serial.printf("%i%i%i Write Register: 0x%08x : 0x%08x\r\n", state1, state2, state3, address, value); } - +uint8_t nrfswd::nrf_erase_all() { + nrf_port_selection(1); + nrf_write_port(1, AP_NRF_ERASEALL, 1); + long timeout = millis(); + while (nrf_read_port(1, AP_NRF_ERASEALLSTATUS)) { + if (millis() - timeout > 1000) return 1; + } + nrf_write_port(1, AP_NRF_ERASEALL, 0); + nrf_port_selection(0); + nrf_soft_reset(); + init(); + return 0; +} uint8_t nrfswd::erase_all_flash() { write_register(0x4001e504, 2); long timeout = millis(); diff --git a/ESP32_AP-Flasher/src/usbflasher.cpp b/ESP32_AP-Flasher/src/usbflasher.cpp index a7bd5e9f..f030cf2d 100644 --- a/ESP32_AP-Flasher/src/usbflasher.cpp +++ b/ESP32_AP-Flasher/src/usbflasher.cpp @@ -306,6 +306,7 @@ typedef enum { CMD_ERASE_FLASH = 26, CMD_ERASE_INFOPAGE = 27, + CMD_ERASE_ALL = 28, CMD_SAVE_MAC_FROM_FW = 40, CMD_PASS_THROUGH = 50, @@ -420,6 +421,16 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) { } sendFlasherAnswer(CMD_ERASE_INFOPAGE, NULL, 0, transportType); break; + case CMD_ERASE_ALL: + if (selectedController == CONTROLLER_NRF82511) { + if (nrfflasherp == nullptr) return; + nrfflasherp->nrf_erase_all(); + } else if (selectedController == CONTROLLER_CC) { + if (ccflasherp == nullptr) return; + ccflasherp->erase_chip(); + } + sendFlasherAnswer(CMD_ERASE_ALL, NULL, 0, transportType); + break; case CMD_SELECT_PORT: wsSerial("> select port"); selectedFlasherPort = cmd->data[0]; @@ -453,7 +464,7 @@ void processFlasherCommand(struct flasherCommand* cmd, uint8_t transportType) { break; } nrfflasherp->init(); - temp_buff[0] = (nrfflasherp->isConnected && !nrfflasherp->isLocked); + temp_buff[0] = nrfflasherp->isConnected ? (nrfflasherp->isLocked ? 2 : 1) : 0; sendFlasherAnswer(CMD_SELECT_NRF82511, temp_buff, 1, transportType); currentFlasherOffset = 0; selectedController = CONTROLLER_NRF82511;