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

tags/0.1.0
S.J.R. van Schaik 8 years ago
parent f20e7128eb
commit 68593c2e6f
  1. 22
      source/core/flash.c

@ -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;
while (len) {
nbytes = min(32, len);
for (i = 0; i < sizeof(data); ++i) {
if (data[i] != 0xff)
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;

Loading…
Cancel
Save