在nandflash上使用fat文件系统,应该是比较有挑战性的吧!

rhy2K3 2009-07-25 03:18:53
在nandflash上使用fat文件系统,应该也是可行的吧,只要可以完成逻辑地址到物理地址的转换算法,这个算法当然要考虑到坏块识别,垃圾收集,磨损均衡等等模块!

还有几个概念,想请大家给分析下,
1 nand flash是块擦除,页读写。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?

请教各位过来人,关于这方面有没有什么可以可供参考的信息!大家也可以帮偶分析下,探讨探讨!
...全文
641 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
crifan 2009-08-04
  • 打赏
  • 举报
回复
这个是pdf版本的,也许对你有用:
【简介】如何编写linux下nand flash驱动 v1.0 .pdf
http://download.csdn.net/source/1513220
crifan 2009-08-04
  • 打赏
  • 举报
回复
1 nand flash是块擦除,页读写。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?

说一下我的理解:
1.一般是擦除erase之后,发现擦除失败,才会去标记此为坏块。
一般的读写出错,是通过ECC校验算法去检错和纠错的。好像不涉及到坏块标记。
这部分没细节去研究过,有空研究研究。
2.ECC的出现是由于nand flash读写过程中都容易出错,所以才需要在读写前后,去用校验算法检测和纠错读/写的数据,
是否发生错误,以及发生错误去纠正错误。
ECC校验失败,未必一定是坏块。系统具体如何处理,我没去深究。
个人感觉,也有可能多做一次读写,如果再次错误,可以把其标记为坏块。
ECC理论上你可以关闭,但是实际会存在很大问题。因为硬件特性决定nand flash出错几率大,
你关闭了,那读写过程很容易发生错误,使得无法正常使用。
3。参见上面,我的理解,擦除失败,只是动态使用过程中的,一种识别方法。
其他的,也有可能读写多次失败而去标记坏块。

关于nand flash更多资料,参考:
【简介】如何编写linux下nand flash驱动
http://green-waste.blog.163.com/blog/static/326776782009622112913547/

另外,对于在nand flash上实现其他文件系统,比如FAT
个人没做过,不过看过介绍,最简单的是在上实现一个转换层,叫做
NFTL(Nand Flash Translation Layer),但是由于nand flash的读写特性,使得这样的文件系统总体效率会很低,
所以,才会出现jffs/jffs2,yaffs/yaffs2,这类专门针对nand/nor flash的文件系统。

如果只是学习研究,那么这么做还是可以慢慢学到很多东西的。
如果真正想做好,那么个人觉得没必要。
不如去抽空折腾yaffs之类的,会更有实际意义。
LanceJin 2009-08-01
  • 打赏
  • 举报
回复
Mark,偶做过一点,没有做完,用单片机很难满足性能要求,你用什么U,跑多少频率,最高bus速率是多少?FAT系统不要紧,实现比较容易,麻烦的是FTL实现.
rhy2K3 2009-07-27
  • 打赏
  • 举报
回复
读写page的过程中,如果ecc校验失败,那么这个数据就读写错误了,那么这个时候是否应该将其视为坏块!
shuiyan 2009-07-25
  • 打赏
  • 举报
回复
是什么操作系统呢?
如果是成熟的OS,比如wince/linux/winxpEmbedded/ucOSII的,就不用担心,已经实现FAT/FAT32了。而且对ECC和坏块有专门的管理策略。

如果是一般简化系统自己增加(比如单片机上的实时系统),就的确需要自己来实现。
FAT层属于“文件系统”(File System),只要符合FAT规定即可,以Sector来操作。
驱动层就需要完成ECC处理,提交各Sector信息,一个Block有多个Sector的,需要对多sector的处理进行管理。

1. 是的,不然再向里面写入数据就无法保证安全。
2. ECC就是针对NAND会出坏块的特征,提出的对数据进行校验算法,以验证是否发生了位翻转错误。不可关闭
3. 不一定。有的时候为了保护某些位置,也可将其标为坏块。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧