Revert "Update spiffs to latest."

This commit is contained in:
dnc40085 2015-05-28 17:38:08 -07:00
parent f7a6183853
commit 1f798dabf7
8 changed files with 74 additions and 109 deletions

View File

@ -4,8 +4,8 @@
* 2014-12-31
*******************************************************************************/
#include "user_config.h"
#include "osapi.h"
#include "flash_api.h"
#include "spi_flash.h"
#include "c_stdio.h"
static volatile const uint8_t flash_init_data[128] ICACHE_STORE_ATTR ICACHE_RODATA_ATTR =
@ -103,6 +103,8 @@ uint8_t flash_rom_get_size_type(void)
uint32_t flash_rom_get_size_byte(void)
{
static uint32_t flash_size = 0;
if (flash_size == 0)
{
switch (flash_rom_getinfo().size)
{
case SIZE_2MBIT:
@ -138,6 +140,7 @@ uint32_t flash_rom_get_size_byte(void)
flash_size = 512 * 1024;
break;
}
}
return flash_size;
}
@ -146,21 +149,21 @@ bool flash_rom_set_size_type(uint8_t size)
// Dangerous, here are dinosaur infested!!!!!
// Reboot required!!!
// If you don't know what you're doing, your nodemcu may turn into stone ...
FLASH_DEBUG("\nBEGIN SET FLASH HEADER\n");
NODE_DBG("\nBEGIN SET FLASH HEADER\n");
uint8_t data[SPI_FLASH_SEC_SIZE] ICACHE_STORE_ATTR;
if (SPI_FLASH_RESULT_OK == spi_flash_read(0, (uint32 *)data, SPI_FLASH_SEC_SIZE))
{
((SPIFlashInfo *)(&data[0]))->size = size;
if (SPI_FLASH_RESULT_OK == spi_flash_erase_sector(0 * SPI_FLASH_SEC_SIZE))
{
FLASH_DEBUG("\nERASE SUCCESS\n");
NODE_DBG("\nERASE SUCCESS\n");
}
if (SPI_FLASH_RESULT_OK == spi_flash_write(0, (uint32 *)data, SPI_FLASH_SEC_SIZE))
{
FLASH_DEBUG("\nWRITE SUCCESS, %u\n", size);
NODE_DBG("\nWRITE SUCCESS, %u\n", size);
}
}
FLASH_DEBUG("\nEND SET FLASH HEADER\n");
NODE_DBG("\nEND SET FLASH HEADER\n");
return true;
}
@ -278,7 +281,7 @@ bool flash_rom_set_speed(uint32_t speed)
// Dangerous, here are dinosaur infested!!!!!
// Reboot required!!!
// If you don't know what you're doing, your nodemcu may turn into stone ...
FLASH_DEBUG("\nBEGIN SET FLASH HEADER\n");
NODE_DBG("\nBEGIN SET FLASH HEADER\n");
uint8_t data[SPI_FLASH_SEC_SIZE] ICACHE_STORE_ATTR;
uint8_t speed_type = SPEED_40MHZ;
if (speed < 26700000)
@ -302,14 +305,14 @@ bool flash_rom_set_speed(uint32_t speed)
((SPIFlashInfo *)(&data[0]))->speed = speed_type;
if (SPI_FLASH_RESULT_OK == spi_flash_erase_sector(0 * SPI_FLASH_SEC_SIZE))
{
FLASH_DEBUG("\nERASE SUCCESS\n");
NODE_DBG("\nERASE SUCCESS\n");
}
if (SPI_FLASH_RESULT_OK == spi_flash_write(0, (uint32 *)data, SPI_FLASH_SEC_SIZE))
{
FLASH_DEBUG("\nWRITE SUCCESS, %u\n", speed_type);
NODE_DBG("\nWRITE SUCCESS, %u\n", speed_type);
}
}
FLASH_DEBUG("\nEND SET FLASH HEADER\n");
NODE_DBG("\nEND SET FLASH HEADER\n");
return true;
}
@ -390,7 +393,7 @@ uint8_t byte_of_aligned_array(const uint8_t *aligned_array, uint32_t index)
{
if ( (((uint32_t)aligned_array) % 4) != 0 )
{
FLASH_DEBUG("aligned_array is not 4-byte aligned.\n");
NODE_DBG("aligned_array is not 4-byte aligned.\n");
return 0;
}
volatile uint32_t v = ((uint32_t *)aligned_array)[ index / 4 ];
@ -402,7 +405,7 @@ uint16_t word_of_aligned_array(const uint16_t *aligned_array, uint32_t index)
{
if ( (((uint32_t)aligned_array) % 4) != 0 )
{
FLASH_DEBUG("aligned_array is not 4-byte aligned.\n");
NODE_DBG("aligned_array is not 4-byte aligned.\n");
return 0;
}
volatile uint32_t v = ((uint32_t *)aligned_array)[ index / 2 ];

View File

@ -1,8 +1,8 @@
#ifndef __FLASH_API_H__
#define __FLASH_API_H__
#include "ets_sys.h"
#include "user_config.h"
#include "user_interface.h"
#include "spi_flash.h"
#include "cpu_esp8266.h"
#define FLASH_ADDRESS_START_MAP (INTERNAL_FLASH_START_ADDRESS)
@ -22,8 +22,6 @@
#define FLASH_SIZE_8MBYTE (FLASH_SIZE_64MBIT / 8)
#define FLASH_SIZE_16MBYTE (FLASH_SIZE_128MBIT/ 8)
#define FLASH_DEBUG
#define FLASH_SAFEMODE_ENTER() \
do { \
extern SpiFlashChip * flashchip; \

View File

@ -1,10 +1,12 @@
#include "c_stdio.h"
#include "platform.h"
#include "spiffs.h"
//#undef NODE_DBG
//#define NODE_DBG c_printf
spiffs fs;
#define LOG_PAGE_SIZE (256*2)
#define LOG_PAGE_SIZE 256
static u8_t spiffs_work_buf[LOG_PAGE_SIZE*2];
static u8_t spiffs_fds[32*4];
@ -49,9 +51,9 @@ void myspiffs_mount() {
cfg.phys_addr &= 0xFFFFC000; // align to 4 sector.
cfg.phys_size = INTERNAL_FLASH_SIZE - ( ( u32_t )cfg.phys_addr - INTERNAL_FLASH_START_ADDRESS );
cfg.phys_erase_block = INTERNAL_FLASH_SECTOR_SIZE; // according to datasheet
cfg.log_block_size = INTERNAL_FLASH_SECTOR_SIZE * 16; // let us not complicate things
cfg.log_block_size = INTERNAL_FLASH_SECTOR_SIZE; // let us not complicate things
cfg.log_page_size = LOG_PAGE_SIZE; // as we said
SPIFFS_DBG("fs.start:%x,max:%x\n",cfg.phys_addr,cfg.phys_size);
NODE_DBG("fs.start:%x,max:%x\n",cfg.phys_addr,cfg.phys_size);
cfg.hal_read_f = my_spiffs_read;
cfg.hal_write_f = my_spiffs_write;
@ -66,7 +68,7 @@ void myspiffs_mount() {
sizeof(spiffs_cache),
// myspiffs_check_callback);
0);
SPIFFS_DBG("mount res: %i\n", res);
NODE_DBG("mount res: %i\n", res);
}
void myspiffs_unmount() {
@ -77,13 +79,10 @@ void myspiffs_unmount() {
// Returns 1 if OK, 0 for error
int myspiffs_format( void )
{
#if 1
myspiffs_unmount();
myspiffs_mount();
myspiffs_unmount();
#if 0
SPIFFS_unmount(&fs);
if(0 == SPIFFS_format(&fs))
{
myspiffs_mount();
return 1;
}
else
@ -98,7 +97,7 @@ int myspiffs_format( void )
sect_first = platform_flash_get_sector_of_address(sect_first);
sect_last = INTERNAL_FLASH_SIZE + INTERNAL_FLASH_START_ADDRESS - 4;
sect_last = platform_flash_get_sector_of_address(sect_last);
SPIFFS_DBG("sect_first: %x, sect_last: %x\n", sect_first, sect_last);
NODE_DBG("sect_first: %x, sect_last: %x\n", sect_first, sect_last);
while( sect_first <= sect_last )
if( platform_flash_erase_sector( sect_first ++ ) == PLATFORM_ERR )
return 0;
@ -117,11 +116,7 @@ int myspiffs_check( void )
}
int myspiffs_open(const char *name, int flags){
int res = SPIFFS_open(&fs, (char *)name, (spiffs_flags)flags, 0);
if (res < 0) {
SPIFFS_DBG("open errno %i\n", SPIFFS_errno(&fs));
}
return res;
return (int)SPIFFS_open(&fs, (char *)name, (spiffs_flags)flags, 0);
}
int myspiffs_close( int fd ){
@ -135,17 +130,17 @@ size_t myspiffs_write( int fd, const void* ptr, size_t len ){
return len;
}
#endif
int res = SPIFFS_write(&fs, (spiffs_file)fd, (void *)ptr, len);
int res = SPIFFS_write(&fs, (spiffs_file)fd, (void *)ptr, (size_t)len);
if (res < 0) {
SPIFFS_DBG("write errno %i\n", SPIFFS_errno(&fs));
NODE_DBG("write errno %i\n", SPIFFS_errno(&fs));
return 0;
}
return res;
}
size_t myspiffs_read( int fd, void* ptr, size_t len){
int res = SPIFFS_read(&fs, (spiffs_file)fd, ptr, len);
int res = SPIFFS_read(&fs, (spiffs_file)fd, ptr, (size_t)len);
if (res < 0) {
SPIFFS_DBG("read errno %i\n", SPIFFS_errno(&fs));
NODE_DBG("read errno %i\n", SPIFFS_errno(&fs));
return 0;
}
return res;
@ -165,7 +160,7 @@ int myspiffs_getc( int fd ){
if(!myspiffs_eof(fd)){
res = SPIFFS_read(&fs, (spiffs_file)fd, &c, 1);
if (res != 1) {
SPIFFS_DBG("getc errno %i\n", SPIFFS_errno(&fs));
NODE_DBG("getc errno %i\n", SPIFFS_errno(&fs));
return (int)EOF;
} else {
return (int)c;
@ -198,13 +193,13 @@ void test_spiffs() {
// Surely, I've mounted spiffs before entering here
spiffs_file fd = SPIFFS_open(&fs, "my_file", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0);
if (SPIFFS_write(&fs, fd, (u8_t *)"Hello world", 12) < 0) SPIFFS_DBG("errno %i\n", SPIFFS_errno(&fs));
if (SPIFFS_write(&fs, fd, (u8_t *)"Hello world", 12) < 0) NODE_DBG("errno %i\n", SPIFFS_errno(&fs));
SPIFFS_close(&fs, fd);
fd = SPIFFS_open(&fs, "my_file", SPIFFS_RDWR, 0);
if (SPIFFS_read(&fs, fd, (u8_t *)buf, 12) < 0) SPIFFS_DBG("errno %i\n", SPIFFS_errno(&fs));
if (SPIFFS_read(&fs, fd, (u8_t *)buf, 12) < 0) NODE_DBG("errno %i\n", SPIFFS_errno(&fs));
SPIFFS_close(&fs, fd);
SPIFFS_DBG("--> %s <--\n", buf);
NODE_DBG("--> %s <--\n", buf);
}
#endif

View File

@ -12,7 +12,7 @@
#if defined(__cplusplus)
extern "C" {
#endif
#include "eagle_soc.h"
#include "c_stdio.h"
#include "spiffs_config.h"
@ -53,7 +53,6 @@ extern "C" {
#define SPIFFS_ERR_TEST -10100
#define SPIFFS_WDT_CLEAR(no_arg) WRITE_PERI_REG(0x60000914, 0x73)
// spiffs file descriptor index type. must be signed
typedef s16_t spiffs_file;

View File

@ -124,7 +124,7 @@ typedef uint8_t u8_t;
// not on mount point. If not, SPIFFS_format must be called prior to mounting
// again.
#ifndef SPIFFS_USE_MAGIC
#define SPIFFS_USE_MAGIC (1)
#define SPIFFS_USE_MAGIC (0)
#endif
// SPIFFS_LOCK and SPIFFS_UNLOCK protects spiffs from reentrancy on api level
@ -169,7 +169,7 @@ typedef uint8_t u8_t;
// Enable this if your target needs aligned data for index tables
#ifndef SPIFFS_ALIGNED_OBJECT_INDEX_TABLES
#define SPIFFS_ALIGNED_OBJECT_INDEX_TABLES 1
#define SPIFFS_ALIGNED_OBJECT_INDEX_TABLES 0
#endif
// Set SPIFFS_TEST_VISUALISATION to non-zero to enable SPIFFS_vis function

View File

@ -936,7 +936,6 @@ s32_t SPIFFS_vis(spiffs *fs) {
int cur_entry = 0;
while (res == SPIFFS_OK && obj_lookup_page < (int)SPIFFS_OBJ_LOOKUP_PAGES(fs)) {
SPIFFS_WDT_CLEAR();
int entry_offset = obj_lookup_page * entries_per_page;
res = _spiffs_rd(fs, SPIFFS_OP_T_OBJ_LU | SPIFFS_OP_C_READ,
0, bix * SPIFFS_CFG_LOG_BLOCK_SZ(fs) + SPIFFS_PAGE_TO_PADDR(fs, obj_lookup_page), SPIFFS_CFG_LOG_PAGE_SZ(fs), fs->lu_work);

View File

@ -155,7 +155,6 @@ s32_t spiffs_obj_lu_find_entry_visitor(
// check each block
while (res == SPIFFS_OK && entry_count > 0) {
int obj_lookup_page = cur_entry / entries_per_page;
SPIFFS_WDT_CLEAR();
// check each object lookup page
while (res == SPIFFS_OK && obj_lookup_page < (int)SPIFFS_OBJ_LOOKUP_PAGES(fs)) {
int entry_offset = obj_lookup_page * entries_per_page;
@ -166,7 +165,6 @@ s32_t spiffs_obj_lu_find_entry_visitor(
cur_entry - entry_offset < entries_per_page && // for non-last obj lookup pages
cur_entry < (int)SPIFFS_OBJ_LOOKUP_MAX_ENTRIES(fs)) // for last obj lookup page
{
SPIFFS_WDT_CLEAR();
if ((flags & SPIFFS_VIS_CHECK_ID) == 0 || obj_lu_buf[cur_entry-entry_offset] == obj_id) {
if (block_ix) *block_ix = cur_block;
if (lu_entry) *lu_entry = cur_entry;
@ -303,7 +301,6 @@ s32_t spiffs_obj_lu_scan(
spiffs_obj_id erase_count_min = SPIFFS_OBJ_ID_FREE;
spiffs_obj_id erase_count_max = 0;
while (bix < fs->block_count) {
SPIFFS_WDT_CLEAR();
#if SPIFFS_USE_MAGIC
spiffs_obj_id magic;
res = _spiffs_rd(fs,
@ -805,7 +802,6 @@ void spiffs_cb_object_event(
u32_t i;
spiffs_fd *fds = (spiffs_fd *)fs->fd_space;
for (i = 0; i < fs->fd_count; i++) {
SPIFFS_WDT_CLEAR();
spiffs_fd *cur_fd = &fds[i];
if (cur_fd->file_nbr == 0 || (cur_fd->obj_id & ~SPIFFS_OBJ_ID_IX_FLAG) != obj_id) continue;
if (spix == 0) {
@ -922,9 +918,9 @@ s32_t spiffs_object_append(spiffs_fd *fd, u32_t offset, u8_t *data, u32_t len) {
// write all data
while (res == SPIFFS_OK && written < len) {
SPIFFS_WDT_CLEAR();
// calculate object index page span index
cur_objix_spix = SPIFFS_OBJ_IX_ENTRY_SPAN_IX(fs, data_spix);
// handle storing and loading of object indices
if (cur_objix_spix != prev_objix_spix) {
// new object index page
@ -1154,7 +1150,6 @@ s32_t spiffs_object_modify(spiffs_fd *fd, u32_t offset, u8_t *data, u32_t len) {
// write all data
while (res == SPIFFS_OK && written < len) {
SPIFFS_WDT_CLEAR();
// calculate object index page span index
cur_objix_spix = SPIFFS_OBJ_IX_ENTRY_SPAN_IX(fs, data_spix);
@ -1632,7 +1627,6 @@ s32_t spiffs_object_read(
spiffs_page_object_ix *objix = (spiffs_page_object_ix *)fs->work;
while (cur_offset < offset + len) {
SPIFFS_WDT_CLEAR();
cur_objix_spix = SPIFFS_OBJ_IX_ENTRY_SPAN_IX(fs, data_spix);
if (prev_objix_spix != cur_objix_spix) {
// load current object index (header) page
@ -1781,7 +1775,6 @@ s32_t spiffs_obj_lu_find_free_obj_id(spiffs *fs, spiffs_obj_id *obj_id, u8_t *co
state.compaction = 0;
state.conflicting_name = conflicting_name;
while (res == SPIFFS_OK && free_obj_id == SPIFFS_OBJ_ID_FREE) {
SPIFFS_WDT_CLEAR();
if (state.max_obj_id - state.min_obj_id <= (spiffs_obj_id)SPIFFS_CFG_LOG_PAGE_SZ(fs)*8) {
// possible to represent in bitmap
u32_t i, j;
@ -1794,7 +1787,6 @@ s32_t spiffs_obj_lu_find_free_obj_id(spiffs *fs, spiffs_obj_id *obj_id, u8_t *co
SPIFFS_CHECK_RES(res);
// traverse bitmask until found free obj_id
for (i = 0; i < SPIFFS_CFG_LOG_PAGE_SZ(fs); i++) {
SPIFFS_WDT_CLEAR();
u8_t mask = fs->work[i];
if (mask == 0xff) {
continue;
@ -1816,7 +1808,6 @@ s32_t spiffs_obj_lu_find_free_obj_id(spiffs *fs, spiffs_obj_id *obj_id, u8_t *co
u8_t min_count = 0xff;
for (i = 0; i < SPIFFS_CFG_LOG_PAGE_SZ(fs)/sizeof(u8_t); i++) {
SPIFFS_WDT_CLEAR();
if (map[i] < min_count) {
min_count = map[i];
min_i = i;
@ -1869,7 +1860,6 @@ s32_t spiffs_fd_find_new(spiffs *fs, spiffs_fd **fd) {
u32_t i;
spiffs_fd *fds = (spiffs_fd *)fs->fd_space;
for (i = 0; i < fs->fd_count; i++) {
SPIFFS_WDT_CLEAR();
spiffs_fd *cur_fd = &fds[i];
if (cur_fd->file_nbr == 0) {
cur_fd->file_nbr = i+1;

View File

@ -61,15 +61,13 @@ void nodemcu_init(void)
#if defined(FLASH_SAFE_API)
if( flash_safe_get_size_byte() != flash_rom_get_size_byte()) {
NODE_ERR("File system initialization ...\n");
NODE_ERR("This will take a minute, don't power off.\n");
NODE_ERR("Self adjust flash size.\n");
// Fit hardware real flash size.
flash_rom_set_size_byte(flash_safe_get_size_byte());
// Flash init data at FLASHSIZE - 0x04000 Byte.
flash_init_data_default();
// Flash blank data at FLASHSIZE - 0x02000 Byte.
flash_init_data_blank();
if( !fs_format() )
{
NODE_ERR( "\ni*** ERROR ***: unable to format. FS might be compromised.\n" );
@ -78,8 +76,7 @@ void nodemcu_init(void)
else{
NODE_ERR( "format done.\n" );
}
// Unmount filesystem because mounted by format.
fs_unmount();
fs_unmount(); // mounted by format.
}
#endif // defined(FLASH_SAFE_API)
@ -105,22 +102,6 @@ void nodemcu_init(void)
// test_romfs();
#elif defined ( BUILD_SPIFFS )
fs_mount();
if(SPIFFS_mounted == 0)
{
NODE_ERR("File system broken, formating ...\n");
NODE_ERR("This will take a minute, don't power off.\n");
if( !fs_format() )
{
NODE_ERR( "\ni*** ERROR ***: unable to format. FS might be compromised.\n" );
NODE_ERR( "It is advised to re-flash the NodeMCU image.\n" );
}
else{
NODE_ERR( "format done.\n" );
}
// Ensure filesystem mounted.
fs_unmount();
fs_mount();
}
// test_spiffs();
#endif
// endpoint_setup();