硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1221|回复: 16
收起左侧

[RL-FlashFS] 开贴讨论下RL-FlashFS使用中的注意事项和问题,希望与坛友沟通学下

[复制链接]

7

主题

25

回帖

46

积分

新手上路

积分
46
发表于 2023-7-12 14:08:57 | 显示全部楼层 |阅读模式
打算用RL-FlashFS 管理SD、spi nor flash(GD25Q80)和spi nand flash(W25N01),中间使用遇到一些问题,记录下和大家沟通交流,此贴持续更新,希望硬汉哥支持下


一、spi nor flash(GD25Q80)
1.使用fopen时打开返回为null
   调试发现驱动是正常的,可以用使用ffind找到文件,ffree也是不为0,可以fopen已有文件,然后删除一个文件后就可以创建新文件,感觉ffree返回不准

2.使用fdelete删除文件,ffree没有变化
   有时使用fdelete删除文件,ffree没有变化,连续删除好几个才变化,并且删除文件大小和ffree结果不一定一致

3.fwrite写返回与要写数据不一致
   这是时候应该是空间不够,但是删除文件后有空间后再写还是会失败,并行这个文件会关闭失败

二、spi nand flash(W25N01)
   待移植,如果有移植过的坛友方便的话给个例程,目前对下图中的参数有疑惑




回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-13 10:28:39 | 显示全部楼层
一、spi nor flash(GD25Q80)
2.使用fdelete删除文件,ffree没有变化
   调试发现删除一两个文件并没有触发block擦除,应该只有擦除了block后ffree才会更新,并且每次都是64K左右,应该就是块擦除。

3.fwrite写返回与要写数据不一致
   一种情况是空间不够,另一种遇到是通过ffree获取的flash大小是个非常大的数,这个时候也写不成功,感觉文件系统受损了

4.当剩余空间小于本次要写的数据量时,fwrite必失败,且该文件删除不了
   写文件前判断剩余空间是否足够
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-13 14:24:34 | 显示全部楼层
一、spi nor flash(GD25Q80)
4.当剩余空间小于本次要写的数据量时,fwrite必失败,且该文件删除不了
   如果剩余空间小于4K,就删除文件,发现运行一段时间后某一次执行删除文件后(即块擦除)剩余空间尽然小于64K,也在此时发生写错误,目前将4k改为10k继续测试

5.文件一多(起始也就五六十个)使用ffind查询文件非常慢
   刚开始每个文件就一二十ms,到后面多了一个文件要1s多
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2023-7-13 15:58:18 | 显示全部楼层
非常好的讨论帖子。

删除后,调用fdefrag,然后调用ffree是不是好点


[C] 纯文本查看 复制代码
#include <rtl.h>;

void free_space (void)  {

  printf ("\nFree space before defrag: %d bytes.", ffree("F:"));
  if (fanalyse("F:") > 50)  {
     fdefrag ("F:");
  }
  printf ("\nFree space after defrag: %d bytes.", ffree("F:"));
}

回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-13 16:37:40 | 显示全部楼层
eric2013 发表于 2023-7-13 15:58
非常好的讨论帖子。

删除后,调用fdefrag,然后调用ffree是不是好点

多谢硬汉哥支持,正准备试下,顺便问你几个问题
1.

1.png

这个heap memory 就是startup 里面的Heap_Size吗


2.

2.png

这个NAND Flash不一定非得是FSMC的,spi也可以,驱动实现就好了 ?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2023-7-14 08:19:49 | 显示全部楼层
xsyyhz 发表于 2023-7-13 16:37
多谢硬汉哥支持,正准备试下,顺便问你几个问题
1.

1、单独开的。
/* Memory resources allocated by the Flash File System */
struct iob _iob[N_FILES];

/* Exported Defines to other modules */
U16 const _NFILE   = N_FILES;
U16 const _NDRV    = FS_NDRV;

2、对,是这样的。
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-14 08:58:36 | 显示全部楼层

一、spi nor flash(GD25Q80)
4.当剩余空间小于本次要写的数据量时,fwrite必失败,且该文件删除不了
   之前10k理解不对,应该自己应用层代码问题,但是写之前还是得必须保证有剩余空间

5.文件一多(起始也就五六十个)使用ffind查询文件非常慢
   这个安装硬汉哥每次删除调用free_space就可以保证查询速度基本不变

6.晚上测试擦除block 1477次,打印日志发现都是每个块轮询擦除,之前在哪看说spi flash不支持均衡算法,应该有误吧
回复

使用道具 举报

1

主题

109

回帖

112

积分

初级会员

固件開發工程師

积分
112
QQ
发表于 2023-7-14 09:57:59 | 显示全部楼层
我对这个W25N01也蛮有兴趣,之前简单看过RL-Flash里对NAND的支持,看到说不支持SPI NAND就没有继续,使用了RT-Thread里的UFFS。

  • If your microcontroller device does not have a CMSIS Driver for the NAND (API), you can try to develop your own one based on the  CMSIS-Driver Reference documentation.
  • The page NAND Flash Translation Layer describes additional features specific to these devices.
  • Using a NAND (API) driver, you can use any NAND Flash device with an 8-/16-bit memory bus interface for data storage.
  • NAND Flashes with SPI interface (Serial NAND) are currently not supported by the File System Component.
  • General System Resource Configuration requirements apply.

回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-14 11:07:53 | 显示全部楼层
----- 发表于 2023-7-14 09:57
我对这个W25N01也蛮有兴趣,之前简单看过RL-Flash里对NAND的支持,看到说不支持SPI NAND就没有继续,使用了 ...

目前我这边用的都是旧版的,先试下
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-14 12:22:24 | 显示全部楼层
----- 发表于 2023-7-14 09:57
我对这个W25N01也蛮有兴趣,之前简单看过RL-Flash里对NAND的支持,看到说不支持SPI NAND就没有继续,使用了 ...

我用的是旧版本,你这段英文也没明确说不支持
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-16 10:21:08 | 显示全部楼层
eric2013 发表于 2023-7-14 08:19
1、单独开的。
/* Memory resources allocated by the Flash File System */
struct iob _iob[N_FILES] ...

硬汉哥,再请教点问题
一、spi nor flash(GD25Q80)
7.用fwrite写每次写1K必须写2Kffree才会变化,什么原因,文件系统难道缓存默认2K才写?

8.第一次使用是否可以用fcheck确认是否是rl-flashfs系统,教程貌似fcheck不正确旧要fformat?

9.上次说的fanalyse好像只适用于 EFS系统,SD卡不会有同样问题?
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-16 21:42:00 | 显示全部楼层
一、spi nor flash(GD25Q80)
10.当我每次写1020,写两次后ffree大小才更新,更新时确实小了2k,当每次写的数据为200多字节,写很多次ffree一直都不更新,然后每次写完后加fflush后ffree就是刷新大小,但是用在sd卡时fflush好像没效果,文档也貌似这个意思,这样fwrite到底有没有写入效果?
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
 楼主| 发表于 2023-7-17 09:06:23 | 显示全部楼层
一、spi nor flash(GD25Q80)
11.关于fflush何时调用
    问题10中发现每次写1020时,写两次后系统会自动写入flash,但是每次写200多字节时,不调用fflush,数据就一直无法写入flash,但是每200字节就调用调用一次fflush,貌似会产生太多Allocation Information,这样ffind会超级慢,所以现在每次2K后调用fflush,但是这个2K是rl-flashfs里面的缓存吗?大小在哪配置?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2023-7-17 10:01:20 | 显示全部楼层
xsyyhz 发表于 2023-7-16 10:21
硬汉哥,再请教点问题
一、spi nor flash(GD25Q80)
7.用fwrite写每次写1K必须写2Kffree才会变化,什 ...

1、不排除这个free函数不太好用,后面可以考虑测试下MDK5带的FlashFS
2、这个函数我没测试过。
3、SD卡有,不过SD空间非常大,基本不去回收。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-4-11 18:45:40 | 显示全部楼层
我用的W25Q64, STM32F103 + KEIL4 + MDK工作非常好,速度也不错,但是换了STM32F407,同样的开发环境,驱动部分基本上不变,就变得非常慢。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-4-11 18:49:58 | 显示全部楼层
STM32F103上使用Keil4+MDK4的File_ex1例程,参照写了一个W25Q64的驱动,工作状态良好。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-4-11 19:14:54 | 显示全部楼层
本帖最后由 littlestone08 于 2024-4-11 19:40 编辑

使用W25Q64,
KEIL4 +MDK4,使用标准库,照参考的代码写了驱动后,基本上没有遇到什么问题,运行自带的File_ex1例子,状态非常好。
于是,同样的代码换成STM32F407, 单片机,连引脚名都没有换,结果就悲剧了,表现如下:
1 运行"dir"命令时非常慢,文件越大越慢,发现是最终是调用了"ffind"最后到驱动的ReadData函数,似乎是把文件的所有内容都枚举了一遍,最要命的是ReadData读一次只读4字节或8字节,但同样在STM32F103上,也是4字节或8字节的调用,就非常快。经过打印驱动调用过程信息对比,M4的单片机上,似乎枚举了文件的所有内容,而F103上只枚举了需要的部分。
2  运行"type"命令(程序中逐个字符读取),同样的情况,F103,瞬间读完1000行文本,而F407则是肉眼可见的慢的速度在打印(使用的是SEGGER RTT,非阻塞SKIP)
3  F103建立好1000行的文本,拆下芯片放到F407的板子上,仅读取和列出,速度依然很慢。而F407建立好的文件的芯片,放到F103的板子上,速度也很快,说明不是芯片上存储内容差异引起的,进一步推论F407的驱动的代码应该也是没有问题的,要不然,把W25Q64换到  F103的板子上,多少会出现问题。
4 怀疑M3和M4链接的代码不同,但是因为不是开源,也没有办法验证,于是换了KEIL5+RTE+CUBEMX方式,重新实现了一遍,以为能解决问题,折腾好几天,跑通了,在F407上速度与KEIL4上一样的慢。

抓狂了。Q网络上搜索,似乎RL-FLASH +NOR的贴子并不多,更不用说F407指定型号。Q

以上对比是在相同级别的SPI时钟速度上对比,按说,相同的开发环境,库版本,相同的开发环境和驱动,不应该出现这么大的差别。不知道有没有大佬遇到过可以指点一下或讨论下。

如果有需要,我可以贴出代码或以附件的形式给出完整的工程,在此多谢
------------------------------
上面连续两回复为误操作,按住了CTRL,结果回车就出去了。另发一个主题https://www.armbbs.cn/forum.php?mod=viewthread&tid=123665,可以在这里救我,再次拜谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 03:38 , Processed in 0.229181 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表