SPI_Flash.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "esp_log.h"
  7. #include "SPI_Flash.h"
  8. #include "spi_flash_mmap.h"
  9. #include "esp_flash.h"
  10. #include <inttypes.h>
  11. static const char *TAG = "spi_flash";
  12. SPI_Flash::SPI_Flash()
  13. {
  14. }
  15. size_t SPI_Flash::get_flash_size()
  16. {
  17. uint32_t chip_size;
  18. esp_flash_get_size(NULL, &chip_size);
  19. return chip_size;
  20. }
  21. esp_err_t SPI_Flash::erase_sector(size_t sector)
  22. {
  23. esp_err_t result = esp_flash_erase_region(NULL, sector * SPI_FLASH_SEC_SIZE, SPI_FLASH_SEC_SIZE);;
  24. if (result == ESP_OK) {
  25. ESP_LOGV(TAG, "erase_sector - sector=0x%08" PRIx32 ", result=0x%08x", (uint32_t) sector, result);
  26. } else {
  27. ESP_LOGE(TAG, "erase_sector - sector=0x%08" PRIx32 ", result=0x%08x", (uint32_t) sector, result);
  28. }
  29. return result;
  30. }
  31. esp_err_t SPI_Flash::erase_range(size_t start_address, size_t size)
  32. {
  33. size = (size + SPI_FLASH_SEC_SIZE - 1) / SPI_FLASH_SEC_SIZE;
  34. size = size * SPI_FLASH_SEC_SIZE;
  35. esp_err_t result = esp_flash_erase_region(NULL, start_address, size);
  36. if (result == ESP_OK) {
  37. ESP_LOGV(TAG, "erase_range - start_address=0x%08" PRIx32 ", size=0x%08" PRIx32 ", result=0x%08x", (uint32_t) start_address, (uint32_t) size, result);
  38. } else {
  39. ESP_LOGE(TAG, "erase_range - start_address=0x%08" PRIx32 ", size=0x%08" PRIx32 ", result=0x%08x", (uint32_t) start_address, (uint32_t) size, result);
  40. }
  41. return result;
  42. }
  43. esp_err_t SPI_Flash::write(size_t dest_addr, const void *src, size_t size)
  44. {
  45. esp_err_t result = esp_flash_write(NULL, src, dest_addr, size);
  46. if (result == ESP_OK) {
  47. ESP_LOGV(TAG, "write - dest_addr=0x%08" PRIx32 ", size=0x%08" PRIx32 ", result=0x%08x", (uint32_t) dest_addr, (uint32_t) size, result);
  48. } else {
  49. ESP_LOGE(TAG, "write - dest_addr=0x%08" PRIx32 ", size=0x%08" PRIx32 ", result=0x%08x", (uint32_t) dest_addr, (uint32_t) size, result);
  50. }
  51. return result;
  52. }
  53. esp_err_t SPI_Flash::read(size_t src_addr, void *dest, size_t size)
  54. {
  55. esp_err_t result = esp_flash_read(NULL, dest, src_addr, size);
  56. if (result == ESP_OK) {
  57. ESP_LOGV(TAG, "read - src_addr=0x%08" PRIx32 ", size=0x%08" PRIx32 ", result=0x%08x", (uint32_t) src_addr, (uint32_t) size, result);
  58. } else {
  59. ESP_LOGE(TAG, "read - src_addr=0x%08" PRIx32 ", size=0x%08" PRIx32 ", result=0x%08x", (uint32_t) src_addr, (uint32_t) size, result);
  60. }
  61. return result;
  62. }
  63. size_t SPI_Flash::get_sector_size()
  64. {
  65. return SPI_FLASH_SEC_SIZE;
  66. }
  67. SPI_Flash::~SPI_Flash()
  68. {
  69. }