eric2013 发表于 2018-6-11 15:37:47

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

说明:
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盘。

static/image/hrline/4.gif
当前NAND的配置如下:
https://img.anfulai.cn/dz/attachment/forum/pw/Fid_42/42_58_aac6696c1cf8ed1.png

RTX调试组件:


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


static/image/hrline/4.gif

使用说明如下:

请选择串口操作命令,电脑键盘打印数字即可:
首次使用,务必调用串口命令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

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

例程下载:
V4开发板:
V5开发板:
V6开发板:
RL-USB和RL-FlashFS的文档:

static/image/hrline/4.gif
通过串口做的命令行操作:


模拟U盘操作效果:


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



eric2013 发表于 2018-6-11 16:10:48

F103的USB和NAND部分原理图:



F407的USB和NAND部分原理图:



F429的USB和NAND部分原理图:



qgyhd1234 发表于 2018-6-11 16:56:06

{:32:}为硬汉哥疯狂打call

谢文亮_cfJwm 发表于 2018-6-11 16:59:54

厉害了!!!

5261zgj 发表于 2018-6-11 17:01:27

{:8:}硬汉牛!!

ptiinngg 发表于 2018-6-11 17:14:15

{:8:}{:8:}{:8:}

sanit 发表于 2018-6-11 17:24:57

这个必需赞{:8:}

小狐狸 发表于 2018-6-11 17:29:42

谢谢分享

硬汉哥辛苦啦

byccc 发表于 2018-6-12 09:58:56

给力!

leiyitan 发表于 2018-6-12 23:35:39

正在想这个东西了,版主大大竟然这么及时的放出来了……

FccHome2018 发表于 2018-6-17 07:38:13

rlarm.chm 文件只有目录可以,内容看不到啊

eric2013 发表于 2018-6-17 12:34:19

FccHome2018 发表于 2018-6-17 07:38
rlarm.chm 文件只有目录可以,内容看不到啊

http://www.armbbs.cn/forum.php?mod=viewthread&tid=13445&highlight=chm

大鹏 发表于 2018-6-24 17:30:28

大神是否测试过,168MHz STM32F407如果不用操作系统的话读NAND速度最快到多少啊?

eric2013 发表于 2018-6-25 09:27:20

大鹏 发表于 2018-6-24 17:30
大神是否测试过,168MHz STM32F407如果不用操作系统的话读NAND速度最快到多少啊?

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

大鹏 发表于 2018-6-25 20:33:24

eric2013 发表于 2018-6-25 09:27
裸机的还真没测试过速度,你可以在当前的测试速度上乘以1.5 - 2.0,基本就是这个速度了。

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

eric2013 发表于 2018-6-26 03:01:28

大鹏 发表于 2018-6-25 20:33
能否指点一下为什么是在当前测试速度上乘以1.5-2.0就是裸机读取flash速度呢?在这个上面好迷惑啊

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

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

笑看人生 发表于 2018-8-1 23:07:22

eric2013 发表于 2018-6-11 16:10
F103的USB和NAND部分原理图:




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

ShiJane 发表于 2018-8-1 23:44:37

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

eric2013 发表于 2018-8-2 00:57:20

笑看人生 发表于 2018-8-1 23:07
想问一下,这个库可以移植到IAR使用吗,还是必须在KEIL平台下使用

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

eric2013 发表于 2018-8-2 00:58:48

ShiJane 发表于 2018-8-1 23:44
参考F407移植到项目开发用的F417中,nandflash用的K9F2G08U0A,三星的256M,修改代码已实现文件系统的操作 ...


ShiJane 发表于 2018-8-2 01:18:43

eric2013 发表于 2018-8-2 00:58


挂载USB还是不行,相关配置截图

eric2013 发表于 2018-8-2 08:58:41

ShiJane 发表于 2018-8-2 01:18
挂载USB还是不行,相关配置截图

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

小狐狸 发表于 2018-9-8 12:29:02

本帖最后由 小狐狸 于 2018-9-9 16:39 编辑

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

小狐狸 发表于 2018-9-9 16:25:47

本帖最后由 小狐狸 于 2018-9-9 16:39 编辑

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

小狐狸 发表于 2018-9-9 16:38:25

eric2013 发表于 2018-8-2 08:58
保险起见,换个USB线试试,换个电脑试试。

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

eric2013 发表于 2018-9-10 00:18:51

小狐狸 发表于 2018-9-9 16:38
请教硬汉哥,使用文件系统时,这个值:FAT Name Cache Size 一般设置多大呢,设置大小的原则是什么呢
我 ...

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

小狐狸 发表于 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,那单片机就没有足够的空间啦。所以这样推断的话应该不是累计的数量,应该是同时打开操作的目录和文件的个数吧?


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



eric2013 发表于 2018-9-10 09:29:50

小狐狸 发表于 2018-9-10 09:15
嗯,创建的文件多指的是一次性或者同时创建或者打开的多呢还是长期下来累计创建的多呢?

比如,我每天 ...

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

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

小狐狸 发表于 2018-9-10 09:58:28

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

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

eric2013 发表于 2018-9-11 02:33:52

小狐狸 发表于 2018-9-10 09:58
嗯,这么说这个参数是:累计创建过的文件和目录名的总和呢?不是自己创建的文件或目录也算了?
后面试试 ...

最好全都算进去。

小狐狸 发表于 2018-9-11 08:42:21

eric2013 发表于 2018-9-11 02:33
最好全都算进去。

好的{:31:}

sanit 发表于 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;

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


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



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




eric2013 发表于 2018-10-30 13:44:59

sanit 发表于 2018-10-29 18:01
老大,今天使用RL_USB模拟U盘,发现一个奇怪的现象:当使能U盘挂载之后,就不能在使用printf打印东西了,否 ...

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

roguebear 发表于 2018-12-29 14:55:19

我靠,这个好。
可是目前硬件定死了只能用串口, 软件也只能用ucos。。。
一堆的校验数据要放qspi flash,使用时要读入,通过串口上位机更新。。。
头疼,还要自己来造轮子。
硬汉有啥招推荐下不。

eric2013 发表于 2018-12-31 01:32:59

roguebear 发表于 2018-12-29 14:55
我靠,这个好。
可是目前硬件定死了只能用串口, 软件也只能用ucos。。。
一堆的校验数据要放qspi flash ...

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

yirenonege 发表于 2019-1-15 23:20:46

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

eric2013 发表于 2019-1-16 00:20:04

yirenonege 发表于 2019-1-15 23:20
你好 我想咨询个问题,RL-FlashFS 可以解决 Fat 文件系统,每次都要擦写fat表的问题么,使用stm32f407 读写 ...

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

yirenonege 发表于 2019-1-17 19:56:13

eric2013 发表于 2019-1-16 00:20
FlashFS用于SPI Flash不是FAT格式,属于嵌入式文件系统。

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

eric2013 发表于 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?mod=viewthread&tid=91197&extra=page%3D1

片羽之神 发表于 2019-1-28 13:09:15

mark~~~1024!!!
页: [1] 2
查看完整版本: 【原创开源应用第2期】基于RL-USB和RL-FlashFS的完整NAND解决方案,稳定好用,可放心用于产品批量