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

news2024/11/17 5:40:37

注解目录

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)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python用itertools.product函数生成10位的0,1组合

需求:有10个指标,每个指标有0、1两种结果,生成所有可能出现的情况。解决:基于数学知识,我们很容易知道总共有组合数为2^101024种 那么使用python我们该如何用代码实现呢? python中的函数为itertools.produ…

ArkUI 如何将$r(’app.string.xxx‘) 转成string字符串

一、正常引用字符串资源文件内容 在 ArkUI 中,string.json 中的字符串资源正常情况下使用如下方式引用: Entry Component struct LoginPage {build() {Column() {Text($r(app.string.title))}}}二、资源转string类型 上面的代码没问题是因为 Text(con…

283. 移动零(双指针)

一次遍历&#xff0c;j相当于遍历到第一个零元素&#xff0c;将其和非零元素i交换&#xff0c; 使用的是leetcode题解的动图 class Solution { public:void moveZeroes(vector<int>& nums) {int n nums.size();int j 0;for (int i 0; i < n; i) {if (nums[i]…

Java多线程核心技术二-synchronzied同步方法

1 概述 关键字synchronzied保障了原子性、可见性和有序性。 非线程安全问题会在多个线程对同一个对象中的同一个实例变量进行并发访问时发生&#xff0c;产生的后果就是“脏读”&#xff0c;也就是读取到的数据其实是被更改过的。而线程安全是指获取的实例变量的值是经过同步处…

坚鹏:中国人寿福建省公司当下宏观经济形势分析与二十大精神解读

中国人寿保险&#xff08;集团&#xff09;公司属国家大型金融保险企业&#xff0c;2016年中国人寿入主广发银行&#xff0c;开启保险、投资、银行三大板块协同发展新格局。2022年&#xff0c;集团公司合并营业收入站稳万亿平台&#xff1b;合并总资产突破6万亿元大关。中国人寿…

java学习part18抽象类

Java抽象类 详解-CSDN博客 111-面向对象(高级)-抽象类与抽象方法的使用_哔哩哔哩_bilibili 1.概念 2.抽象类 抽象类不能实例化&#xff0c;可以有属性&#xff0c;也可以有方法。 方法可以实现或者只声明不实现&#xff0c;要加一个abstract abstract class A{//定义一个抽…

操作系统 选择题 期末试题 考研真题 + 参考答案

1.&#xff08;考研真题&#xff0c;单项选择题&#xff09;单道批处理系统的主要缺点是&#xff08; &#xff09;。 A. CPU利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 【参考答案】A 【解析】单道批处理系统的内存中只有一道程序&#xff0c;当该程序…

智能优化算法应用:基于郊狼算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于郊狼算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于郊狼算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.郊狼算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

C 语言-循环嵌套-函数

C 语言 - 循环嵌套、函数 1. 循环嵌套 1.1 作用 循环 套 循环。 1.2 使用 需求1&#xff1a; 打印以下图形&#xff1a; * * * * * * * * * * * * * * * *代码&#xff1a; 1、使用循环打印 #include <stdio.h> int main(int argc, char const *argv[]) {for (int i…

zabbix 6.0 原理与部署

一、zabbix简介&#xff1a; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbi…

Mysql中的引擎介绍(InnoDB,MyISAM,Memory)

MySQL引擎就是指表的类型以及表在计算机上的存储方式。 MySQL数据库及其分支版本主要的存储引擎有三种&#xff0c;分别是 InnoDB、MyISAM、 Memory&#xff0c;还有一些其他的&#xff0c;CSV、Blackhole等&#xff0c;比较少见&#xff0c;可以使用SHOW ENGINES语句来查看。结…

计算机组成原理——小啃一下

CPU和主存储器结构 CPU&#xff1a; 运算器 ACC&#xff08;累加器&#xff09;ALU&#xff08;算数逻辑单元&#xff09;MQ&#xff08;乘商寄存器&#xff09;X&#xff08;操作数寄存器&#xff09; 控制器 CU&#xff08;控制单元&#xff09;IR&#xff08;指令寄存器&a…

基础课12——深度学习

深度学习技术是机器学习领域中的一个新的研究方向&#xff0c;它被引入机器学习使其更接近于最初的目标——人工智能。深度学习的最终目标是让机器能够像人一样具有分析学习能力&#xff0c;能够识别文字、图像和声音等数据。 深度学习的核心思想是通过学习样本数据的内在规律…

java第二十章总结多线程

20.2创建线程 20.2.1继承Thread类 Thread类是Java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建议Thread实例。 public class ThreadTest extedns Thread{} run方法格式&#xff1a; public void run(){} 20.1让线程…

纯干货篇,用Stable diffusion制作广告的保姆级教程

今天就想给大家演示一般如何使用Stable diffusion为你的产品添加场景&#xff0c;秒变广告大片。 掌握这个技能&#xff0c;你可以随意将产品添加不同的场景&#xff0c;节约复杂的拍摄布景和拍摄成本。 话不多说&#xff0c;接下来是详细讲解演示流程 首先选出一张你的产品图…

SAP_ABAP_编程基础_基本数据类型(预定义数据类型)介绍 , 它有10种

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读441次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…

完美的输出打印 SQL 及执行时长[MyBatis-Plus系列]

导读 Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。 在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,以及了解它的执行时间,方便分析是否出现了慢SQL问题。 MyBatis-Plus提供了两种SQL分析打印的方式,用于输出每条SQL语句及其执行时间,针…

Redis应用的16个场景

常见的16种应用场景: 缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜. 1、缓存 String类型 例如&#xff1a;热点数据缓存&#x…

【解决方案】多用户多回路宿舍用电管理解决方案

01 引言 近几年来&#xff0c;因违规使用大功率恶性负载电器导致宿舍失火的安全事故在各大高校时有发生&#xff0c;给学生和学校都带来了巨大的损失。北京大学、哈尔滨工业大学、上海商学院以及俄罗斯人民友谊大学等高校学生公寓发生的火灾给高校学生公寓的安全用电敲响了警钟…

视频封面:视频图片提取技巧,从指定时长中捕捉需求的图片

在当今的数字时代&#xff0c;视频已成为日常生活中不可或缺的一部分。无论是社交媒体、博客&#xff0c;视频都发挥着重要的作用。而一个吸引的视频封面往往能吸引更多的观众点击观看&#xff0c;选择清晰度高、色彩鲜艳且能吸引人的图片。同时&#xff0c;确保图片与视频内容…