spiFlash: bulk_erase method: allows BP bypass and printXX with a verbose level

This commit is contained in:
Gwenhael Goavec-Merou 2025-12-15 17:16:08 +01:00
parent e302bb6edc
commit a7e4303563
2 changed files with 44 additions and 13 deletions

View File

@ -93,29 +93,54 @@ SPIFlash::SPIFlash(SPIInterface *spi, bool unprotect, int8_t verbose):
read_id(); read_id();
} }
int SPIFlash::bulk_erase() int SPIFlash::bulk_erase(bool verbose, bool skip_bp_check)
{ {
int ret, ret2 = 0; int ret = 0, ret2 = 0;
uint8_t bp = 0;
uint32_t timeout=1000000; uint32_t timeout=1000000;
uint8_t bp = get_bp(); if (!skip_bp_check) {
if (bp != 0) { if (verbose)
if (!_unprotect) { printInfo("Check Flash Protection: ", false);
printError("Error: Can't erase flash: block protection is set"); bp = get_bp();
printError(" can't unlock without --unprotect-flash"); if (bp != 0) {
return -1; if (!_unprotect) {
printError("FAIL");
printError("Error: Can't erase flash: block protection is set");
printError(" can't unlock without --unprotect-flash");
return -1;
}
ret = disable_protection();
} }
if ((ret = disable_protection()) != 0) if (verbose) {
if (ret == 0)
printSuccess("DONE");
else
printError("FAIL");
}
if (ret != 0)
return ret; return ret;
} }
if ((ret = write_enable()) != 0) if (verbose)
printInfo("Bulk erase: ", false);
if ((ret = write_enable()) != 0) {
printError("FAIL");
return ret; return ret;
}
ret2 = _spi->spi_put(FLASH_CE, NULL, NULL, 0); ret2 = _spi->spi_put(FLASH_CE, NULL, NULL, 0);
if (ret2 == 0) if (ret2 == 0)
ret2 = _spi->spi_wait(FLASH_RDSR, FLASH_RDSR_WIP, 0x00, timeout); ret2 = _spi->spi_wait(FLASH_RDSR, FLASH_RDSR_WIP, 0x00, timeout);
if (verbose) {
if (ret2 == 0)
printSuccess("DONE");
else
printError("FAIL");
}
if (bp != 0) if (!skip_bp_check && (bp != 0))
ret = enable_protection(bp); ret = enable_protection(bp);
return ret | ret2; return ret | ret2;

View File

@ -71,8 +71,14 @@ class SPIFlash {
* \return false if unlock fail * \return false if unlock fail
*/ */
bool global_unlock(); bool global_unlock();
/* erase */ /*!
int bulk_erase(); * \brief bulk_erase: full Flash erase
* \param[in] verbose: display message for each steps
* \param[in] skip_bp_check: check if the flash is protected
* before erase, re-apply protect after.
* \return 0 for success, -1 otherwise
*/
int bulk_erase(bool verbose=false, bool skip_bp_check=false);
/*! /*!
* \brief erase one sector (4Kb) * \brief erase one sector (4Kb)
*/ */