注解目录
1、znFAT 的起源
1.1 源于论坛
(那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。)
1.2 硬盘 MP3 推了我一把
(“坤哥”的硬盘 MP3 播放器,让我深陷 FAT 文件系统不能自拔。)
1.3 我的导师-- 顾国昌教授
(哈军工时期的老教授,德高望重的人生导师。)
1.4 我的母校-- 哈工程
(隐藏牛校哈工程,网络名嘴张雪峰所言非虚。振南给你讲讲母校历史:哈军工、
工程学院、哈船院、哈工程。)
1.5 那场严重超时的答辩会
(20 分钟的答辩超时 1 小时,老师表示赞叹。现场承诺要把文件系统写成书。)
1.6 时隔多年的谢师会
(承诺必须兑现,5 年之后的谢师会,我擎书谢师。不要轻易作出承诺,除非你真
得能作到!)
2、高手如云 认清对手
2.1 国外 FAT 方案简介
1 )FATFS
2 )EFSL
3 )UCFS
4 )TFFS
5 )DOSFS
(列举那些主流 FAT 文件系统方案,并进行详细介绍。)
2.2 国内 FAT 方案简介
1 )ZLG/FS
2 )沁恒 FAT
(国内尚无成型开源的 FAT 文件系统方案。但是我们要支持国货。)
3、硬刚高手 挑战自己
3.1 与高手竞速
3.2 挑战自己
(这一节我写了一个月。环比各大知名方案,看看到底谁更快!最终,挑战了自我。)
4、znFAT 精彩应用大赏
4.1 振南的精彩实验
4.1.1 SD 卡 卡 WAV 音频播放器
4.1.2 SD 卡电子滚动屏
4.1.3 SD 卡 卡 MP3 播放器
4.1.4 AT89S51 离线下载器
4.1.5 数据采集导入 EXCEL
4.1.6 串口文件窃取器
4.1.7 录音笔于 (基于 VS1003B) )
4.1.8 文件无线传输实验
4.1.9 嵌入式脚本程序解释器
4.1.10 绘图板实验(基于 STM32F4 ,屏幕截图存为 BMP 图片)
4.1.11 MEMS 声音传感器“ 硅麦” 录音实验
(znFAT 的最大亮点在于各种精彩的应用,希望振南的这些实验可以让你眼前一亮。)
4.2 精彩的第三方项目应用
4.2.1 仿 仿 Metro UI 系统应用实验
4.2.2 通过 U 盘对产品进行升级
4.2.3 嵌入式网页服务器
4.2.4 STM32+LD3320 作声控音频播放器
4.2.5 BMP 图片浏览
4.2.6 VGA 显示 SD 卡中的图片(基于 FPGA) )
4.2.7 汉字电子书(基于 STM8) )
4.2.8 文本语音合成实验(TTS ,基于 NUC120) )
4.2.9 《跳跃小猫》动画播放(基于 FPGA NIOSII)
高手如云 认清对手
在经历了后期的深度迭代之后,znFAT 的整体性能已今非昔比。振南创造了一些算法比如CCCB(压缩簇链缓冲)和 EXB(交换缓冲)等。有兴趣?赶紧去看《嵌入式FAT32 文件系统设计与实现--基于振南 znFAT》一书。
我曾经被频繁问到一个问题:“znFAT 的性能到底怎么样?”
正所谓“有图有真相”没有比较就没有真相。于是我做了一个“环比大测试”。(就是将znFAT 与各大知名方案进行较量,看看到底谁更快。)
要做较量,我们先要了解一下对手。现在比较有名的优秀方案有 FATFSEFSL、UCFSTFFS、DOSFS、ZLG/FS沁恒 FAT 等。其实很多人都对 FAT 很感兴趣,这些兴趣可能来自于对 FAT 及其相关算法、思想、编程技巧的好奇,或者是项目和产品的需求。其中一些高手也写出了自己的 FAT 方案,比如在 amoBBS(原 OurAVR)上用 AVR 单片机 DIY MP3的BoZai,再比如许乐达同学作的 xldFAT,还有号称中国第一的 cnFAT 等。对于这些方案我们首先进行一个简介。
2.1 国外 FAT 方案简介
1.FATFS
这里直接引用 chaN(FATFS 的作者,身在日本)在其网站上对 FATFS 的简介:FATFS是一个通用的文件系统模块,用于在小型嵌入式系统中实现 FAT 文件系统。FATFS 的编写遵循 ANSIC,因此不依赖于硬件平台。它可以嵌入到各种价格低廉的微控制器中,如 8051,PIC,AVR,SH,Z80,H8,ARM 等,而不需要做任何修改。
对于 FATFS 我要说:它确实很牛!无论在功能的完善程度上,还是在代码的运行效率上,以及可移植性上都可称得上是众多现有优秀方案中的佼佼者(到底有多优秀,大家到后面就能看到了)。FATFS 一度是振南研发和推广 nFAT 道路上的最大劲敌(其实现在也是,估计未来也还是。我们不能一味地偏祖自己,要正视与别人的差距)。
起初,我认为 FATFS 的作者是个绝顶聪明的人。但是,在看了他代码中的研发编年史之后,我改变了这种想法:他在把 FAT 当作毕生事业来做,一辈子就做这一件事。FATFS 的研发始于 2006 年,一直到现在还在不断更新和改进。真可谓十年磨一剑了! 但是,经过对FATFS 的深入研究之后,我发现它并非像想象中的那么完美,仍然存在着很多问题,其中有一些可谓“硬伤”。
(1)它最低需要 1.3KB 左右的内存,导致在一些低端处理器上无法使用(其根源在于其数据缓冲的实现策略);
(2)它没有实时模式,始终会有数据暂存于内存之中,如果突然断电或 CPU 死机,必然造成数据丢失;
(3)物理层接口比较复杂,而且必须由使用者提供多扇区读/写驱动的实现;
(4)代码可读性不强,使用者很难了解其内部实现,导致一旦出现 Bug,很难立即解决;
(5) 纯开源软件,因此缺乏原作者的相关技术支持与指导,只能靠使用者自行领悟。
2.EFSL
EFSL的全称是 Embeded File System Library,即嵌入式文件系统库。它是来自 sourceforge 上的由比利时的一个研究小组发起的开源项目,此项目正在持续更新,源码中也有很多注释,研读起来比较容易,潜力不错。EFSL 兼容 FAT32,支持多设备及多文件操作。每个设备的驱动程序,只需要提供扇区写和扇区读两个函数即可。
据说,EFSL 的效率是非常高的。但是它的物理层接口只支持单扇区读/写,并没有多扇区的接口。(所谓多扇区,是指存储设备可以一次性读写连续的多个扇区的能力,这比单独一个个扇区去读写速度要快得多,而在文件读/写时,很多时候数据基本都是连续的。)所以,我很纳闷它的效率再高能高到哪去?同时,还要看它所占用的内存量。就算它的效率确实很高,但是以较高的内存消耗为代价的,我认为也不足为取。不过,一切还是要以实测结果为准
3.UCFS
UCFS 可能有些人并不太熟悉,但是提起 ,C/OS 大家一定有所耳闻,它们都来自于 Micrium 公司。出身名门,其代码质量、稳定性及可移植性自然无可挑剔。不过它并非开源项目,而是商用软件。想要用它,拿银子来!从性能和执行效率上来说,我并不认为 UCFS 会有多好,因为它的物理层驱动接口也只支持单扇区读/写,而无多扇区驱动。
4.TFFS
可能很多人对于 TFFS 连听都没听说过。但是如果提起 VxWorks,大家就会耳熟能详TFFS 就是专门服务于 VxWorks 的文件系统,全称为 True Flash File System。TFFS 可以在Flash 存储设备上构建一个基于 DOS 的文件系统(即 FAT),用于存放操作系统镜像以及应用程序,以便于程序的更新和升级。因为我本人长期从事 VxWorks 的相关研发工作,因此对于TFFS 所带来的便捷深有感触。不过,TFFS 基本上是与 VxWorks 绑定的想要把它从中提取出来为我们所用,难度较大。而且,它也不是免费软件,我们不能私自使用。
5.DOSFS
DOSFS 是由美国一个叫 Lewin A.R.W.Edwards 的人研发的。(这个人好像还出了一本书叫《嵌入式工程师必知必会》,大家有兴趣可以看看,见图 18.6。)从它的名字上可以看出来,Lewin 是想在嵌入式微处理器上实现一个类似 DOS 的系统,其实质就是 FAT 文件系统。从它的代码来看,也只是一个雏形,功能还比较少,配套的 文档资料也不够齐全。关于
图 18.6 Lewin A.R.W.Edwards 的《嵌入式工程师必知必会》一书
DOSFS ,我没有实际用过,不过我见过有人把它用在了产品里,似乎还比较稳定
2.2 国内 FAT 方案简介
上面介绍了几种比较流行而知名的嵌入式 FAT 文件系统方案,它们均来自国外。我们不禁要问:“国货在哪里?”别着急,国货必须有,请看下文。(国内的文件系统方案其实也不是没有,但是真正开源而且成型的很少。
1.ZLG/FS
ZLG/FS,顾名思义,就是周立功公司研发的文件系统方案,说得更准确一些应该是周立功公司的 ARM 研发小组的成果。它是以 uC/OS 入式操作系统的一个中间件方式出现的,也就是说它可以与pC/OS 很好地进行协同工作。它也是一个开源的软件,在国内嵌入式平台上,尤其在 ARM 平台上得到了较为广泛的应用。但是,ZLG/FS 的数据读/写速度实在让人堪忧。仔细研读它的源代码,我们就会发现它在实现上所使用的一些策略导致了它的效率低下。也许,这样的文件系统方案,只能供我们学习之用,要真正应用于实际工程项目还有一定的差距。
2.沁恒 FAT
南京沁恒公司的 FAT 方案做得不错。提起沁恒,似乎有点耳闻。那我再提醒你一下:CH375 芯片。对,它是专门用于读/写U 盘等USB 存储设备的控制器芯片,沁恒 FAT 文件系统就是与这个芯片配套绑定的,用于实现 U 盘上的文件操作。
CH375 已经算是一个经典芯片,凡是有 U 盘读/写需求的中低端项目我估计有一半以上都在用这个芯片。可以说,沁恒 FAT 是嵌入式 FAT 文件系统商业化的一个典范。不过遗憾的是,沁恒 FAT 是纯商业软件,我们是看不到半点源代码的。我感觉,FAT 文件系统业已成为沁恒公司的一大产品和技术支柱,这也揭示了嵌人式 FAT 文件系统在功能需求以及市场价值上的巨大潜力。
总体来说,国内在嵌入式文件系统方面的研究仍然起步较晚,而且在原创开源与创新意识上远远落后于国外。国内的很多开发者一直秉承着“拿来主义”,但是这样我们不会有任何发展。好好想想,我们平时使用的芯片、软件操作系统等,有多少是国产的? 我们所说的“自主”研发,有很多只不过是在仿制、引用或者汉化而已。让我们真正的动起来,做出属于我们自己的东西!
支持国货,支持中国芯片,相信中国半导体产业和自主软件生态能强劲崛起