nodemcu-firmware/app/platform/flash_api.c

72 lines
1.8 KiB
C
Raw Normal View History

/******************************************************************************
* 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;
}