Commit dfce1826 authored by HuangRui's avatar HuangRui
Browse files

Paste new version, make it can get correct flash size.

parent ed87cbd9
...@@ -80,7 +80,11 @@ static int node_info( lua_State* L ) ...@@ -80,7 +80,11 @@ static int node_info( lua_State* L )
lua_pushinteger(L, NODE_VERSION_REVISION); lua_pushinteger(L, NODE_VERSION_REVISION);
lua_pushinteger(L, system_get_chip_id()); // chip id lua_pushinteger(L, system_get_chip_id()); // chip id
lua_pushinteger(L, spi_flash_get_id()); // flash id lua_pushinteger(L, spi_flash_get_id()); // flash id
lua_pushinteger(L, flash_detect_size_byte() / 1024); // flash size in KB #if defined(FLASH_SAFE_API)
lua_pushinteger(L, flash_safe_get_size_byte() / 1024); // flash size in KB
#else
lua_pushinteger(L, flash_rom_get_size_byte() / 1024); // flash size in KB
#endif // defined(FLASH_SAFE_API)
lua_pushinteger(L, flash_rom_get_mode()); lua_pushinteger(L, flash_rom_get_mode());
lua_pushinteger(L, flash_rom_get_speed()); lua_pushinteger(L, flash_rom_get_speed());
return 8; return 8;
...@@ -121,7 +125,11 @@ static int node_flashsize( lua_State* L ) ...@@ -121,7 +125,11 @@ static int node_flashsize( lua_State* L )
// flash_set_size_byte(sz); // flash_set_size_byte(sz);
// } // }
//} //}
uint32_t sz = flash_detect_size_byte(); #if defined(FLASH_SAFE_API)
uint32_t sz = flash_safe_get_size_byte();
#else
uint32_t sz = flash_rom_get_size_byte();
#endif // defined(FLASH_SAFE_API)
lua_pushinteger( L, sz ); lua_pushinteger( L, sz );
return 1; return 1;
} }
......
...@@ -30,7 +30,11 @@ ...@@ -30,7 +30,11 @@
#elif defined(FLASH_16M) #elif defined(FLASH_16M)
#define FLASH_SEC_NUM 0x1000 #define FLASH_SEC_NUM 0x1000
#elif defined(FLASH_AUTOSIZE) #elif defined(FLASH_AUTOSIZE)
#if defined(FLASH_SAFE_API)
#define FLASH_SEC_NUM (flash_safe_get_sec_num())
#else
#define FLASH_SEC_NUM (flash_rom_get_sec_num()) #define FLASH_SEC_NUM (flash_rom_get_sec_num())
#endif // defined(FLASH_SAFE_API)
#else #else
#define FLASH_SEC_NUM 0x80 #define FLASH_SEC_NUM 0x80
#endif #endif
...@@ -54,8 +58,14 @@ ...@@ -54,8 +58,14 @@
// SpiFlashOpResult spi_flash_erase_sector(uint16 sec); // SpiFlashOpResult spi_flash_erase_sector(uint16 sec);
// SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size); // SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size);
// SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size); // SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size);
#if defined(FLASH_SAFE_API)
#define flash_write flash_safe_write #define flash_write flash_safe_write
#define flash_erase flash_safe_erase_sector #define flash_erase flash_safe_erase_sector
#define flash_read flash_safe_read #define flash_read flash_safe_read
#else
#define flash_write spi_flash_write
#define flash_erase spi_flash_erase_sector
#define flash_read spi_flash_read
#endif // defined(FLASH_SAFE_API)
#endif // #ifndef __CPU_ESP8266_H__ #endif // #ifndef __CPU_ESP8266_H__
...@@ -22,19 +22,23 @@ static volatile const uint8_t flash_init_data[128] ICACHE_STORE_ATTR ICACHE_RODA ...@@ -22,19 +22,23 @@ static volatile const uint8_t flash_init_data[128] ICACHE_STORE_ATTR ICACHE_RODA
uint32_t flash_detect_size_byte(void) uint32_t flash_detect_size_byte(void)
{ {
#define FLASH_BUFFER_SIZE_DETECT 32
uint32_t dummy_size = FLASH_SIZE_256KBYTE; uint32_t dummy_size = FLASH_SIZE_256KBYTE;
uint8_t data_orig[64] ICACHE_STORE_ATTR = {0}; uint8_t data_orig[FLASH_BUFFER_SIZE_DETECT] ICACHE_STORE_ATTR = {0};
uint8_t data_new[64] ICACHE_STORE_ATTR = {0}; uint8_t data_new[FLASH_BUFFER_SIZE_DETECT] ICACHE_STORE_ATTR = {0};
if (SPI_FLASH_RESULT_OK == flash_safe_read(0, (uint32 *)data_orig, 64)) if (SPI_FLASH_RESULT_OK == flash_safe_read(0, (uint32 *)data_orig, FLASH_BUFFER_SIZE_DETECT))
{ {
dummy_size = FLASH_SIZE_256KBYTE; dummy_size = FLASH_SIZE_256KBYTE;
while ((dummy_size < FLASH_SIZE_16MBYTE) && while ((dummy_size < FLASH_SIZE_16MBYTE) &&
(SPI_FLASH_RESULT_OK == flash_safe_read(dummy_size, (uint32 *)data_new, 64))) (SPI_FLASH_RESULT_OK == flash_safe_read(dummy_size, (uint32 *)data_new, FLASH_BUFFER_SIZE_DETECT)) &&
(0 != os_memcmp(data_orig, data_new, FLASH_BUFFER_SIZE_DETECT))
)
{ {
dummy_size *= 2; dummy_size *= 2;
} }
}; };
return dummy_size; return dummy_size;
#undef FLASH_BUFFER_SIZE_DETECT
} }
uint32_t flash_safe_get_size_byte(void) uint32_t flash_safe_get_size_byte(void)
...@@ -83,8 +87,11 @@ SPIFlashInfo flash_rom_getinfo(void) ...@@ -83,8 +87,11 @@ SPIFlashInfo flash_rom_getinfo(void)
{ {
volatile SPIFlashInfo spi_flash_info ICACHE_STORE_ATTR; volatile SPIFlashInfo spi_flash_info ICACHE_STORE_ATTR;
// Don't use it before cache read disabled // Don't use it before cache read disabled
// FLASH_DISABLE_CACHE();
// spi_flash_info = *((SPIFlashInfo *)(FLASH_ADDRESS_START_MAP)); // spi_flash_info = *((SPIFlashInfo *)(FLASH_ADDRESS_START_MAP));
flash_safe_read(0, (uint32 *)(& spi_flash_info), sizeof(spi_flash_info)); // FLASH_ENABLE_CACHE();
// Needn't safe mode.
spi_flash_read(0, (uint32 *)(& spi_flash_info), sizeof(spi_flash_info));
return spi_flash_info; return spi_flash_info;
} }
...@@ -95,7 +102,9 @@ uint8_t flash_rom_get_size_type(void) ...@@ -95,7 +102,9 @@ uint8_t flash_rom_get_size_type(void)
uint32_t flash_rom_get_size_byte(void) uint32_t flash_rom_get_size_byte(void)
{ {
uint32_t flash_size = 0; static uint32_t flash_size = 0;
if (flash_size == 0)
{
switch (flash_rom_getinfo().size) switch (flash_rom_getinfo().size)
{ {
case SIZE_2MBIT: case SIZE_2MBIT:
...@@ -131,6 +140,7 @@ uint32_t flash_rom_get_size_byte(void) ...@@ -131,6 +140,7 @@ uint32_t flash_rom_get_size_byte(void)
flash_size = 512 * 1024; flash_size = 512 * 1024;
break; break;
} }
}
return flash_size; return flash_size;
} }
...@@ -139,14 +149,27 @@ bool flash_rom_set_size_type(uint8_t size) ...@@ -139,14 +149,27 @@ bool flash_rom_set_size_type(uint8_t size)
// Dangerous, here are dinosaur infested!!!!! // Dangerous, here are dinosaur infested!!!!!
// Reboot required!!! // Reboot required!!!
// If you don't know what you're doing, your nodemcu may turn into stone ... // If you don't know what you're doing, your nodemcu may turn into stone ...
#if defined(FLASH_SAFE_API)
uint8_t data[SPI_FLASH_SEC_SIZE] ICACHE_STORE_ATTR; uint8_t data[SPI_FLASH_SEC_SIZE] ICACHE_STORE_ATTR;
flash_safe_read(0, (uint32 *)data, sizeof(data)); flash_safe_read(0, (uint32 *)data, sizeof(data));
SPIFlashInfo *p_spi_flash_info = (SPIFlashInfo *)(data); SPIFlashInfo *p_spi_flash_info = (SPIFlashInfo *)(data);
p_spi_flash_info->size = size; p_spi_flash_info->size = size;
flash_safe_erase_sector(0); flash_safe_erase_sector(0);
flash_safe_write(0, (uint32 *)data, sizeof(data)); flash_safe_write(0, (uint32 *)data, sizeof(data));
// TODO: CHECKSUM Firmware
//p_spi_flash_info = flash_rom_getinfo(); //p_spi_flash_info = flash_rom_getinfo();
//p_spi_flash_info->size = size; //p_spi_flash_info->size = size;
#else
uint8_t data[SPI_FLASH_SEC_SIZE] ICACHE_STORE_ATTR;
spi_flash_read(0, (uint32 *)data, sizeof(data));
SPIFlashInfo *p_spi_flash_info = (SPIFlashInfo *)(data);
p_spi_flash_info->size = size;
spi_flash_erase_sector(0);
spi_flash_write(0, (uint32 *)data, sizeof(data));
// TODO: CHECKSUM Firmware
//p_spi_flash_info = flash_rom_getinfo();
//p_spi_flash_info->size = size;
#endif // defined(FLASH_SAFE_API)
return true; return true;
} }
...@@ -253,7 +276,11 @@ bool flash_init_data_written(void) ...@@ -253,7 +276,11 @@ bool flash_init_data_written(void)
{ {
// FLASH SEC - 4 // FLASH SEC - 4
uint32_t data[2] ICACHE_STORE_ATTR; uint32_t data[2] ICACHE_STORE_ATTR;
#if defined(FLASH_SAFE_API)
if (SPI_FLASH_RESULT_OK == flash_safe_read((flash_rom_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)data, sizeof(data))) if (SPI_FLASH_RESULT_OK == flash_safe_read((flash_rom_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)data, sizeof(data)))
#else
if (SPI_FLASH_RESULT_OK == spi_flash_read((flash_rom_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)data, sizeof(data)))
#endif // defined(FLASH_SAFE_API)
{ {
if (data[0] == 0xFFFFFFFF && data[1] == 0xFFFFFFFF) if (data[0] == 0xFFFFFFFF && data[1] == 0xFFFFFFFF)
{ {
...@@ -270,13 +297,23 @@ bool flash_init_data_default(void) ...@@ -270,13 +297,23 @@ bool flash_init_data_default(void)
// Reboot required!!! // Reboot required!!!
// It will init system data to default! // It will init system data to default!
bool result = false; bool result = false;
if (SPI_FLASH_RESULT_OK == flash_safe_erase_sector((flash_rom_get_sec_num() - 4))) #if defined(FLASH_SAFE_API)
if (SPI_FLASH_RESULT_OK == flash_safe_erase_sector((flash_safe_get_sec_num() - 4)))
{
if (SPI_FLASH_RESULT_OK == flash_safe_write((flash_safe_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)flash_init_data, 128))
{
result = true;
}
}
#else
if (SPI_FLASH_RESULT_OK == spi_flash_erase_sector((flash_rom_get_sec_num() - 4)))
{ {
if (SPI_FLASH_RESULT_OK == flash_safe_write((flash_rom_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)flash_init_data, 128)) if (SPI_FLASH_RESULT_OK == spi_flash_write((flash_rom_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)flash_init_data, 128))
{ {
result = true; result = true;
} }
} }
#endif // defined(FLASH_SAFE_API)
return result; return result;
} }
...@@ -287,8 +324,13 @@ bool flash_init_data_blank(void) ...@@ -287,8 +324,13 @@ bool flash_init_data_blank(void)
// Reboot required!!! // Reboot required!!!
// It will init system config to blank! // It will init system config to blank!
bool result = false; bool result = false;
#if defined(FLASH_SAFE_API)
if ((SPI_FLASH_RESULT_OK == flash_safe_erase_sector((flash_rom_get_sec_num() - 2))) && if ((SPI_FLASH_RESULT_OK == flash_safe_erase_sector((flash_rom_get_sec_num() - 2))) &&
(SPI_FLASH_RESULT_OK == flash_safe_erase_sector((flash_rom_get_sec_num() - 1)))) (SPI_FLASH_RESULT_OK == flash_safe_erase_sector((flash_rom_get_sec_num() - 1))))
#else
if ((SPI_FLASH_RESULT_OK == spi_flash_erase_sector((flash_rom_get_sec_num() - 2))) &&
(SPI_FLASH_RESULT_OK == spi_flash_erase_sector((flash_rom_get_sec_num() - 1))))
#endif // defined(FLASH_SAFE_API)
{ {
result = true; result = true;
} }
......
...@@ -25,11 +25,11 @@ ...@@ -25,11 +25,11 @@
#define FLASH_SAFEMODE_ENTER() \ #define FLASH_SAFEMODE_ENTER() \
do { \ do { \
extern SpiFlashChip * flashchip; \ extern SpiFlashChip * flashchip; \
flashchip->chip_size = FLASH_SIZE_256KBYTE flashchip->chip_size = FLASH_SIZE_16MBYTE
#define FLASH_SAFEMODE_LEAVE() \ #define FLASH_SAFEMODE_LEAVE() \
flashchip->chip_size = FLASH_SIZE_16MBYTE; \ flashchip->chip_size = flash_rom_get_size_byte(); \
} while(0) } while(0)
/****************************************************************************** /******************************************************************************
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment