Missed erase function (#549)

* Update swd.h

* Update swd.cpp

* Update usbflasher.cpp
This commit is contained in:
alienkenny
2026-03-06 20:44:23 +02:00
committed by GitHub
parent 4d06ef546d
commit e62a1b07bf
3 changed files with 26 additions and 2 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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;