From 18349b2090687649617405841b0899fb497119da Mon Sep 17 00:00:00 2001 From: ficeto Date: Mon, 18 May 2015 21:45:00 +0300 Subject: [PATCH 1/2] fix buffer and block size --- cores/esp8266/Esp.cpp | 6 ++++++ cores/esp8266/FileSystem.cpp | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cores/esp8266/Esp.cpp b/cores/esp8266/Esp.cpp index af6d99468c..cb55336908 100644 --- a/cores/esp8266/Esp.cpp +++ b/cores/esp8266/Esp.cpp @@ -175,6 +175,12 @@ uint32_t EspClass::getFlashChipSize(void) return (2_MB); case 0x4: // 32 MBit (4MB) return (4_MB); + case 0x5: // 64 MBit (8MB) + return (8_MB); + case 0x6: // 128 MBit (16MB) + return (16_MB); + case 0x7: // 256 MBit (32MB) + return (32_MB); default: // fail? return 0; } diff --git a/cores/esp8266/FileSystem.cpp b/cores/esp8266/FileSystem.cpp index 0399e4fce4..34c4b43fa1 100644 --- a/cores/esp8266/FileSystem.cpp +++ b/cores/esp8266/FileSystem.cpp @@ -23,7 +23,7 @@ #include "spiffs/spiffs_esp8266.h" #define LOGICAL_PAGE_SIZE 256 -#define LOGICAL_BLOCK_SIZE 512 +#define LOGICAL_BLOCK_SIZE (INTERNAL_FLASH_SECTOR_SIZE * 1) // These addresses are defined in the linker script. @@ -64,7 +64,7 @@ int FSClass::_mountInternal(){ SPIFFS_API_DBG_V("FSClass::_mountInternal: start:%x, size:%d Kb\n", cfg.phys_addr, cfg.phys_size / 1024); - _work.reset(new uint8_t[LOGICAL_BLOCK_SIZE]); + _work.reset(new uint8_t[2*LOGICAL_PAGE_SIZE]); _fdsSize = 32 * _maxOpenFiles; _fds.reset(new uint8_t[_fdsSize]); _cacheSize = (32 + LOGICAL_PAGE_SIZE) * _maxOpenFiles; From ba65783177ac8ca9be3c8b93a0c3cc7474b2f31e Mon Sep 17 00:00:00 2001 From: ficeto Date: Mon, 18 May 2015 22:34:34 +0300 Subject: [PATCH 2/2] add method to get the actual size of the flash --- cores/esp8266/Esp.cpp | 5 +++++ cores/esp8266/Esp.h | 3 +++ 2 files changed, 8 insertions(+) diff --git a/cores/esp8266/Esp.cpp b/cores/esp8266/Esp.cpp index cb55336908..67e6a41af5 100644 --- a/cores/esp8266/Esp.cpp +++ b/cores/esp8266/Esp.cpp @@ -158,6 +158,11 @@ uint32_t EspClass::getFlashChipId(void) return spi_flash_get_id(); } +uint32_t EspClass::getFlashChipRealSize(void) +{ + return (1 << ((spi_flash_get_id() >> 16) & 0xFF)); +} + uint32_t EspClass::getFlashChipSize(void) { uint32_t data; diff --git a/cores/esp8266/Esp.h b/cores/esp8266/Esp.h index 9750dd312f..5e356459e1 100644 --- a/cores/esp8266/Esp.h +++ b/cores/esp8266/Esp.h @@ -90,6 +90,9 @@ class EspClass { uint8_t getCpuFreqMHz(void); uint32_t getFlashChipId(void); + //gets the actual chip size based on the flash id + uint32_t getFlashChipRealSize(void); + //gets the size of the flash as set by the compiler uint32_t getFlashChipSize(void); uint32_t getFlashChipSpeed(void); FlashMode_t getFlashChipMode(void);