qq371833846 发表于 2021-9-3 16:14:38

关于RL-Flash里fopen函数返回NULL的疑惑与解决方法.

本帖最后由 qq371833846 于 2021-9-3 16:51 编辑

在V6板子上学习RL-FlashFS的时候,打算使用板子上的W25Q64做载体.于是复制了"基于STM32H7的RL-FlashFS V6.X驱动SPI Flash"里的相关代码,主要把里面的SPI1改成V6的SPI3,CS改成V6的PD13即可

按照demo流程依次调用finit初始化,fmount挂载,fformat格式化都能返回fsOK,然后当调用fopen的时候却一直返回NULL,也就无法进行后面对文件的操作.由于这文件系统并没有开源,找了老半天也不知道是哪里的问题,手册里的File System Component 文档也看了个遍.


RTE里LFN Debug,SFN Debug 都试了也不行.


甚至Event Recorder都看了也找不到问题所在(fopen的时候看它疯狂调用FileAllocRead,貌似在查找要open的文件名)


而单纯测试W25QXX.c里的sf_EraseSector,sf_ReadBuffer,sf_WriteBuffer(其实都是调用bsp_spi_flash.c)是都能正常操作spiflash的.


最后实在没办法了,就仔细看了看KEIL自带的N25Q032A flash驱动,这应该和V6上W25Q64只有容量上的区别,最终在经过像素级比较后发现端倪:W25QXX.c里ReadData,ProgramData这两个读写函数返回值是ARM_DRIVER_OK,也就是0,而keil的N25Q032A.c里返回的是读写长度.


抱着试试看的心理也修改成返回长度


接着重新调试,这下调用fopen返回文件指针终于不是NULL了


后续的fwrite,fread,fprintf等函数均能正常使用.没做大量测试,暂不清楚会不会存在什么Bug,没有V7板子也不清楚为什么没修过也能正常运行.
另我的KEIL MDK是5.30,文件系统是6.14.1.

qq371833846 发表于 2021-9-3 16:17:06

咋没图片????????

qq371833846 发表于 2021-9-3 16:35:24

编辑出来后面的图片都乱了,哎.

eric2013 发表于 2021-9-4 09:23:56

非常感谢楼主分享。

eric2013 发表于 2021-9-4 09:24:15

qq371833846 发表于 2021-9-3 16:35
编辑出来后面的图片都乱了,哎.

不乱,整理的非常好。
页: [1]
查看完整版本: 关于RL-Flash里fopen函数返回NULL的疑惑与解决方法.