flash: add and implemented flash_is_erased() for sandbox flash

tags/0.1.0
S.J.R. van Schaik 7 years ago
parent e65110f084
commit 20125827b6
  1. 4
      include/flash.h
  2. 31
      source/core/flash.c
  3. 1
      source/drivers/sandbox_flash.c

@ -12,6 +12,7 @@ struct flash_ops {
int (* write)(struct flash_dev *dev, uint32_t addr, const void *data,
size_t len);
int (* copy)(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len);
int (* is_erased)(struct flash_dev *dev, uint32_t addr);
int (* erase)(struct flash_dev *dev, uint32_t addr);
};
@ -22,6 +23,8 @@ struct flash_dev {
uint8_t log2_block_size;
};
int default_flash_is_erased(struct flash_dev *dev, uint32_t addr);
struct flash_dev *flash_probe(void);
void flash_release(struct flash_dev *dev);
size_t flash_get_size(struct flash_dev *dev);
@ -30,4 +33,5 @@ int flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len);
int flash_write(struct flash_dev *dev, uint32_t addr, const void *data,
size_t len);
int flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len);
int flash_is_erased(struct flash_dev *dev, uint32_t addr, size_t len);
int flash_erase(struct flash_dev *dev, uint32_t addr, size_t len);

@ -3,6 +3,22 @@
#include <flash.h>
int default_flash_is_erased(struct flash_dev *dev, uint32_t addr)
{
uint8_t data[1 << dev->log2_block_size];
size_t i;
if (flash_read(dev, addr, data, sizeof(data)) < 0)
return 0;
for (i = 0; i < sizeof(data); ++i) {
if (data[i] != 0xff)
return 0;
}
return 1;
}
size_t flash_get_size(struct flash_dev *dev)
{
if (!dev)
@ -44,6 +60,21 @@ int flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len)
return dev->ops->copy(dev, dst, src, len);
}
int flash_is_erased(struct flash_dev *dev, uint32_t addr, size_t len)
{
if (!dev)
return -1;
while (len--) {
if (!dev->ops->is_erased(dev, addr))
return 0;
++addr;
}
return 1;
}
int flash_erase(struct flash_dev *dev, uint32_t addr, size_t len)
{
if (!dev)

@ -32,6 +32,7 @@ static struct flash_ops stdio_flash_ops = {
.read = stdio_flash_read,
.write = stdio_flash_write,
.copy = stdio_flash_copy,
.is_erased = default_flash_is_erased,
.erase = stdio_flash_erase,
};

Loading…
Cancel
Save