振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(7)_振南znfat-程序员宅基地

技术标签: 技术干货集  网络  

注解目录

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)

4

znFAT 精彩应用大赏

9.嵌入式脚本程序解释器


所需主要硬件:ATMEGA128A、SD/SDHC 卡

实验详细介绍:

此实验用于实现一个简单的脚本解释器,即逐行读取 SD 卡中的脚本文件中的命令及其参数,经过解释分析后转为相应的硬件动作。脚本(script)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。说到脚本大家可能会觉得比较遥远而高深,但说到 DOS 的批处理大家就会觉得比较熟悉了。DOS 中的 bat 文件可以一次性逐行编写很多条 DOS 指令,甚至可以有较为复杂的循环结构。它最大的好处就是灵活,而目无需编译,直接解释执行。

此实验中振南自定义了一个简单的脚本格式以及三个指令(SET:CLR:DELAY),由它们构成了脚本文件,放置于 SD 卡中,如图 18.33 所示。


图 18.33 振南定义的脚本文件格式

由 znFAT 读取此文件,逐行取出各条指令,经过解释程序的分析,依次产生相应的硬件动作(AVR 单片机 PORTF 端日各引脚电平变化,如 CLR 1使 PORTF.=,SET 2使PORTF.2=1,DELAY 则根据参数延时相应的时间)。此实验整体详细描述如图 18.34所示。

振南注解:对于“脚本”这一概念,很多搞电子或是嵌人式开发的人可能并不是很熟悉,但是对于计算机专业来说,它却是一个必不可少的东西,尤其是软件工程师。脚本就是一种用纯文本保存的程序(而非二进制的机器码),它是确定的一系列控制计算机进行运算操作或动作的组合。更通俗一些来说,脚本就是一条条的文字命令,这些文字命令是可以由人直接阅读的


图 18.34 脚本解释执行实验示意

(可使用记事本打开查看或编辑)。脚本在执行时,是由一个解释器将其一条条的翻译成机器可识别的指令,并按脚本指令顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比传统的二进制程序执行效率要低。

在计算机平台上脚本通常可以由应用程序临时调用并执行。脚本最大的应用领域就是网页设计,比如我们经常见到的 HTML、ASP 等,这使得网站开发与维护变得极为灵活。也正因为脚本的这些特点,往往被一些别有用心的人所利用。例如在脚本中加入一些破坏计算机系统的命令,这样当用户浏览网页时,一旦调用这类脚本,便会使用户的系统受到攻击。

此实验中振南将脚本的思想应用于单片机平台上,从而实现对硬件可随时配置的、在现场摆脱编译器与烧录器的灵活控制。比如在工业现场需要临时产生一个特定的时序,但是没有开发与烧录环境,则可以通过直接撰写脚本来实现。从某种意义上来说,脚本程序可以让单片机实现类似动态加载的机制。我们可以在 SD 卡中放置若干个脚本文件,并根据不同需要通过文件系统对它们进行读取、解释与执行。而在单片机上我们只需要实现一个解释器即可。(其实这就是 Java 语言及其虚拟机的工作方式。有人在 ARM 上实现了 JVM ,这样一来原本在 PC 上运行的 Java 程序便可以直接移到 ARM 上来运行了。这也是 Java 语言超强跨平台特性的核心内容。)

10.绘图板实验(基于 STM32F4 ,屏幕截图存为 BMP 图片)

所需主要硬件:STM32F405RGT6、TFT 晶、触摸控制器SD/SDHC 

卡实验详细介绍:

“绘图板”实验基本功能的实现其实很简单,就是在 TFT 触摸屏上按轨迹画点。不过这里我们为它附加了更多的内容:触摸按钮,用来实现清屏、改变画点颜色等功能;液晶截屏存为BMP图片。

我们知道,基于触摸的各种功能的实现,其根本在于对屏上坐标的精准获取。触摸按钮的实现,就是将当前的坐标与按钮矩形区域进行比较,看它是否位于其范围内。如果在,则在触摸提起的时候调用相应的处理程序,如图 18.35 所示。

实际上触摸控制器就是一个多路 ADC,它因触摸点位置的不同为我们提供相应的电压值。通过它换算得到的坐标与实际我们看到的坐标可能并不一致,通常都会有一定的偏差。所以在使用触摸屏的之前,我们一般都会进行“4 点校准”如图 18.36 所示。

如果我们直接在计算得到的坐标上画点的话,很多人都会发现一个问题:画出来的不是一个点,而是一组点,而且其中有的点会离中心坐标比较远,如图 18.37 所示。


图 18.35 判断当前坐标是否在按钮矩形区域内


图 18.36 使用“ 4 点校准”为触摸屏进行坐标校正


图 18.37 使用触摸触摸坐标直接画点产生的坐标偏移

这到底是为什么?其根本原因是没有对由触摸计算得到的坐标结果进行处理,比如均值滤波,或是取其中点。人手在进行触摸时所产生的机械动作是不稳定的,带有较大的抖动(其道理就如同按键要去抖一样):另外因为触摸按压会使电阻膜产生形变,改变其原本均匀的电阻率分布,而且这种形变还在不断变化。因此由触摸控制器采集得到的电压必然不会稳定,通常都需要进行中值滤波。其基本原理如图 18.38 所示。


图 18.38 对触摸坐标进行中值滤波处理

此算法分别取出各点的横坐标与纵坐标,并分别进行线性排序,取出中值,从而得到中值点。加入此算法之后,我们就会发现画点的效果好了很 多,绘制的轨迹也比较 平滑,如图18.39 所示。


图 18.39 加入滤波算法之后触摸画点效果变得平滑

其次就是截屏存为 BMP 图片功能的实现。我们在驱动 TFT 液晶的时候,很多时候都是在向它的显存中写入像素数据,从而实现显示功能。其实也可以从中进行像素的回读,这就是载屏功能的实现原理。将读到的 RGB565 格式的像素数据加上一个信息头,写人到 SD卡的文件中便是 BMP 图片。关键就在于这个“信息头”的具体定义,这也是很多人所希望了解的,请看图 18.40。


图 18.40 BMP 文件信息头结构具体定义

最终的实验效果如图 18.41 所示。


图 18.41 画图板实验的实际实验效果

11.MEMS 声音传感器“硅麦”录音实验

所需主要硬件:STM32F051R8T6、SD/SDHC 卡、ADMP401(由 ADI公司出品的全向麦克风,模拟信号输出)

实验详细介绍:

前面我们通过 VS1003B 实现了“录音笔”实验。从某种意义上来说,我们并没有触及真正的底层。VS1003B 自动完成了音频信号采样、编码处理等工作,最终呈现在我们面前的就是现成的 ADPCM 数据,我们做的只不过是数据的组织与存储而已。振南一直想直接采集原始的声波信号,从而实现录音功能,甚至是声音识别。对于模拟信号的处理通常都是比较麻烦的,振南之前使用驻极体(俗称“咪头”)十处理电路基本实现了声波的采集,详见图 18.42。


图 18.42 驻极体音频处理电路

图 18.42 中功放电路的效果会比较好。驻极体将采集到的声音信号转换为电信号,经 C2与 W(电位器)从 TDA2822 的2 脚引人,经放大之后,最终产生音频模拟信号。此电路为 BTI输出,这对于改进音质,降低失真大有好处,同时输出功率也增加了 4 倍,它可直接驱动喇叭发音。

自已搭建电路的方式还是略显烦琐,而且它受到分立元器件质量、焊接等因素的影响较大。振南后来发现了一个更简单的方案,即使用 MEMS 传感器。MEMS,即微机电系统,全称是Micro-electro Mechanical System,它是一种先进的制造技术平台。它是以半导体制造技术为基础发展起来的。MEMS 技术采用了半导体技术中的光刻、腐蚀、薄膜等一系列的现有技术和材料,因此从制造技术本身来讲,MEMS 中基本的制造技术是成熟的。MEMS 更侧重于超精密机械加工,并要涉及微电子、材料、力学、化学、机械学诸多学科领域。它的学科面也扩大到微尺度下的力、电、光、磁、声、表面等物理学的各分支。说白了,MEMS 就是在几厘米甚至更小的空间中封装的,可独立工作的智能传感器系统。此实验中使用的是振南的 ADPM401 模块,如图18.43 所示。


图 18.43 振南的 ADMP401 MEMS 传感器模块

模块电路如图 18.44 所示。


图 18.44 ADMP401 模块电路

此模块输出的是高质量的音频模拟信号。我们需要使用 ADC 对它进行采集,ADC 芯片的精度以及采样速度决定了最终的音频质量。此实验中振南使用了 TLC549 这一芯片(位于ZN-X开发板的基础实验资源模块上),它的采样精度为 8 位最大转换速率为 40 Hz,即每秒钟可提供 40000个 A/D 采样数据。基于这样的硬件性能,我们可实现 8 kHz或 16 kHz的8 位音频(这样的音频质量已经基本可以接受了)。

实验中使用的单片机芯片为 STM32F051R8T6(内核为 Cortex-M0,位于 ZN-X 开发板上),它是 STM32 系列中内核量级与性能较低的一款。但是用来控制 ADC 进行音频采集并实现录音功能还是绰绰有余的。图 18.45 为此实验的实际硬件平台及功能示意。


图 18.45 MEMS 声音传感器录音实验平台及其功能示意

顶层功能与前面的实验是类似的:由按键控制录音的启停,每次在 SD 卡中生成一个新的WAV 文件。不过因为这里使用的是原始的 PCM 数据(即音频模拟信号的直接采样电压值),所以 WAV 文件的 RIFF 头有些差异。另外,播放相同时长的音频数据量较前者要大,因为这里没有进行ADPCM 编码。

下面振南要讲的是一个很多人在作音频录制或播放时都会遇到的问题。形象的描述请看图 18.46。


图 18.46 音频录制过程中因“ CPU 间歇”造成采样丢失

单片机控制 ADC 进行定时采样,将 ADC 转换结果存入到的数据缓冲区中。当缓冲区存满之后,将其中的数据一并写入到 SD 卡中的 WAV 文件之中。数据的写入是比较耗时的,这个时间很有可能比 ADC 采样间隔要长,也就是说会造成“信号漏采”。这样会导致最终的音频数据不连续,由它还原出来的声音自然是有缺陷的。如何解决这一问题?其根本就在于如何让单片机同时干两件事情,又如何让数据缓冲区同时服务于两项工作(采集期间要向缓冲区中写入数据,而数据写人期间则要从缓冲区中读取数据)。前者自然是使用中断机制,针对后者振南提出了“缓冲区折半交换”的思想,具体如图 18.47 所示。


图 18.47 “缓冲区折半交换”思想示意

从图中可以看到,振南将缓冲区从中间一劈两半,采样数据首先被存入到前半,存满后便将前半的数据存入文件,同时在定时中断作用下,MCU 依然控制 ADC 进行信号采集,并将结果存人到缓冲区后半中。在后半存满后,写文件操作早已完成,此时再对后半进行存储,同时采集数据存入前半,如此交替,从而解决了“信号漏采”的问题。此思想可广泛应用于各种对信号连续性要求较高的场合,希望能对大家有所帮助和启发。(这种方法类似于乒乓缓冲。)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51218153/article/details/134655012

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文