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

注解目录

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 精彩应用大赏

4.1 振南的精彩实验


1.SD 卡 WAV 音频播放器

所需主要硬件:

STC15L2K60S2(主 CPU 芯片,位于ZN-X开发板基板)

TLC5615(12 位 DAC,位于基础实验模块)

SD/SDHC 卡(使用 SD 卡模块与基板接驳)

实验功能描述:在此实验中,STC51 单片机通过 nFAT 打开 SD 卡根目录下名为 est.wav的文件并读取其数据,定时将数据写入 TLC5615 得到相应的电压(WAV 文件选用 PCM编码的 8位 mono 格式)。拟合出来的声音信号经后级音频电路隔直滤波处理,最终产生较为理想的音频效果,如图 18.7 所示。


图 18.7 SD 卡 WAV 音频播放器实验示意图

实际硬件平台如图 18.8 所示


图 18.8 SD 卡 WAV 音频播放器实验硬件平台

2.SD 卡电子滚动屏

所需主要硬件:STC15L2K60S2

16X16 点阵(由 4个8X8 点阵构成,位于基础实验模块)

SD/SDHC 卡

实验功能描述;将要进行滚动显示的 TXT 文本文件与汉字库文件(HZK16)放入SD卡根目录下。单片机通过 znFAT 读取文本文件中的字符编码,并从 HZK16 中获取其对应的字模数据。最终送到 16X16 点阵进行滚动显示(16X16 点阵采用 片74HC595 两两级联,分别控制其行与列。单片机通过定时动态扫描的驱动方式实现滚动显示的效果。)实验示意如图 18.9 所示。


图 18.9 SD 卡电子滚动屏实验示意图

实际硬件平台如图 18.10 所示。


图 18.10 SD 卡电子滚动屏实验硬件平台

3.SD卡MP3播放器

所需主要硬件:STC15L2K60S2

MP3 模块(采用 VS1003B MP3 音频解码芯片)

SD/SDHC 卡

实验功能描述:STC51单片机通过 znFAT 读取 SD 卡中的 MP3 文件将其数据写入MP3 模块中进行解码播放。使用两个按键实现上一首与下一首的切换。实验示意如图 18.11所示

实际硬件平台如图 18.12 所示。


图 18.11 SD 卡 MP3 播放器实验示意图


图 18.12 SD 卡 MP3 播放器实验硬件平台

4.AT89S51离线下载器

所需主要硬件:STC15L2K60S2

AT89S51(由 Atmel 研制的 51 核单片机,可支持串行 ISP 程序下载)

SD/SDHC 卡

实验功能描述:所谓“离线下载器”是指不需要计算机而完成对单片机芯片的程序烧录此实验读取 SD 卡中的烧录文件,比如 bin 或 hex,将其中的程序代码通过 AT89S51 的ISP 接口(可使用 STC51 的硬件 SPI,或者采用IO 模拟时序)写它的 FlashROM 中并让程序开始运行。实验示意如图 18.13 所示。


图 18.13 SD 卡 MP3 播放器实验示意图

实际硬件平台如图 18.14 所示。


图 18.14 AT89S51 离线下载实验硬件实验平台

5.数据采集导入 EXCEL

所需主要硬件:ATMEGA128(Amtel 的 8 位AVR 单片机,位于ZN-X开发板基板)

PCF8563_DS18B20(基础资源模块)

SD / SDHC 卡(使用 SD 卡模块与基板接驳)

实验功能描述:在这个实验中,我们通过 AVR 单片机采集实时钟芯片 PCF8563 的年月日时分秒的时间信息、温度传感器 DS18B20 的温度数据以及一路模拟量信号(由 AVR 单片机的片内 ADC 直接进行采集)。每秒钟采集一次数据,我们在 AVR 单片机中对获取的这三种数据进行处理,转换为 EXCEL 软件可以识别的表格数据格式(CSV 格式)将其存人SD卡根目录下的znmcu.csv 文件中。实验示意如图1815 所示。


图 18.15 数据采集导入 EXCEL 实验示意图

实验硬件平台如图 18.16 所示。

实验效果如图 18.17~18.18 所示。

振南评注:我做这一实验,主要是因为有很多人问我:“能不能把数据存成 XLS 文件?这样就可以使用 EXCEL对数据进行一些处理了,比如作曲线图等”Office 中的 EXCEL确实有很强的数据统计和处理功能,它的表格文件格式通常是 XLS 文件。但是如果我们想把数据直接存成 XLS 的形式却是有些困难的,因为 XLS 文件的结构非常庞杂。针对这一问题,曾经有很多人产生过这个的疑问;“难道 nFAT 没有把数据写成XLS 格式的功能吗?它不能创建xxx.xls 文件吗?”振南要说:其实 nFAT 作为一个嵌人式 FAT32 文件系统方案只负责数据


图 18.16 数据采集导入 EXCEL 实验硬件平台


图 18.17 数据采集存为 CSV 文件直接以表格形式导入到 EXCEL 软件中

的读/写,它根本不管这些数据是什么意义,只知道数据是一堆字节而已。一个特定格式的文件,它的数据必定遵循一定的结构规范。它在文件系统的层面上对数据进行了更为具体的定义。简言之,文件格式是文件系统应用层面上的东西,它的实现取决于使用者以何种结构进行数据的存储。要让 EXCEL 能够识别记录在文件中的数据,不仅仅是创建一个扩展名为 XLS的文件就可以的,更重要的是我们要知道数据的具体结构和组织方式。如果你还是没听懂,那我问你:“难道你把一个扩展名为 MP4 的电影文件改成 MP3 就能听音乐了吗?”不知道你有没有留意过EXCEL还支持一种叫作 CSV 的文件格式,即号分隔格式。它使用一种非常简单的表达方法来描述数据的表格结构(在各列数据中间用空格分开即可)。具体的文件格式如图 18.19 所示。


图 18.18 一路模拟量与温度在 EXCEL 中生成的曲线图


图 18.19 CSV 文件的数据格式

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

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

相关文章

Java开发者的Python快速进修指南:自定义模块及常用模块

自定义模块 我来举一个在Java开发中常用的开发方式作为例子。在我们进行项目开发时,通常会在项目的结构中创建一个util包,用于存放一些工具类。同样,Python也可以采用类似的方式来组织代码结构,让大家更容易理解。 在同目录下 如果…

priority_queue模拟实现

目录 仿函数 模拟实现 结果 大根堆 小根堆 完整代码 priority_queue.h test.c 仿函数 仿函数的通俗定义:仿函数(functor)又称为函数对象(function object)是一个能行使函数功能 的类。仿函数的语法几乎和我们…

为啥网络安全那么缺人,但很多人却找不到工作?

文章目录 一、学校的偏向于学术二、学的东西太基础三、不上班行不行 为什么网络安全的人才缺口那么大,但是大学毕业能找到网安工作的人却很少,就连招聘都没有其他岗位多? 明明央视都说了网络安全的人才缺口还有300多万,现在找不到…

Vue框架学习笔记——计算属性

文章目录 前文提要代码需求描述插值语法实现methods实现 计算属性getter执行时间:setter 计算属性简写形式(只读不改,才能如此简写)slice截取元素,限制输入字符数量 前文提要 本人仅做个人学习记录,如有错…

【一周AI简讯】OpenAI奥特曼王者归来,马斯克AI模型Grok下周开放测试,ChatGPT语音对话功能向所有用户免费开放

OpenAI奥特曼王者归来,董事会改组 终于,经历大约5天的极限拉扯,年底AI界吃瓜大戏落下帷幕,奥特曼确认回归。 ChatGPT语音对话功能向所有用户免费开放 ChatGPT 语音输入最初于 9 月份推出,标题是“ChatGPT 现在可以看…

12、模块化编程

模块化编程 1、传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响便朝着的思路 2、模块化编程:把各个模块的代码放在不同的.c文件…

线性分类器--图像表示

整个模型 图像表示 二进制图像 灰度图像 彩色图像 大多数分类算法都要求输入向量! rbg的图像矩阵转列向量 大小为 32X32 的话,图像矩阵转列向量是多少维? 32x32x3 3072 维列向量

魏副业而战:视频号副业项目赚钱攻略,每天30分钟,日入500+

我是魏哥,与其躺平,不如魏副业而战! 最近很多团队在操作视频号分成计划项目。 说真的,这个副业项目很不错,魏哥也操作测试一下,每天收益大几百,收益如下: 大家看了,是不…

Linux——使用命令查看文件和文件夹数量

目录 一、相关命令参数解析二、查看当前目录下的文件数量2.1 包含子目录中的文件2.2 不包含子目录中的目录 三、查看当前目录下的文件夹个数3.1 不包含目录中的目录3.2 包含目录中的目录 四、查看当前文件夹下叫某某的文件的数量实例 五、总结 一、相关命令参数解析 "&qu…

C++中的类与对象

类和对象的基本概念 C 和 C中 struct 区别 c 语言 struct 只有变量 c语言 struct 既有变量,也有函数 类的封装 我们编写程序的目的是为了解决现实中的问题,而这些问题的构成都是由各种事物组成,我们在计算机中要解决这种问题&#x…

python之pyqt专栏6-信号与槽2

上一篇python之pyqt专栏5-信号与槽1-CSDN博客,我们通过信号与槽实现了点击Button,改变Label的文本内容。可以知道 信号是在类中定义的,是类的属性 槽函数是信号通过connect连接的任意成员函数,当信号发生时,执行与信号…

【通讯协议】REST API vs GraphQL

在API设计方面,REST和GraphQL各有缺点。下图显示了 REST 和 GraphQL 之间的快速比较。 REST 使用标准 HTTP 方法(如 GET、POST、PUT、DELETE)进行 CRUD 操作。当您需要在单独的服务/应用程序之间提供简单、统一的接口时,效果很好…

NAS层协议学习(三)

消息结构 每个NAS消息包含一个协议鉴别符和一个消息标识。协议鉴别符是一个 4 位值,指示正在使用的协议,即对于 EPS NAS 消息是 EMM 或 ESM。消息标识指示发送的特定消息。 EMM 消息还包含一个安全标头,指示消息是否受到完整性保护和/或加密…

Python爬虫入门课: 如何实现数据抓取 <文字 图片 音频 视频 文档..>

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 解释器 Pycharm 编辑器 模块使用: requests re csv pandas 爬虫实现第一步: 一. 抓包分析 找到对应数据链接地址 套用代码: 修改…

Linux的基本指令(四)

目录 前言 时间相关的指令 date指令 时间戳 日志 时间戳转化为具体的时间 cal指令 find指令(十分重要) grep指令(行文本过滤工具) 学前补充 什么是打包和压缩? 为什么要打包和压缩? 怎么打包和…

java对象 转换成json字符串 工具类 jackson

jackson概述 Jackson 是一个用于处理 JSON 数据的 Java 库,由 FasterXML 公司开发和维护。它提供了一组功能强大的 API,用于在 Java 对象和 JSON 数据之间进行高效的序列化(将对象转换为 JSON 格式)和反序列化(将 JSO…

高效记账,轻松管理,批量记账与柱形图分析助你掌控收支明细

你是否曾经因为繁琐的记账过程而感到烦恼?是否曾经因为无法全面掌握个人或企业的收支情况而感到困惑?现在,我们为你带来了一种全新的高效记账方式,让你从此告别繁琐,轻松掌控收支明细。 首先第一步我们要打开晨曦记账…

Open Feign 源码解析(四) --- 请求对象构造(上)

Open Feign 源码解析四 请求对象的构造(上) 源码前三篇文章写了这个图的过程 源码前三篇文章的内容归纳起来就是讲了这样的问题: 如何把接口转换为具有发送http请求能力的feign client对象以及如何整合到Spring容器中? 如何构造…

LINUX入门篇【10】---进程篇【2】---进程状态

前言: 有了上一篇关于进程的初步认识和我们的PCB第一个数据段–标识符的讲解,接下来我们将继续讲解PCB的其他数据段,本篇要讲的是进程状态。 进程状态: 就像我们写贪吃蛇的时候,构建的游戏状态来判定游戏结束的方式…

PHP TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据

本示例使用设备&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) <?php header("content-type:text/html;charsetGBK");set_time_limit(0); $port39169; //监听端口if(($socket socket_create(AF_INET, SOCK…