flash: check if a block is erased in chunks of 32 bytes

This commit is contained in:
S.J.R. van Schaik 2017-06-14 16:19:02 +02:00
parent f20e7128eb
commit 68593c2e6f

View file

@ -2,18 +2,28 @@
#include <stdlib.h>
#include <flash.h>
#include <macros.h>
int default_flash_is_erased(struct flash_dev *dev, uint32_t addr)
{
uint8_t data[1 << dev->log2_block_size];
size_t i;
uint8_t data[32];
size_t i, nbytes, len = 1 << dev->log2_block_size;
if (flash_read(dev, addr << dev->log2_block_size, data, sizeof(data)) == 0)
return 0;
addr <<= dev->log2_block_size;
for (i = 0; i < sizeof(data); ++i) {
if (data[i] != 0xff)
while (len) {
nbytes = min(32, len);
if (flash_read(dev, addr, data, nbytes) == 0)
return 0;
for (i = 0; i < sizeof(data); ++i) {
if (data[i] != 0xff)
return 0;
}
addr += nbytes;
len -= nbytes;
}
return 1;