振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(9)

注解目录

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.2 精彩的第三方项目应用


7.汉字电子书(基于 STM8 )**

这里我们来实现一个简单的“电子书”实验。所谓“电子书”,就是读取存储设备(如 SD 卡


图 18.55 使用 Image2Lcd 软件将图片转为 bin 格式


图 18.56 VGA 显示图片实验的硬件平台( FPGA )

或 U 盘)中的文本文件(比如 TXT),将其中记录的字符显示在显示器件上(比如液晶)。在这一过程中,文件系统和字库是最重要的两个部分。文件系统用于读取存储设备上的文本文件,字库则记录了字符所对应的字模信息。

在这个实验中,我们使用 STM8 单片机作为核心,SD 卡作为存储设备NOKIA5110 液晶模块作为显示器件。字库采用GBK 16X16 点阵字库,文本文件格式为最简单的 TXT 格式文件系统方案使用振南的 znFAT。


图 18.57 VGA 显示图片实验效果

实现过程:STM8 单片机使用 nFAT 文件系统方案读取 SD卡上的 TXT 文本文件数据(字符的编码数据),依字符编码计算其字模数据在字库文件中的偏移位置,通过对字库文件进行数据定位及读取,得到字模数据。将字模写入 NOKIA5110 液晶中,从而完成字形的显示在此期间,还要控制好字符在液晶上显示时的翻页及格式换行等操作,最终使用字符可以正确而且工整地展现在我们面前。

我们会发现,在这个实验中字库文件与 TXT 文本文件均存放在 SD 卡上。我们要对它们同时进行操作,也就是说这两个文件要同时处于打开的状态,并同时进行数据的定位与读取操作。这正是 znFAT 的“多文件”功能。图 18.58 为实际的实验效果。


图 18.58 简易汉字电子书实验效果

8.文本语音合成实验(TTS ,基于 NUC120 )*

说起 TTS,可能你会比较陌生。它的全称为 Text-To-Speech,即文字转为语音。(它的逆向应用,从语音转为文字,现在也很火,即 ASR 技术,感兴趣的可以百度一下。)说到它的应用其实我们经常都会遇到。在一些高级的 MP3、MP4、电子书或手机上,可能会有这样的功能

即把文本,比如小说、短信、网页等,通过语音读出来。这种技术就叫作 TTS在这里我们就要实现一个简单的 TTS 功能,将一个 TXT 文件中的文字转为相应的语音通过喇叭播放出来。此实验中使用中国台湾新唐(Nuvoton)的 NUC120 芯片(Cortex-MO内核);TTS 功能使用专门的 TTS 芯片 SYN6288,它可以支持中文与英文,而且还支持多种编码方式,如GB2312、GBK 和UNICODE 等。TXT 文本文件存放在 SD 卡中,文件系统使用振南的 znFAT,从而可以轻松实现对文件的打开及其数据的读取操作。实验示意如图 18.59所示。


18.59 TTS语音合成实验示意

分多次读取 SD卡上的 TXT 文件的数据(SYN6288 的接收缓冲区最大为 200 字节,因此要分多次向其发送文本编码数据)。SYN6288 采用标准串口方式进行数据通信,NUC120 只需使用 znFAT 读取 TXT 数据通过 UART 发送给 SYN6288 即可。此实验硬件平台如图18.60 所示。

9.《跳跃小猫》动画播放(基于 FPGA NIOSII )**

这一实验振南以前做过,是一个小猫跳跃的动画播放,他是基于 51 和 OLED 来进行实现的。这里我将其移植到了 FPGA 上,基于NIOS 软核来进行实现(芯片为 EP2C5Q208)。在我的开发板上外扩了一片32MB 的SDRAM,因为在程序中是将整个 ZNV 文件读到 RAM(什么是ZNV,请参见相关章节),然后再送到 LCD12864 进行显示播放。一开始有一个 loading 的过程,就是在读文件。(NIOSIL上的代码是必须依赖于具体订制的 NIOS CPU 的实验中有大量与 CPU 相关的内容。NIOSII 的开发使用 NIOSII IDE,如图 18.61 所示。实验效果如图 18.62 所示。

实际上还有很多的精彩实验,很多是源自于广大网友的,正所谓“高手在民间”。这些实验充满了丰富的想象力,涉及很多不同的 CPU 平台,加之实验者高超的技艺,最终的实验效果


图 18.60 TTS 语音合成实验硬件平台


图 18.61 此实验中使用 NIOSII IDE 进行程序开发


图 18.62 《跳跃小猫》动画播放实验效果

实在可称得上炫目。但是因为种种原因振南只是收集到了其中一小部分,列举如上,供大家赏析。

这章就到这里。振南并没有去讲文件系统和 znFAT 的相关技术内容,因为短短一章,根本讲不清楚,而且也并不是每个人都感兴趣。如果这一章激起了你的兴趣,那可以看看《嵌入式FAT32文件系统设计与实现--基于振南 znFAT》一书。

znFAT 最初发布于 2011 年,中间有无数次的迭代,基本定型于 2014 年,经过 10 年的传播和衍化,现在已经成为与 FATFS 齐名的嵌人式 FAT 文件系统方案得到了广泛的应用和

认可。它应该是市面上占用资源最少,移植最为简单的纯国产方案之一了。声明:znFAT 加人开源软件认证体系,我本人也是坚实的开源软件支持者。大家可以免费获取 znFAT 的源码并使用、学习、修改、传播,但为了它更好的发展,请注明出处,如“此项目引用了znFAT,特此声明”

大家可以在 gitee 搜索znFAT,或者直接在振南网站(znfat,znmcu.com)下载,有疑问可直接加我微信 ZN1234 咨询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/197076.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于缎蓝园丁鸟算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于缎蓝园丁鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于缎蓝园丁鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.缎蓝园丁鸟算法4.实验参数设定5.算法结果…

WIN10 x86环境部署ARM虚拟机(银河麒麟)

我们经常使用的是x86架构的cpu,而对于不同cpu架构的arm架构的操作系统,我们可以通过QEMU模拟器来进行模拟一个arm环境 1、部署前的准备 arm的镜像: 以此镜像为例:Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso QE…

每日一练【移动零】

一、题目描述 283. 移动零 - 力扣(LeetCode) 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 二、题目解析 可以…

docker限制容器内存的方法

在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪。而对 docker 进行限制后,可以将瘫痪范围控制在 docker 内。 因此&#…

1、nmap常用命令

文章目录 1. 主机存活探测2. 常见端口扫描、服务版本探测、服务器版本识别3. 全端口(TCP/UDP)扫描4. 最详细的端口扫描5. 三种TCP扫描方式(1)TCP connect 扫描(2)TCP SYN扫描(3)TCP …

两部手机数据传输后备忘录不见了怎么回事

想必很多人都遇到过,当两部手机进行备忘录数据传输后,突然发现备忘录不见了,这让人不禁着急上火,我也曾经遇到过这种事情导致很多重要的内容都丢失了。 一般出现这种情况可能是因为,两部手机使用的是不同的云服务&…

2020年3月25日 Go生态洞察:Go、Go社区与疫情大流行

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

04 # 第一个 TypeScript 程序

初始化项目以及安装依赖 新建 ts_in_action 文件夾 npm init -y安装好 typescript,就可以执行下面命令查看帮助信息 npm i typescript -g tsc -h创建配置文件,执行下面命令就会生成一个 tsconfig.json 文件 tsc --init使用 tsc 编译一个 js 文件 新…

Element-ui合并table表格列方法

merageCell({ row, column, rowIndex, columnIndex }) {if (columnIndex 0 || columnIndex 1) {const property columnIndex 0 ? name : firstDeptName;// 获取当前行的property,这里看自己的需要,改成根据哪个去判断const currentPropertyVal row…

ChatGPT到底是如何运作?

自从2022年11月30日发布以来,ChatGPT一直占据着科技届的头条位置,随着苹果的创新能力下降,ChatGPT不断给大家带来震撼,2023年11月7日,首届OpenAI开发者大会在洛杉矶举行,业界普遍认为,OpenAI的开…

Text-to-SQL小白入门(九)InstructGPT论文:教你如何训练ChatGPT

论文概述 InstructGPT和ChatGPT 的训练流程基本一致 ,ChatGPT是改进后的InstructGPT,比如InstructGPT是基于GPT-3训练,而ChatGPT是基于GPT-3.5训练。 基本信息 英文标题:Training language models to follow instructions with h…

香港科技大学广州|智能制造学域博士招生宣讲会—华中科技大学专场

时间:2023年12月08日(星期五)15:00 地点:华中科技大学大学生活动中心A座603 报名链接:https://www.wjx.top/vm/mmukLPC.aspx# 宣讲嘉宾: 胡鹏程 副教授 https://facultyprofiles.hkust-gz.edu.cn/faculty-…

RabbitMQ消息队列

简介 MQ(message queue),从字面意思上看就个 FIFO 先入先出的队列,只不过队列中存放的内容是 message 而已,它是一种具有接收数据、存储数据、发送数据等功能的技术服务。 作用:流量削峰、应用解耦、异步处理。 生产者将消息发送…

黑马点评-Feed流的实现方案,基于推拉结合模式实现笔记推送

Feed流实现方案 我们关注了博主之后,当用户发布了动态后我们应该把这些数据推送给粉丝,关注推送也叫作Feed(投喂)流,通过无限下拉刷新获取新的信息 传统的模式内容检索: 粉丝需要主动通过搜索引擎或者是其他方式去查找想看的内容新型Feed流的效果: 系统分析用户到底想看什么,…

okhttp系列-拦截器的执行顺序

1.将拦截器添加到ArrayList final class RealCall implements Call {Response getResponseWithInterceptorChain() throws IOException {//将Interceptor添加到ArrayListList<Interceptor> interceptors new ArrayList<>();interceptors.addAll(client.intercept…

注意力机制(Attention Mechanism)

目录 1. 简介&#xff1a;探索注意力机制的世界 2. 历史背景 3. 核心原理 4. 应用案例 5. 技术挑战与未来趋势 6. 图表和示例 7. Conclusion 1. 简介&#xff1a;探索注意力机制的世界 在当今的人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;…

戴尔科技推出全新96核Precision 7875塔式工作站

工作站行业一直是快节奏且充满惊喜的。在过去25年中,戴尔Precision一直处于行业前沿,帮助创作者、工程师、建筑师、研究人员等将想法变为现实,并对整个世界产生影响。工作站所发挥的作用至关重要,被视为化不可能为可能的必要工具。如今,人工智能(AI)和生成式AI(GenAI)的浪潮正在…

npm管理发布包-创建与发布

创建与发布 我们可以将自己开发的工具包发布到 npm 服务上&#xff0c;方便自己和其他开发者使用&#xff0c;操作步骤如下 创建文件夹&#xff0c;并创建文件indexjs&#xff0c;在文件中声明函数&#xff0c;使用 module.exports 暴露npm初始化工具包&#xff0c;package.j…

浅谈硬件连通性测试几大优势

硬件连通性测试是确保硬件系统正常运行、提高系统可靠性和降低生产成本的关键步骤。在现代工程和制造中&#xff0c;将连通性测试纳入生产流程是一个明智的选择&#xff0c;有助于确保硬件产品的质量和性能达到最优水平。本文将介绍硬件连通性测试的主要优势有哪些! 一、提高系…

Java基础之集合类

Java基础之集合类 一、集合的框架1.1、集合概述1.2、集合与数组区别1.3、数组的缺点&#xff1a;1.4、常用集合分类1.5、Collection常用方法 二、List集合2.1、ArrayList2.2、LinkedList2.3、Vector2.4、区别 三、Set集合3.1、HashSet集合3.2、LinkedHashSet集合3.3、TreeSet集…