flash_mock.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "SpiFlash.h"
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "esp_spi_flash.h"
  5. #include "esp_partition.h"
  6. #include "esp_err.h"
  7. #include "esp32/rom/spi_flash.h"
  8. SpiFlash spiflash = SpiFlash();
  9. esp_rom_spiflash_chip_t g_rom_flashchip;
  10. size_t convert_chip_size_string(const char* chip_size_str)
  11. {
  12. int size = 0;
  13. if (strcmp(chip_size_str, "1MB") == 0) {
  14. size = 0x100000;
  15. }
  16. else if (strcmp(chip_size_str, "2MB") == 0) {
  17. size = 0x200000;
  18. }
  19. else if (strcmp(chip_size_str, "4MB") == 0) {
  20. size = 0x400000;
  21. }
  22. else if (strcmp(chip_size_str, "8MB") == 0) {
  23. size = 0x800000;
  24. }
  25. else if (strcmp(chip_size_str, "16MB") == 0) {
  26. size = 0x1000000;
  27. } else {
  28. size = 0;
  29. }
  30. return size;
  31. }
  32. extern "C" void _spi_flash_init(const char* chip_size, size_t block_size, size_t sector_size, size_t page_size, const char* partitions_bin)
  33. {
  34. size_t size = convert_chip_size_string(chip_size);
  35. assert(size != 0);
  36. spiflash.init(size, block_size, sector_size, page_size, partitions_bin);
  37. g_rom_flashchip.chip_size = size;
  38. g_rom_flashchip.block_size = block_size;
  39. g_rom_flashchip.sector_size = sector_size;
  40. g_rom_flashchip.page_size = page_size;
  41. }
  42. extern "C" esp_err_t spi_flash_mmap(size_t src_addr, size_t size, spi_flash_mmap_memory_t memory,
  43. const void** out_ptr, spi_flash_mmap_handle_t* out_handle)
  44. {
  45. *out_handle = 0;
  46. *out_ptr = (void*)spiflash.get_memory_ptr(src_addr);
  47. return ESP_OK;
  48. }
  49. extern "C" void spi_flash_munmap(spi_flash_mmap_handle_t handle)
  50. {
  51. return;
  52. }
  53. extern "C" int spi_flash_get_total_erase_cycles(void)
  54. {
  55. return spiflash.get_total_erase_cycles();
  56. }
  57. extern "C" int spi_flash_get_erase_cycles(size_t sector)
  58. {
  59. return spiflash.get_erase_cycles(sector);
  60. }
  61. extern "C" esp_err_t bootloader_flash_unlock(void)
  62. {
  63. return ESP_OK;
  64. }
  65. esp_rom_spiflash_result_t esp_rom_spiflash_read(uint32_t target, uint32_t *dest, int32_t len)
  66. {
  67. return spiflash.read(target, dest, len);
  68. }
  69. esp_rom_spiflash_result_t esp_rom_spiflash_erase_block(uint32_t block)
  70. {
  71. return spiflash.erase_block(block);
  72. }
  73. esp_rom_spiflash_result_t esp_rom_spiflash_erase_sector(uint32_t sector)
  74. {
  75. return spiflash.erase_sector(sector);
  76. }
  77. esp_rom_spiflash_result_t esp_rom_spiflash_erase_page(uint32_t page)
  78. {
  79. return spiflash.erase_page(page);
  80. }
  81. esp_rom_spiflash_result_t esp_rom_spiflash_write(uint32_t target, const uint32_t *src, int32_t len)
  82. {
  83. return spiflash.write(target, src, len);
  84. }
  85. esp_rom_spiflash_result_t esp_rom_spiflash_write_encrypted(uint32_t flash_addr, uint32_t *data, uint32_t len)
  86. {
  87. return spiflash.write(flash_addr, data, len);
  88. }
  89. void *heap_caps_malloc( size_t size, uint32_t caps )
  90. {
  91. return NULL;
  92. }
  93. esp_rom_spiflash_result_t esp_rom_spiflash_write_disable(void)
  94. {
  95. return ESP_ROM_SPIFLASH_RESULT_OK;
  96. }
  97. esp_flash_t* esp_flash_default_chip = NULL;