Skip to content

SPIFFS可以成功挂载文件系统,POSSIX / C均可以打开文件,但是读文件失败,返SPIFFS_ERR_INDEX_REF_LU [-10016] (GIT8266O-328) #766

Closed
@EaonL

Description

@EaonL

环境描述:
ESP8266 + 4M Bytes SPI FLASH 【W25Q32】+ SDK release/v3.2

分区定义:
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 512K,
storage, data, spiffs, , 448K,

操作步骤:

  1. 使用esptools.py工具先整体擦除Flash;
  2. 创建spiffs文件系统镜像目录:
    mkdir spiffs_root
    vim hello.txt 【随便写了一串字符串在文件里】
  3. 使用如下命令制作spiffs文件系统镜像:
    python ./tools/spiffsgen.py 0x70000 spiffs_root/ spiffs.bin
  4. 在storage分区烧写文件系统镜像:
    python ./tools/esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 write_flash -z 0x90000 spiffs.bin
  5. 改写SPIFFS_CHECK_RES宏函数,打印相关错误信息:
    #define SPIFFS_CHECK_RES(res)
    do {
    if ((res) < SPIFFS_OK)
    {
    printf("Err!! file: %s, func: %s, line: %d, ErrNo: %d\n\n", FILE, func, LINE, res);
    return (res);
    }
    } while (0);
  6. make menuconfig将Log out等级设置为Debug模式,并打开SPIFFS的所有输出;
  7. 改写example/storage/spiffs/main/spiffs_example_main.c :
    7.1 挂载spiffs;
    7.2 POSSIX 或 C 编写open("/spiffs/hello.txt",...),read(fd, ...);
  8. make flash && make monitor;
  9. 输出如下日志:

D (701) SPIFFS: read: load objix page 0001:0000 for data spix:0000

D (711) SPIFFS: read: offset:0 rd:20 data spix:0000 is data_pix:ff00 addr:00ff0005

Err!! file: /root/esp/ESP8266_RTOS_SDK/components/spiffs/spiffs/src/spiffs_nucleus.c, func: spiffs_object_read, line: 2036, ErrNo: -10016

D (741) SPIFFS: SPIFFS_clearerr

Note:
spiffs的问题库上找到一条类似的问题描述: pellepl/spiffs#160
他的环境是MSP430 + IAR,由于地址对齐问题引发,他使能cache可以read;然而我在ESP8266上各种折腾也不能成功读出文件,我有尝试使用esptools.py工具读Flash,读出来的内容和写进去的内容一致。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions