|
@@ -0,0 +1,71 @@
|
|
|
+/******************************************************************************
|
|
|
+ * Flash api for NodeMCU
|
|
|
+*******************************************************************************/
|
|
|
+#include "user_config.h"
|
|
|
+#include "flash_api.h"
|
|
|
+#include "spi_flash.h"
|
|
|
+
|
|
|
+SPIFlashInfo *ICACHE_FLASH_ATTR
|
|
|
+flash_get_info()
|
|
|
+{
|
|
|
+ static SPIFlashInfo spi_flash_info;
|
|
|
+ static bool is_spi_flash_info_initialized = false;
|
|
|
+ // Make the code more fast
|
|
|
+ if (!is_spi_flash_info_initialized)
|
|
|
+ {
|
|
|
+ SPIRead(0, &spi_flash_info, sizeof(spi_flash_info));
|
|
|
+ is_spi_flash_info_initialized = true;
|
|
|
+ }
|
|
|
+ return &spi_flash_info;
|
|
|
+}
|
|
|
+
|
|
|
+uint32_t ICACHE_FLASH_ATTR
|
|
|
+flash_get_size_byte()
|
|
|
+{
|
|
|
+ static uint32_t flash_size = 0;
|
|
|
+ // Make the code more fast
|
|
|
+ if (flash_size == 0 )
|
|
|
+ {
|
|
|
+ SPIFlashInfo *p_spi_flash_info = flash_get_info();
|
|
|
+ switch (p_spi_flash_info->size)
|
|
|
+ {
|
|
|
+ case SIZE_2MBIT:
|
|
|
+ // 2Mbit, 256kByte
|
|
|
+ flash_size = 256 * 1024;
|
|
|
+ break;
|
|
|
+ case SIZE_4MBIT:
|
|
|
+ // 4Mbit, 512kByte
|
|
|
+ flash_size = 512 * 1024;
|
|
|
+ break;
|
|
|
+ case SIZE_8MBIT:
|
|
|
+ // 8Mbit, 1MByte
|
|
|
+ flash_size = 1 * 1024 * 1024;
|
|
|
+ break;
|
|
|
+ case SIZE_16MBIT:
|
|
|
+ // 16Mbit, 2MByte
|
|
|
+ flash_size = 2 * 1024 * 1024;
|
|
|
+ break;
|
|
|
+ case SIZE_32MBIT:
|
|
|
+ // 32Mbit, 4MByte
|
|
|
+ flash_size = 4 * 1024 * 1024;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ // Unknown flash size, fall back mode.
|
|
|
+ flash_size = 512 * 1024;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return flash_size;
|
|
|
+}
|
|
|
+
|
|
|
+uint16_t ICACHE_FLASH_ATTR
|
|
|
+flash_get_sec_num()
|
|
|
+{
|
|
|
+ static uint16_t result = 0;
|
|
|
+ // Make the code more fast
|
|
|
+ if (result == 0 )
|
|
|
+ {
|
|
|
+ result = flash_get_size_byte() / SPI_FLASH_SEC_SIZE;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|