硬汉嵌入式论坛

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

[开源应用] 【原创开源应用第2期】基于RL-USB和RL-FlashFS的完整NAND解决方案,稳定好用,可放心用于产品批量

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
发表于 2018-6-11 15:37:47 | 显示全部楼层 |阅读模式
说明:
0. NAND Flash这块经常有人咨询,这里发布一个完整的解决方案,支持擦写均衡,坏块管理,ECC和掉电保护。   
    早期的时候我们是用的自己做的NAND算法,支持滑块管理,擦写均衡,实际测试效果不够好,容易出问题,所以放弃了。
1. 此例子仅支持MDK4.74版本,因为RTX,RL-FlashFS,RL-USB都是来自MDK4.74的安装目录,使用MDK4.74才是最佳组合。
2. RL-FlashFS本身支持擦写均衡,坏块管理,ECC和掉电保护。其中使用掉电保护的话,请开启配置文件中的FAT Journal。
3. 在前几年的时候,有客户反应使用RL-FlashFS写入文件多后会写入越来越慢,原因是没有正确配置,加大文件名缓冲个数即可。
4. 当前使用的短文件名的库,使用长文件名的话请更换为长文件名的库,也在MDK的安装目录里面。
5. RL-FlashFS是FAT兼容的文件系统,也就是说可以在window系统上面模拟U盘,提供的程序代码已经做了支持。
6. RL-FlashFS的文件名仅支持ASCII,不支持中文,这点要特别注意。
7. 首次格式化后使用,读速度2.3MB/S左右,写速度3.2MB/S左右,配置不同的文件系统缓冲大小,速度有区别。
8. RL-FlashFS的函数是标准的C库函数,跟电脑端的文件系统使用方法一样。
9. RL-FlashFS与FatFS的区别,FatFS仅是一个FAT类的文件件系统,擦写均衡,坏块管理,ECC和掉电保护都不支持。
    这些都需要用户自己去实现。
10. UFFS,YAFFS这两款文件系统是不兼容FAT的,也就是无法在Windows端模拟U盘。


当前NAND的配置如下:


RTX调试组件:
888.png

优化等级方面,各种优化等级和超给力的时间优化,可以任意搭配选择,都可以正常通过
QQ截图20180611160324.png



使用说明如下:

请选择串口操作命令,电脑键盘打印数字即可:
首次使用,务必调用串口命令0,进行NAND Flash的低级格式化和文件系统格式化!
0 - 低级格式化,显示NAND Flash容量和剩余容量
1 - 显示NAND Flash根目录下的文件
2 - 创建三个text文本并使用不同函数写入内容
3 - 使用三个不同函数读取文本\r\n");
4 - 创建一个text文本并指定一个位置对其进行读写操作
5 - 删除文件夹和文件
6 - 测试文件读写速度
7 - 写数据到CSV文件中
8 - 从CSV文件中读数据
a - 打开NAND模拟U盘,注意是小写字母a
b - 关闭NAND模拟U盘,注意是小写字母b


百度云下载:
链接: https://pan.baidu.com/s/1KTpBUB6hiWbVqcqjKbQAQA 提取码: kuj2

例程下载:
V4开发板: 基于STM32F103ZET6的RTX RL-USB RL-FlashFS的完整NAND解决方案.7z (1.38 MB, 下载次数: 2192)
V5开发板: 基于STM32F407IGT6的RTX RL-USB RL-FlashFS的完整NAND解决方案.7z (2.42 MB, 下载次数: 1991)
V6开发板: 基于STM32F429BIT6的RTX RL-USB RL-FlashFS的完整NAND解决方案.7z (3.02 MB, 下载次数: 2427)
RL-USB和RL-FlashFS的文档: rlarm.chm (3.55 MB, 下载次数: 1682)


通过串口做的命令行操作:
888.jpg

模拟U盘操作效果:
777.png

电脑端复制文件进去,速度基本是300-500KB/S
666.png


评分

参与人数 1金币 +20 收起 理由
byccc + 20 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-6-11 16:10:48 | 显示全部楼层
F103的USB和NAND部分原理图:
1.png
2.png

F407的USB和NAND部分原理图:
3.png
4.png

F429的USB和NAND部分原理图:
5.png
6.png

回复

使用道具 举报

4

主题

139

回帖

151

积分

初级会员

积分
151
QQ
发表于 2018-6-11 16:56:06 | 显示全部楼层
为硬汉哥疯狂打call
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2018-6-11 16:59:54 | 显示全部楼层
厉害了!!!
回复

使用道具 举报

1

主题

18

回帖

21

积分

新手上路

积分
21
发表于 2018-6-11 17:01:27 | 显示全部楼层
硬汉牛!!
回复

使用道具 举报

14

主题

109

回帖

151

积分

初级会员

积分
151
发表于 2018-6-11 17:14:15 | 显示全部楼层
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2018-6-11 17:24:57 | 显示全部楼层
这个必需赞
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-6-11 17:29:42 | 显示全部楼层
谢谢分享

硬汉哥辛苦啦
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-6-12 09:58:56 | 显示全部楼层
给力!
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-6-12 23:35:39 | 显示全部楼层
正在想这个东西了,版主大大竟然这么及时的放出来了……
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2018-6-17 07:38:13 | 显示全部楼层
rlarm.chm 文件只有目录可以,内容看不到啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-6-17 12:34:19 | 显示全部楼层
回复

使用道具 举报

6

主题

33

回帖

51

积分

初级会员

积分
51
发表于 2018-6-24 17:30:28 | 显示全部楼层
大神是否测试过,168MHz STM32F407如果不用操作系统的话读NAND速度最快到多少啊?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-6-25 09:27:20 | 显示全部楼层
大鹏 发表于 2018-6-24 17:30
大神是否测试过,168MHz STM32F407如果不用操作系统的话读NAND速度最快到多少啊?

裸机的还真没测试过速度,你可以在当前的测试速度上乘以1.5 - 2.0,基本就是这个速度了。
回复

使用道具 举报

6

主题

33

回帖

51

积分

初级会员

积分
51
发表于 2018-6-25 20:33:24 | 显示全部楼层
eric2013 发表于 2018-6-25 09:27
裸机的还真没测试过速度,你可以在当前的测试速度上乘以1.5 - 2.0,基本就是这个速度了。

能否指点一下为什么是在当前测试速度上乘以1.5-2.0就是裸机读取flash速度呢?在这个上面好迷惑啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-6-26 03:01:28 | 显示全部楼层
大鹏 发表于 2018-6-25 20:33
能否指点一下为什么是在当前测试速度上乘以1.5-2.0就是裸机读取flash速度呢?在这个上面好迷惑啊

因为做了软件ECC校验了和使用了文件系统。

文件系统还是比较消耗性能的。
回复

使用道具 举报

0

主题

3

回帖

22

积分

新手上路

积分
22
发表于 2018-8-1 23:07:22 | 显示全部楼层
eric2013 发表于 2018-6-11 16:10
F103的USB和NAND部分原理图:

想问一下,这个库可以移植到IAR使用吗,还是必须在KEIL平台下使用
回复

使用道具 举报

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2018-8-1 23:44:37 | 显示全部楼层
参考F407移植到项目开发用的F417中,nandflash用的K9F2G08U0A,三星的256M,修改代码已实现文件系统的操作和访问,但挂载USB,电脑端没有反应,挂仿真器可以看到RT-USB建立的两个TASK。查看USB的驱动代码,都是寄存器写的,不是很熟悉。大概会是什么原因造成的呢?USB用的PA11和PA12,通过别的USB程序可以验证板子可以挂载到电脑上,应该不是硬件上的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-8-2 00:57:20 | 显示全部楼层
笑看人生 发表于 2018-8-1 23:07
想问一下,这个库可以移植到IAR使用吗,还是必须在KEIL平台下使用

这个还真不行,主要是因为库是MDK工程创建的,只能在MDK工程下使用。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-8-2 00:58:48 | 显示全部楼层
ShiJane 发表于 2018-8-1 23:44
参考F407移植到项目开发用的F417中,nandflash用的K9F2G08U0A,三星的256M,修改代码已实现文件系统的操作 ...

QQ截图20180802005832.png
回复

使用道具 举报

0

主题

2

回帖

6

积分

新手上路

积分
6
发表于 2018-8-2 01:18:43 | 显示全部楼层

挂载USB还是不行,相关配置截图
捕获.JPG
捕获2.JPG
捕获3.JPG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-8-2 08:58:41 | 显示全部楼层
ShiJane 发表于 2018-8-2 01:18
挂载USB还是不行,相关配置截图

保险起见,换个USB线试试,换个电脑试试。
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-9-8 12:29:02 | 显示全部楼层
本帖最后由 小狐狸 于 2018-9-9 16:39 编辑

打错了,本楼无效,不好意思啊
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-9-9 16:25:47 | 显示全部楼层
本帖最后由 小狐狸 于 2018-9-9 16:39 编辑

打错了,本楼无效,不好意思啊
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-9-9 16:38:25 | 显示全部楼层
eric2013 发表于 2018-8-2 08:58
保险起见,换个USB线试试,换个电脑试试。

请教硬汉哥,使用文件系统时,这个值:FAT Name Cache Size 一般设置多大呢,设置大小的原则是什么呢
我设置为0和100,使用中似乎没发现什么区别啊。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-9-10 00:18:51 | 显示全部楼层
小狐狸 发表于 2018-9-9 16:38
请教硬汉哥,使用文件系统时,这个值:FAT Name Cache Size 一般设置多大呢,设置大小的原则是什么呢
我 ...

创建的文件越多,此值就必须得越大,防止文件越多,创建越慢的问题。
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-9-10 09:15:36 | 显示全部楼层
eric2013 发表于 2018-9-10 00:18
创建的文件越多,此值就必须得越大,防止文件越多,创建越慢的问题。

嗯,创建的文件多指的是一次性或者同时创建或者打开的多呢还是长期下来累计创建的多呢?

比如,我每天建立一个当天日期的文件夹,一天中每1分钟创建、记录一个文件放到该文件夹中,这样的话每个文件夹中有60个*24h=1440个文件,一般记录保留1个月后清空里面的所有文件,这样算下来的话,30天共有:30*1440=43200个文件。

按照这样的应用的话,这个FAT Name Cache Size是不是设置为50000比较好呢?但是每个cache占用48字节的RAM,那单片机就没有足够的空间啦。所以这样推断的话应该不是累计的数量,应该是同时打开操作的目录和文件的个数吧?
2018-09-10_090732.png

编辑原因:修改图片的对齐方式



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-9-10 09:29:50 | 显示全部楼层
小狐狸 发表于 2018-9-10 09:15
嗯,创建的文件多指的是一次性或者同时创建或者打开的多呢还是长期下来累计创建的多呢?

比如,我每天 ...

这么多文件没必要用单片机的RAM了,你应该把外部SRAM或者SDRAM分配给他,看FAT Name后面的参数,就是专门配置这个做的。

而同时打开文件的配置参数是第1个 Number of open files
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-9-10 09:58:28 | 显示全部楼层
eric2013 发表于 2018-9-10 09:29
这么多文件没必要用单片机的RAM了,你应该把外部SRAM或者SDRAM分配给他,看FAT Name后面的参数,就是专门 ...

嗯,这么说这个参数是:累计创建过的文件和目录名的总和呢?不是自己创建的文件或目录也算了?
后面试试把外部SRAM分配给fs试试。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-9-11 02:33:52 | 显示全部楼层
小狐狸 发表于 2018-9-10 09:58
嗯,这么说这个参数是:累计创建过的文件和目录名的总和呢?不是自己创建的文件或目录也算了?
后面试试 ...

最好全都算进去。
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-9-11 08:42:21 | 显示全部楼层
eric2013 发表于 2018-9-11 02:33
最好全都算进去。

好的
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2018-10-29 18:01:14 | 显示全部楼层
本帖最后由 sanit 于 2018-10-30 10:06 编辑

老大,今天使用RL_USB模拟U盘,发现一个奇怪的现象:当使能U盘挂载之后,就不能在使用printf打印东西了,否则U盘就会掉,然后一会自己又出来。但是打印一个字母是可以的。我使用【【原创开源应用第2期】基于RL-USB和RL-FlashFS的完整NAND解决方案,稳定好用,可放心用于产品批量】这个代码,也是一模一样的现象。
然后我继续跟踪发现:
(我使用阻塞式发送如下,【实时证明使用发送中断也是会发送上面所述的现象】)
while((USART1->SR&0X40)==0);
delay_us(10);
USART1->DR = (uint8_t)ptr[j];

增加一个小延时就没问题了。请问老大这个是什么原因呢?难道不加延时,USB通信在串口发送的使用无法中断?我再串口发送的时候U盘没有写入和读出操作啊。难道USB内部轮询频率很高?请老大帮忙分析一下什么原因。谢谢!!!


我再主循环中加入:
DISABLE_INT();
delay_ms(1000);delay_ms(1000);                          
ENABLE_INT();
关闭全局中断2秒,U盘也不会掉,只是操作U盘反应慢了点,这个好解释。但是使用串口发送数据,直接导致U盘挂掉。串口发送完毕,U盘自己又恢复了,好邪乎



结贴:原因是OTG_FS_VBUS 这个管脚跟TX冲突。知道原因就好解决了




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-10-30 13:44:59 | 显示全部楼层
sanit 发表于 2018-10-29 18:01
老大,今天使用RL_USB模拟U盘,发现一个奇怪的现象:当使能U盘挂载之后,就不能在使用printf打印东西了,否 ...

不好意思啊,没有及时回复你。
回复

使用道具 举报

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
发表于 2018-12-29 14:55:19 | 显示全部楼层
我靠,这个好。
可是目前硬件定死了只能用串口, 软件也只能用ucos。。。
一堆的校验数据要放qspi flash,使用时要读入,通过串口上位机更新。。。
头疼,还要自己来造轮子。
硬汉有啥招推荐下不。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2018-12-31 01:32:59 | 显示全部楼层
roguebear 发表于 2018-12-29 14:55
我靠,这个好。
可是目前硬件定死了只能用串口, 软件也只能用ucos。。。
一堆的校验数据要放qspi flash ...

这种好像没有好的方案,直接串口上位机更新吧。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2019-1-15 23:20:46 | 显示全部楼层
你好 我想咨询个问题,RL-FlashFS 可以解决 Fat 文件系统,每次都要擦写fat表的问题么,使用stm32f407 读写spi flash,里面挂文件系统。这样我每次保存数据的时候,不都得对fat表进行擦写删除么。fat表固定在第一扇区,那么反复写入文件,flash寿命会被fat表扇区读写次数限制。。。。  希望大神解答,谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2019-1-16 00:20:04 | 显示全部楼层
yirenonege 发表于 2019-1-15 23:20
你好 我想咨询个问题,RL-FlashFS 可以解决 Fat 文件系统,每次都要擦写fat表的问题么,使用stm32f407 读写 ...

FlashFS用于SPI Flash不是FAT格式,属于嵌入式文件系统。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2019-1-17 19:56:13 | 显示全部楼层
eric2013 发表于 2019-1-16 00:20
FlashFS用于SPI Flash不是FAT格式,属于嵌入式文件系统。

有SPI flash,使用rl-flashfs,并且插到电脑上能识别成U盘的例子么??现在硬件做好了,换成nand flash已经来不及了,都怪自己没研究透彻就开工了。本来以为用fatfs可以的,写到后面发现有均衡磨损做不来
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
 楼主| 发表于 2019-1-18 00:05:08 | 显示全部楼层
yirenonege 发表于 2019-1-17 19:56
有SPI flash,使用rl-flashfs,并且插到电脑上能识别成U盘的例子么??现在硬件做好了,换成nand flash已 ...

在你的这个帖子进行了回复:

http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

0

主题

38

回帖

38

积分

新手上路

one is enough

积分
38
发表于 2019-1-28 13:09:15 | 显示全部楼层
mark~~~1024!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 06:56 , Processed in 0.315511 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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