FlashSimBlockDevice
FlashSimBlockDevice 类层次结构
FlashSimBlockDevice 类是块设备 adpator,其目的是在底层块设备不支持此类行为时模拟闪存组件的行为。这包括以下内容:
- 支持
erase
API(用预定义的擦除值填充擦除单元)。 - 仅允许对擦除区域或其内容与用户给出的内容相同的区域进行编程。
- 支持
get\_erase\_value
API,返回预定义的擦除值。
构造函数需要以下内容:
- bd - 块设备支持 FlashSimBlockDevice。
- erase_value - 擦除操作后给擦除单元的每个字节赋予的值(默认为 0xFF)。
FlashSimBlockDevice 类参考
公共成员函数 | |
FlashSimBlockDevice (BlockDevice *bd, uint8_t erase_value=0xFF) | |
virtual int | init () |
virtual int | deinit () |
virtual int | sync () |
virtual int | read (void *buffer, bd_addr_t addr, bd_size_t size) |
virtual int | program (const void *buffer, bd_addr_t addr, bd_size_t size) |
virtual int | erase (bd_addr_t addr, bd_size_t size) |
virtual bd_size_t | get_read_size () const |
virtual bd_size_t | get_program_size () const |
virtual bd_size_t | get_erase_size () const |
virtual bd_size_t | get_erase_size (bd_addr_t addr) const |
virtual int | get_erase_value () const |
virtual bd_size_t | size () const |
公共成员函数继承自 BlockDevice | |
virtual | ~BlockDevice () |
virtual int | trim (bd_addr_t addr, bd_size_t size) |
bool | is_valid_read (bd_addr_t addr, bd_size_t size) const |
bool | is_valid_program (bd_addr_t addr, bd_size_t size) const |
bool | is_valid_erase (bd_addr_t addr, bd_size_t size) const |
FlashSimBlockDevice 示例
此 FlashSimBlockDevice 示例采用 HeapBlockDevice 并将其转换为模拟 Flash BD。
int erase_unit_size = 512;
HeapBlockDevice heap_bd(4 * erase_unit_size, 1, 4, erase_unit_size);
FlashSimBlockDevice flash_bd(&heap_bd, blank);
// This initializes the flash simulator block device (as well as the underlying heap block device)
int err = flash_bd.init();
uint8_t buf[16];
for (int i = 0; i < sizeof(buf); i++) {
buf[i] = i;
}
// This will fail, as erase unit in address 0 has not been erased
err = flash_bd.program(buf, 0, sizeof(buf));
// Erase the erase unit at address 0
err = flash_bd.erase(0, erase_unit_size);
// This will succeed now after erasing
err = flash_bd.program(buf, 0, sizeof(buf));
相关内容
- HeapBlockDevice API 参考。