问题描述
我有一块 ESP32 板和一块通过 SPI 总线连接的 Winbond W25N01 (1Gbit) NAND 闪存芯片。我正在使用 Mongoose OS 和他们的 Winbond VFS 驱动程序。我正在使用 LittleFS。
它基本有效,但在我打开大约 20 个文件后,我在打开更多文件时出错,说“超级块已变得不可写”。我已经编写了一些 Arduino 代码来进行最低限度的测试,我相信硬件是好的,尽管现在它在面包板上。
#include "mgos.h"
#include "mgos_system.h"
#include "mgos_vfs_dev_w25xxx.h"
#include <stdio.h>
#define W25XXX_DEBUG 1
#define LED_PIN 13
static void timer_cb(void *arg)
{
#if 1
static uint16_t ctr = 0;
FILE *fp;
char c[] = "this is a test";
char buffer[100];
char writeBuf[100];
char fileName[50];
sprintf(fileName,"/data/file-%d.txt",ctr);
LOG(LL_ERROR,("***** File Name: %s\r\n",fileName));
/* Open file for both reading and writing */
fp = fopen(fileName,"w+");
if(fp == NULL)
{
LOG(LL_ERROR,("fopen() Failed"));
return;
}
else
{
LOG(LL_ERROR,("fopen() SUCCESS!!"));
}
/* Write data to the file */
sprintf(writeBuf,"Here is some data for the file - %d",ctr);
fwrite(writeBuf,strlen(writeBuf) + 1,1,fp);
/* Seek to the beginning of the file */
fseek(fp,SEEK_SET);
/* Read and display data */
fread(buffer,strlen(writeBuf)+1,fp);
LOG(LL_ERROR,("Read: %s",buffer));
fclose(fp);
ctr++;
#endif
#ifdef LED_PIN
mgos_gpio_toggle(LED_PIN);
#endif
(void) arg;
}
enum mgos_app_init_result mgos_app_init(void)
{
mgos_wdt_disable();
mgos_gpio_set_mode(LED_PIN,MGOS_GPIO_MODE_OUTPUT);
mgos_set_timer(2000,MGOS_TIMER_REPEAT,timer_cb,NULL);
return MGOS_APP_INIT_SUCCESS;
}
mos.yml
author: mongoose-os
description: A Mongoose OS app skeleton
version: 1.0
libs_version: ${mos.version}
modules_version: ${mos.version}
mongoose_os_version: ${mos.version}
# From the W25Nxxx driver code:
#define W25XXX_PAGE_SIZE 2048U
#define W25XXX_BLOCK_SIZE (64 * W25XXX_PAGE_SIZE)
#define W25XXX_DIE_SIZE (1024 * W25XXX_BLOCK_SIZE)
# Optional. List of tags for online search.
tags:
- c
# List of files / directories with C sources. No slashes at the end of dir names.
sources:
- src
# List of dirs. Files from these dirs will be copied to the device filesystem
filesystem:
- fs
config_schema:
- ["spi.enable",true]
# Other SPI interface options go here.
- ["spi.miso_gpio",19]
- ["spi.mosi_gpio",18]
- ["spi.sclk_gpio",5]
- ["spi.cs0_gpio",21]
- ["devtab.dev0.name","spif0"]
- ["devtab.dev0.type","w25xxx"]
- ["devtab.dev0.opts",'{"cs": 0,"freq": 10000000,"ecc_chk": 0}']
# json_scanf(opts,strlen(opts),# "{cs: %d,freq: %d,mode: %d,"
# "bb_reserve: %u,ecc_chk: %B,spi: %T}",# &cs_num,&spi_freq,&spi_mode,&bb_reserve,&ecc_chk,# &spi_cfg_json);
- ["fstab.fs0.dev","spif0"]
- ["fstab.fs0.type","LFS"]
- ["fstab.fs0.opts",'{"bs": 131072}'] # bs 1024*64 # Fails without this line
- ["fstab.fs0.path","/data"]
- ["fstab.fs0.create",true]
# // block device configuration
# .read_size = 16,# .prog_size = 16,# .block_size = 2048*64,# .block_count = 1024,# .lookahead = 2048,- ["debug.level",3]
libs:
- origin: https://github.com/mongoose-os-libs/vfs-dev-w25xxx
- origin: https://github.com/mongoose-os-libs/fstab
# Used by the mos tool to catch mos binaries incompatible with this file format
manifest_version: 2017-09-29
错误:
[Mar 17 14:44:13.752] main.c:57 ***** File Name: /data/file-20.txt
[Mar 17 14:44:13.752]
[Mar 17 14:44:13.758] mgos_vfs.c:283 /data/file-20.txt -> /data/file-20.txt pl 5 -> 2 0x3ffb7e4c (refs 1)
[Mar 17 14:44:14.055] /data/fwbuild-volumes/latest/apps/winbond-w25n-test/esp32/build_contexts/build_ctx_434460174/deps/vfs-fs-lfs/littlefs/lfs.c:1691:warn: Superblock 0x1 has become unwritable
[Mar 17 14:44:14.074] mgos_vfs.c:377 open /data/file-20.txt 0x602 0x1b6 => 0x3ffb7e4c file-20.txt -6 => -6 (refs 0)
[Mar 17 14:44:14.076] main.c:66 fopen() Failed
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)