注解目录
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 精彩应用大赏
4.1 振南的精彩实验
6.串口文件窃取器
所需主要硬件:STC12L2K60S2(STC 出品的增强型 51 单片机,位于 ZN-X 开发板基板)SD/SDHC 卡
实验详细说明:
“串口文件窃取器”,顾名思义,是用来“盗取文件”的。一次和朋友的聊天中,提到了“如何从一台涉密计算机中盗取文件?”的问题。要知道在一些机要单位,办公电脑是绝对封锁的,不管是从软件上,还是硬件上。USB 口和网口可能都被堵上或拆掉了,机箱也加上了锁,阻断了一切文件被非法拷出的途径。要从这样一台守卫森严的电脑中把文件搞出来,是个挑战。其实这一“盗取文件”的行为并不一定就是不良行为,有时候为了维权,也许我们也需要一些特殊手段,比如从封锁的电脑中得到一些证据等
经过思考,我们最终敲定了一个方案--“串口文件传输”。这一方案大致包括以下几个部分:
(1)电脑端的串口通信和文件发送软件;
(2)用于接收串口数据的外部设备;
(3)用于将接收到的数据进行存储的存储介质,并可将数据存为文件;(4)用于控制数据传输与通信的通信协议。实验示意如图 18.20 所示。
图 18.20 串口文件窃取器的实验示意图
电脑端使用什么软件来发送文件数据呢?有人说:“用串口助手就可以了!”不错,但你有没有考虑到对于一个封锁的电脑来说,串口助手又如何放进去呢?有人说:“那只能现编了?”他的意思是说如果电脑上有 VC 或 VB 等软件开发环境,我们可以自已去实现一个简易的串口通信软件。但是如果没有任何软件开发环境呢?又或者没有那么多时间去让你写这样一个软件呢?其实我们可以使用 Windows 自带的一个串口通信软件----超级终端,如图 18.21所示。(现在最新的 WIN7WIN10 已经没有超级终端了,振南在这里只是举一个例子。
图 18.21 文件传输使用 Windows 自带的超级终端
光有串口通信还不行,还要有文件数据发送功能,并遵循一定的通信协议(用于控制数据的传输)。其实在超级终端中都有(菜单;传送->发送文件),如图 18.22 所示。
图 18.22 超级终端中的文件发送功能
单击发送文件之后,可以看到上图的对话框,用于选择要发送的文件,以及使用的数据传输协议。我们在这里选择 modem。什么是 Xmodem? 请看本书“大话文件传输”这一章。
实验硬件平台如图 18.23 所示。
图 18.23 串口文件窃取器实验硬件平台
实验效果如图 18.24 所示。
7.录音笔
所需主要硬件:STC12L2K60S2
VS1003B(MP3 解码器)
SD/SDHC 卡
USB 串口模块(用于输出打印信息)
实验功能描述:此实验使用 VS1003B 的录音功能,VS1003B 通过 SPI接口输出 ADPCM编码的音频数据。STC51 单片机创建 WAV 文件,将数据存入其中,最终形成波形音频文件。
图 18.24 串口文件窃取器的实验效果
实验中,通过按键来控制录音的启停。可多次录音,每次都会创建新的 WAV 文件,如 RECO.WAV RECI.WAV等。录制的 WAV 文件,可以在 SD 卡上看到,通过电脑上的播放软件进行回放。实验示意如图 18.25 所示。
图 18.25 录音笔实验示意图
实验硬件平台如图 18.26 所示。
图 18.26 录音笔实验硬件平台
效果如图 18.27 所示。(录制音频的波形图和运行 log 。)
振南评注:VS1003B 一直以来我都只是在使用它的音频解码功能,而没有用到它的录音功能。虽然有过几次要做录音实验的想法,但都是浅尝辄止,并没有实质性的成果。还好最后终于完成了这个录音笔实验,现在感觉 VS1003B 的录音功能还是挺简单的。实现录音功能的最大问题在于数据的存储速度。对于音频数据采集来说,在给定一个采样频率之后,它在单位时间内所产生的数据量就是一定的了。我们必须要在这段时间内完成接收数据与写人文件的操作,一点都不能慢,否则必然影响后面音频数据的处理,最终可能导致音频文件播放的失真,
图 18.27 录音笔实验演示视频截图
或者根本放不出声音。比如对于 8 kHz,单通道的 16 位音频录音来说,它的数据速率为 128Kbps,这要求 SPI接口必须要快,znFAT向 SD 卡中写人数据的效率一定要足够高。所以,在此实验中振南使用了硬件 SPI,并开启了 ZFAT 的各种缓冲加速机制,这使得音频录制毫无压力。
基于 znFAT 在单片机上实现“数码相框/视频播放器/相机/录像机”这些实验的详细讲解请移步本书相关章节!
8.文件无线传输实验
所需主要硬件;STC15L2K60S2、STM32F103RBT6、SD/SDHC 卡NRF24L01 模块
实验详细介绍:
在振南的 ZN-X 开发板上配备了 NRF24L01 射频收发模块的接口,兼容 NORDIC 公司官方公版模块,如图 18.28 所示。
图 18.28 振南的ZN—X 开发板所支持的 NRF24L01 模块
znFAT 文件系统与射频能有什么关系呢?它们搭配在一起又能实现什么功能呢?应该说它的意义还是比较大的,可以实现文件数据的无线传输功能。这为文件系统的应用创造了新的思路。
你有没有过这样的经历:当你进入飞机场时,会通过蓝牙或无线网络接收到一些信息文件,诸如通知、新闻或邮件等;再比如有的时候我们需要为野外工作的设备升级固件,但又很难接近设备,也许你会希望有一种脱机烧录器,可以读取 SD 卡上的程序文件,通过无线方式完成烧录工作。有了基于射频的无线通信技术之后,很多东西都可以驭之于数里之外了
NRF24L01 是非常经典的 2.4 GHZ 射频通信芯片,它以高可靠性高数据传输速率等优点得到人们的广泛应用。此实验中使用NRF24L01,51 与STM32(两块 ZN-X 开发板),再配以SD卡与振南的 znFAT 文件系统方案,最终完成文件的无线传输与存储。实验示意如图18.29 所示。
图 18.29 文件无线传输实验示意图
实验中 51 单片机读取 SD 卡中的某一文件,将其数据按一定的通信协议分多以无线方式传至STM32,STM32 接收数据解析后将有效数据写入 SD 卡的文件中。在这个过程中,SD卡,NRF24L01 等硬件的底层驱动以及 zFAT 文件系统其实都不是问题,它们在这里都已经比较成熟了。最重要的其实是通信协议,它是决定数据传输是否成功的核心因素。
振南这里使用的是一种自定义的文件传输协议,它简单易行,又能基本上保证数据的正确性。协议具体内容如图 18.30 所示。
图 18.30 文件无线传输协议
在具体的实现中,首先检测数据头是否为’@’,如果是则认为它是一个合法的数据包,进而开始对后面的数据进行解析,否则认为它是一个非法数据包,输出错误提示。由于NRF24L01一次最多只能收发 32 字节的数据,所以本协议中数据包总长度为 32 字节。每次传输的最大有效数据长度为 28 字节,其余 4 个字节分别用于记录数据头有效数据长度与当前数据包的包号(0~N)。有效数据长度用来告诉我们从此包数据中提取多少有效数据,写入SD 卡中;数据包号可用于检测是否存在数据包丢失,进而采取相应的措施(比如重传,不过此实验中没有实现重传机制,如果出现包现象,则直接将数据补 0。要实现重传可以使用现成的成熟协议,比如Xmodem)。
实验硬件平台如图 18.31 所示。
实验过程中的串口信息如图 18.32 所示。
图 18.31 文件无线传输实验平台与功能示意
图 18.32 文件无线传输实验中的串口信息
此实验中使用 51 来发送数据(文件打开与数据读取),STM32 接收数据(文件创建与数据写入),当然也可以反过来。振南在做这些实验的时候,尽量使用更多种类的单片机,用意在于向大家展示 znFAT 良好的可移植性。这也是 ZN-X 开发板上同时配备三种 CPU 的初衷之一。
实验完成之后,在数据接收方的 SD 卡中会出现一个与源文件完全相同的文件,我们可以对它们进行比较,以验证数据传输是否正确。(可以使用 Windows 命令行中的 FC 命令,也可以使用文件比较软件,比如 Beyond Compare)。