Mercurial > flash_v2
diff packages/io/flash/current/src/flash.c @ 195:67850532eebb
Merge from eCos master repository on 2001-11-02-06:43:03-GMT
| author | jlarmour |
|---|---|
| date | Fri, 02 Nov 2001 16:12:33 +0000 |
| parents | 678094f34118 |
| children | e0c0827131d1 |
line wrap: on
line diff
--- a/packages/io/flash/current/src/flash.c +++ b/packages/io/flash/current/src/flash.c @@ -202,8 +202,21 @@ flash_erase(void *addr, int len, void ** FLASH_Enable(block, end_addr); while (block < end_addr) { // Supply the blocksize for a gross check for erase success - stat = (*_flash_erase_block)(block, flash_info.block_size); - stat = flash_hwr_map_error(stat); + int i; + unsigned char *dp; + bool erased = true; + + dp = (unsigned char *)block; + for (i = 0; i < flash_info.block_size; i++) { + if (*dp++ != (unsigned char)0xFF) { + erased = false; + break; + } + } + if (!erased) { + stat = (*_flash_erase_block)(block, flash_info.block_size); + stat = flash_hwr_map_error(stat); + } if (stat) { *err_addr = (void *)block; break; @@ -275,7 +288,7 @@ flash_program(void *_addr, void *_data, stat = flash_hwr_map_error(stat); #ifdef CYGSEM_IO_FLASH_VERIFY_PROGRAM if (0 == stat) // Claims to be OK - if (memcmp(addr, data, size) != 0) { + if (memcmp(addr, data, size) != 0) { stat = 0x0BAD; (*flash_info.pf)("V"); }
