1 /* 2 * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef _SpiFlash_H_ 8 #define _SpiFlash_H_ 9 10 #include <stdbool.h> 11 12 #include "esp_err.h" 13 #include "esp_rom_spiflash.h" 14 15 /** 16 * @brief This class is used to emulate flash devices. 17 * 18 */ 19 class SpiFlash 20 { 21 22 public: 23 SpiFlash(); 24 ~SpiFlash(); 25 26 void init(uint32_t chip_size, uint32_t block_size, uint32_t sector_size, uint32_t page_size, const char* partitions_bin); 27 28 uint32_t get_chip_size(); 29 uint32_t get_block_size(); 30 uint32_t get_sector_size(); 31 uint32_t get_page_size(); 32 33 esp_rom_spiflash_result_t erase_block(uint32_t block); 34 esp_rom_spiflash_result_t erase_sector(uint32_t sector); 35 esp_rom_spiflash_result_t erase_page(uint32_t page); 36 37 esp_rom_spiflash_result_t write(uint32_t dest_addr, const void *src, uint32_t size); 38 esp_rom_spiflash_result_t read(uint32_t src_addr, void *dest, uint32_t size); 39 40 uint32_t get_erase_cycles(uint32_t sector); 41 uint32_t get_total_erase_cycles(); 42 43 void set_erase_cycles_limit(uint32_t limit); 44 void set_total_erase_cycles_limit(uint32_t limit); 45 46 void reset_erase_cycles(); 47 void reset_total_erase_cycles(); 48 49 uint8_t* get_memory_ptr(uint32_t src_address); 50 51 private: 52 uint32_t chip_size; 53 uint32_t block_size; 54 uint32_t sector_size; 55 uint32_t page_size; 56 57 uint32_t blocks; 58 uint32_t sectors; 59 uint32_t pages; 60 61 uint8_t* memory; 62 63 bool* erase_states; 64 65 uint32_t* erase_cycles; 66 uint32_t erase_cycles_limit; 67 uint32_t total_erase_cycles; 68 uint32_t total_erase_cycles_limit; 69 70 void deinit(); 71 }; 72 73 #endif // _SpiFlash_H_ 74