diff options
| author | Damien George <damien.p.george@gmail.com> | 2014-01-04 12:32:42 +0000 |
|---|---|---|
| committer | Damien George <damien.p.george@gmail.com> | 2014-01-04 12:32:42 +0000 |
| commit | cb3b6ce7ae83d2e320a3175b3728782d5383665e (patch) | |
| tree | 80207e010d46bc7a8b93c13629e32cacd09ee1f7 | |
| parent | 597bb2f2496fd2d89a69ad6b00ba212359aa96bf (diff) | |
| parent | 2c62e262b2c84b077355d67c6302bd02f6a28552 (diff) | |
Merge git://github.com/stevie67/micropython into stevie67-master
| -rw-r--r-- | stm/storage.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/stm/storage.c b/stm/storage.c index 6878de22e..7342a53ac 100644 --- a/stm/storage.c +++ b/stm/storage.c @@ -49,6 +49,16 @@ static uint8_t *cache_get_addr_for_write(uint32_t flash_addr) { return (uint8_t*)CACHE_MEM_START_ADDR + flash_addr - flash_sector_start; } +static uint8_t *cache_get_addr_for_read(uint32_t flash_addr) { + uint32_t flash_sector_start; + uint32_t flash_sector_size; + uint32_t flash_sector_id = flash_get_sector_info(flash_addr, &flash_sector_start, &flash_sector_size); + if (cache_flash_sector_id == flash_sector_id) + return (uint8_t*)CACHE_MEM_START_ADDR + flash_addr - flash_sector_start; + // not in cache, copy straight from flash + return (uint8_t*)flash_addr; +} + void storage_init(void) { if (!is_initialised) { cache_flash_sector_id = 0; @@ -131,8 +141,8 @@ bool storage_read_block(uint8_t *dest, uint32_t block) { return true; } else if (FLASH_PART1_START_BLOCK <= block && block < FLASH_PART1_START_BLOCK + FLASH_PART1_NUM_BLOCKS) { - // non-MBR block, just copy straight from flash - uint8_t *src = (uint8_t*)FLASH_MEM_START_ADDR + (block - FLASH_PART1_START_BLOCK) * BLOCK_SIZE; + uint32_t flash_addr = FLASH_MEM_START_ADDR + (block - FLASH_PART1_START_BLOCK) * BLOCK_SIZE; + uint8_t *src = cache_get_addr_for_read(flash_addr); memcpy(dest, src, BLOCK_SIZE); return true; |
