mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #10478 from chrissnow/Dataflash-Erase_Size
DataFlash: Change erase size to pages to reduce memory usage.pull/10631/head
commit
0560ecc558
|
@ -61,6 +61,7 @@ enum opcode {
|
||||||
DATAFLASH_OP_PROGRAM_DIRECT = 0x02, // Program through Buffer 1 without Built-In Erase
|
DATAFLASH_OP_PROGRAM_DIRECT = 0x02, // Program through Buffer 1 without Built-In Erase
|
||||||
DATAFLASH_OP_PROGRAM_DIRECT_WITH_ERASE = 0x82,
|
DATAFLASH_OP_PROGRAM_DIRECT_WITH_ERASE = 0x82,
|
||||||
DATAFLASH_OP_ERASE_BLOCK = 0x50,
|
DATAFLASH_OP_ERASE_BLOCK = 0x50,
|
||||||
|
DATAFLASH_OP_ERASE_PAGE = 0x81,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* non-exhaustive command list */
|
/* non-exhaustive command list */
|
||||||
|
@ -447,17 +448,17 @@ int DataFlashBlockDevice::erase(bd_addr_t addr, bd_size_t size)
|
||||||
/* disable write protection */
|
/* disable write protection */
|
||||||
_write_enable(true);
|
_write_enable(true);
|
||||||
|
|
||||||
/* erase one block at a time until the full size has been erased */
|
/* erase one page at a time until the full size has been erased */
|
||||||
uint32_t erased = 0;
|
uint32_t erased = 0;
|
||||||
while (erased < size) {
|
while (erased < size) {
|
||||||
|
|
||||||
/* set block erase opcode */
|
/* set page erase opcode */
|
||||||
uint32_t command = DATAFLASH_OP_ERASE_BLOCK;
|
uint32_t command = DATAFLASH_OP_ERASE_PAGE;
|
||||||
|
|
||||||
/* translate address */
|
/* translate address */
|
||||||
uint32_t address = _translate_address(addr);
|
uint32_t address = _translate_address(addr);
|
||||||
|
|
||||||
/* set block address */
|
/* set page address */
|
||||||
command = (command << 8) | ((address >> 16) & 0xFF);
|
command = (command << 8) | ((address >> 16) & 0xFF);
|
||||||
command = (command << 8) | ((address >> 8) & 0xFF);
|
command = (command << 8) | ((address >> 8) & 0xFF);
|
||||||
command = (command << 8) | (address & 0xFF);
|
command = (command << 8) | (address & 0xFF);
|
||||||
|
@ -474,8 +475,8 @@ int DataFlashBlockDevice::erase(bd_addr_t addr, bd_size_t size)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update loop variables */
|
/* update loop variables */
|
||||||
addr += _block_size;
|
addr += _page_size;
|
||||||
erased += _block_size;
|
erased += _page_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* enable write protection */
|
/* enable write protection */
|
||||||
|
@ -503,8 +504,8 @@ bd_size_t DataFlashBlockDevice::get_program_size() const
|
||||||
bd_size_t DataFlashBlockDevice::get_erase_size() const
|
bd_size_t DataFlashBlockDevice::get_erase_size() const
|
||||||
{
|
{
|
||||||
_mutex.lock();
|
_mutex.lock();
|
||||||
DEBUG_PRINTF("erase size: %" PRIX16 "\r\n", _block_size);
|
DEBUG_PRINTF("erase size: %" PRIX16 "\r\n", _page_size);
|
||||||
bd_size_t block_size = _block_size;
|
bd_size_t block_size = _page_size;
|
||||||
_mutex.unlock();
|
_mutex.unlock();
|
||||||
return block_size;
|
return block_size;
|
||||||
}
|
}
|
||||||
|
@ -512,8 +513,8 @@ bd_size_t DataFlashBlockDevice::get_erase_size() const
|
||||||
bd_size_t DataFlashBlockDevice::get_erase_size(bd_addr_t addr) const
|
bd_size_t DataFlashBlockDevice::get_erase_size(bd_addr_t addr) const
|
||||||
{
|
{
|
||||||
_mutex.lock();
|
_mutex.lock();
|
||||||
DEBUG_PRINTF("erase size: %" PRIX16 "\r\n", _block_size);
|
DEBUG_PRINTF("erase size: %" PRIX16 "\r\n", _page_size);
|
||||||
bd_size_t block_size = _block_size;
|
bd_size_t block_size = _page_size;
|
||||||
_mutex.unlock();
|
_mutex.unlock();
|
||||||
return block_size;
|
return block_size;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue