NodeMCU firmware can auto detect flash size now.
This commit is contained in:
parent
72f60d3e5a
commit
715ff5b7aa
|
@ -3,10 +3,11 @@
|
||||||
|
|
||||||
#define NODE_VERSION "NodeMcu 0.9.4"
|
#define NODE_VERSION "NodeMcu 0.9.4"
|
||||||
#define BUILD_DATE "build 20141230"
|
#define BUILD_DATE "build 20141230"
|
||||||
#define FLASH_512K
|
// #define FLASH_512K
|
||||||
// #define FLASH_1M
|
// #define FLASH_1M
|
||||||
// #define FLASH_2M
|
// #define FLASH_2M
|
||||||
// #define FLASH_4M
|
// #define FLASH_4M
|
||||||
|
#define FLASH_AUTOSIZE
|
||||||
// #define DEVELOP_VERSION
|
// #define DEVELOP_VERSION
|
||||||
#define FULL_VERSION_FOR_USER
|
#define FULL_VERSION_FOR_USER
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "spi_flash.h"
|
#include "spi_flash.h"
|
||||||
#include "pin_map.h"
|
#include "pin_map.h"
|
||||||
#include "user_config.h"
|
#include "user_config.h"
|
||||||
|
#include "flash_api.h"
|
||||||
// Number of resources (0 if not available/not implemented)
|
// Number of resources (0 if not available/not implemented)
|
||||||
#define NUM_GPIO GPIO_PIN_NUM
|
#define NUM_GPIO GPIO_PIN_NUM
|
||||||
#define NUM_SPI 1
|
#define NUM_SPI 1
|
||||||
|
@ -24,6 +25,8 @@
|
||||||
#define FLASH_SEC_NUM 0x200
|
#define FLASH_SEC_NUM 0x200
|
||||||
#elif defined(FLASH_4M)
|
#elif defined(FLASH_4M)
|
||||||
#define FLASH_SEC_NUM 0x400
|
#define FLASH_SEC_NUM 0x400
|
||||||
|
#elif defined(FLASH_AUTOSIZE)
|
||||||
|
#define FLASH_SEC_NUM (flash_get_sec_num())
|
||||||
#else
|
#else
|
||||||
#define FLASH_SEC_NUM 0x80
|
#define FLASH_SEC_NUM 0x80
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
#ifndef __FLASH_API_H__
|
||||||
|
#define __FLASH_API_H__
|
||||||
|
#include "ets_sys.h"
|
||||||
|
typedef struct __attribute__((packed))
|
||||||
|
{
|
||||||
|
uint8_t unknown0;
|
||||||
|
uint8_t unknown1;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MODE_QIO = 0,
|
||||||
|
MODE_QOUT = 1,
|
||||||
|
MODE_DIO = 2,
|
||||||
|
MODE_DOUT = 15,
|
||||||
|
} mode : 8;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SPEED_40MHZ = 0,
|
||||||
|
SPEED_26MHZ = 1,
|
||||||
|
SPEED_20MHZ = 2,
|
||||||
|
SPEED_80MHZ = 15,
|
||||||
|
} speed : 4;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SIZE_4MBIT = 0,
|
||||||
|
SIZE_2MBIT = 1,
|
||||||
|
SIZE_8MBIT = 2,
|
||||||
|
SIZE_16MBIT = 3,
|
||||||
|
SIZE_32MBIT = 4,
|
||||||
|
} size : 4;
|
||||||
|
} SPIFlashInfo;
|
||||||
|
|
||||||
|
uint32_t flash_get_size_byte();
|
||||||
|
uint16_t flash_get_sec_num();
|
||||||
|
#endif // __FLASH_API_H__
|
|
@ -48,6 +48,8 @@ extern void spiffs_mount();
|
||||||
// extern void test_spiffs();
|
// extern void test_spiffs();
|
||||||
// extern int test_romfs();
|
// extern int test_romfs();
|
||||||
|
|
||||||
|
// extern uint16_t flash_get_sec_num();
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* FunctionName : user_init
|
* FunctionName : user_init
|
||||||
* Description : entry of user application, init user function here
|
* Description : entry of user application, init user function here
|
||||||
|
@ -104,7 +106,7 @@ void user_init(void)
|
||||||
// lua_main( 2, lua_argv );
|
// lua_main( 2, lua_argv );
|
||||||
// char* lua_argv[] = { (char *)"lua", (char *)"-e", (char *)"pwm.setup(0,100,50) pwm.start(0) pwm.stop(0)", NULL };
|
// char* lua_argv[] = { (char *)"lua", (char *)"-e", (char *)"pwm.setup(0,100,50) pwm.start(0) pwm.stop(0)", NULL };
|
||||||
// lua_main( 3, lua_argv );
|
// lua_main( 3, lua_argv );
|
||||||
|
// NODE_DBG("Flash sec num: 0x%x\n", flash_get_sec_num());
|
||||||
task_init();
|
task_init();
|
||||||
system_os_post(USER_TASK_PRIO_0,SIG_LUA,'s');
|
system_os_post(USER_TASK_PRIO_0,SIG_LUA,'s');
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue