flash: check if a block is erased in chunks of 32 bytes
This commit is contained in:
parent
f20e7128eb
commit
68593c2e6f
1 changed files with 16 additions and 6 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue