关于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:35
编辑出来后面的图片都乱了,哎.
不乱,整理的非常好。
页:
[1]