flash_mock.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "SpiFlash.h"
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "spi_flash_mmap.h"
  5. #include "esp_partition.h"
  6. #include "esp_err.h"
  7. #include "esp_rom_spiflash.h"
  8. #include "esp_flash.h"
  9. #include "bsd_strings.h"
  10. SpiFlash spiflash = SpiFlash();
  11. esp_rom_spiflash_chip_t g_rom_flashchip;
  12. size_t convert_chip_size_string(const char* chip_size_str)
  13. {
  14. int size = 0;
  15. if (strcmp(chip_size_str, "1MB") == 0) {
  16. size = 0x100000;
  17. }
  18. else if (strcmp(chip_size_str, "2MB") == 0) {
  19. size = 0x200000;
  20. }
  21. else if (strcmp(chip_size_str, "4MB") == 0) {
  22. size = 0x400000;
  23. }
  24. else if (strcmp(chip_size_str, "8MB") == 0) {
  25. size = 0x800000;
  26. }
  27. else if (strcmp(chip_size_str, "16MB") == 0) {
  28. size = 0x1000000;
  29. } else {
  30. size = 0;
  31. }
  32. return size;
  33. }
  34. 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)
  35. {
  36. size_t size = convert_chip_size_string(chip_size);
  37. assert(size != 0);
  38. spiflash.init(size, block_size, sector_size, page_size, partitions_bin);
  39. g_rom_flashchip.chip_size = size;
  40. g_rom_flashchip.block_size = block_size;
  41. g_rom_flashchip.sector_size = sector_size;
  42. g_rom_flashchip.page_size = page_size;
  43. }
  44. extern "C" esp_err_t spi_flash_mmap(size_t src_addr, size_t size, spi_flash_mmap_memory_t memory,
  45. const void** out_ptr, spi_flash_mmap_handle_t* out_handle)
  46. {
  47. *out_handle = 0;
  48. *out_ptr = (void*)spiflash.get_memory_ptr(src_addr);
  49. return ESP_OK;
  50. }
  51. extern "C" void spi_flash_munmap(spi_flash_mmap_handle_t handle)
  52. {
  53. return;
  54. }
  55. extern "C" int spi_flash_get_total_erase_cycles(void)
  56. {
  57. return spiflash.get_total_erase_cycles();
  58. }
  59. extern "C" int spi_flash_get_erase_cycles(size_t sector)
  60. {
  61. return spiflash.get_erase_cycles(sector);
  62. }
  63. extern "C" esp_err_t bootloader_flash_unlock(void)
  64. {
  65. return ESP_OK;
  66. }
  67. esp_rom_spiflash_result_t esp_rom_spiflash_read(uint32_t target, uint32_t *dest, int32_t len)
  68. {
  69. return spiflash.read(target, dest, len);
  70. }
  71. extern "C" esp_err_t esp_flash_read(esp_flash_t *chip, void *buffer, uint32_t address, uint32_t length)
  72. {
  73. return spiflash.read(address, buffer, length);
  74. }
  75. esp_rom_spiflash_result_t esp_rom_spiflash_erase_block(uint32_t block)
  76. {
  77. return spiflash.erase_block(block);
  78. }
  79. esp_rom_spiflash_result_t esp_rom_spiflash_erase_sector(uint32_t sector)
  80. {
  81. return spiflash.erase_sector(sector);
  82. }
  83. esp_rom_spiflash_result_t esp_rom_spiflash_erase_page(uint32_t page)
  84. {
  85. return spiflash.erase_page(page);
  86. }
  87. extern "C" esp_err_t esp_flash_erase_region(esp_flash_t *chip, uint32_t start_addr, uint32_t size)
  88. {
  89. size_t start = start_addr / SPI_FLASH_SEC_SIZE;
  90. size_t end = start + size / SPI_FLASH_SEC_SIZE;
  91. const size_t sectors_per_block = 65536 / SPI_FLASH_SEC_SIZE;
  92. esp_rom_spiflash_result_t rc = ESP_ROM_SPIFLASH_RESULT_OK;
  93. for (size_t sector = start; sector != end && rc == ESP_ROM_SPIFLASH_RESULT_OK; ) {
  94. rc = spiflash.erase_sector(sector);
  95. ++sector;
  96. }
  97. return rc;
  98. }
  99. esp_rom_spiflash_result_t esp_rom_spiflash_write(uint32_t target, const uint32_t *src, int32_t len)
  100. {
  101. return spiflash.write(target, src, len);
  102. }
  103. extern "C" esp_err_t esp_flash_write(esp_flash_t *chip, const void *buffer, uint32_t address, uint32_t length)
  104. {
  105. return spiflash.write(address, buffer, length);
  106. }
  107. esp_rom_spiflash_result_t esp_rom_spiflash_write_encrypted(uint32_t flash_addr, uint32_t *data, uint32_t len)
  108. {
  109. return spiflash.write(flash_addr, data, len);
  110. }
  111. void *heap_caps_malloc( size_t size, uint32_t caps )
  112. {
  113. return NULL;
  114. }
  115. esp_rom_spiflash_result_t esp_rom_spiflash_write_disable(void)
  116. {
  117. return ESP_ROM_SPIFLASH_RESULT_OK;
  118. }
  119. esp_flash_t* esp_flash_default_chip = NULL;