spiFlash: force subsector only for SST26VF032B
This commit is contained in:
parent
02e93ffec6
commit
86fa1e01de
|
|
@ -121,15 +121,26 @@ int SPIFlash::block64_erase(int addr)
|
|||
|
||||
int SPIFlash::sectors_erase(int base_addr, int size)
|
||||
{
|
||||
|
||||
// check if chip support sector and subsector erase
|
||||
bool subsector_rdy = false, sector_rdy = true;
|
||||
if (_flash_model) {
|
||||
if (_flash_model->subsector_erase)
|
||||
subsector_rdy = true;
|
||||
if (!_flash_model->sector_erase)
|
||||
sector_rdy = false;
|
||||
}
|
||||
int ret = 0;
|
||||
int start_addr = base_addr;
|
||||
/* compute end_addr to be multiple of 4Kb */
|
||||
int end_addr = (base_addr + size + 0xfff) & ~0xfff;
|
||||
if (!_flash_model->subsector_erase)
|
||||
if (!subsector_rdy)
|
||||
end_addr = (base_addr + size + 0xffff) & ~0xffff;
|
||||
ProgressBar progress("Erasing", end_addr, 50, _verbose < 0);
|
||||
/* start with block size (64Kb) */
|
||||
int step = 0x10000;
|
||||
if (!sector_rdy)
|
||||
step = 0x1000;
|
||||
|
||||
for (int addr = start_addr; addr < end_addr; addr += step) {
|
||||
if (write_enable() == -1) {
|
||||
|
|
@ -138,7 +149,7 @@ int SPIFlash::sectors_erase(int base_addr, int size)
|
|||
}
|
||||
|
||||
/* if block erase + addr end out of end_addr -> use sector_erase (4Kb) */
|
||||
if (addr + 0x10000 > end_addr && _flash_model && _flash_model->subsector_erase) {
|
||||
if (!sector_rdy || (addr + step > end_addr && subsector_rdy)) {
|
||||
step = 0x1000;
|
||||
ret = sector_erase(addr);
|
||||
} else {
|
||||
|
|
@ -359,6 +370,7 @@ bool SPIFlash::verify(const int &base_addr, const uint8_t *data,
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
for (int ii = 0; ii < rd_burst; ii++) {
|
||||
if ((uint8_t)verify_data[ii] != data[i+ii]) {
|
||||
progress.fail();
|
||||
|
|
|
|||
|
|
@ -129,8 +129,8 @@ static std::map <uint32_t, flash_t> flash_list = {
|
|||
.manufacturer = "microchip",
|
||||
.model = "SST26VF032B",
|
||||
.nr_sector = 64,
|
||||
.sector_erase = true,
|
||||
.subsector_erase = false,
|
||||
.sector_erase = false,
|
||||
.subsector_erase = true,
|
||||
.has_extended = false,
|
||||
.tb_otp = false,
|
||||
.tb_offset = 0,
|
||||
|
|
|
|||
Loading…
Reference in New Issue