振南的 znFAT

--单片机上的 FAT32文件系统

前言

1znFAT是什么?

关于 znFAT,也许您从未耳闻,这是因为振南并没有去宣传,也

很少向人提起,基本都是私下在作,在这个过程中与不少网友和爱好

者进行了交流,他们为 znFAT提了不少的建议和需求,使 znFAT可

以不断改进和扩充。也有不少人建议我开源,在这种要求之下,我在

网上公开了一部分代码,果然是受到了很大的关注。但我要说的是,

先前没有全部开源是因为我自认为 znFAT还不够完善。现在,znFAT

经过一遍遍的测试以及在实际工程中的应用,已经较为完善了。我不

敢说 znFAT已经一点问题没有了,但如果一直是我一个人在作,它也

难以得到更进一步的发展,所以谨以此书,向大家介绍 znFAT的研发

与实现过程。

znFAT到底是什么?znFAT是振南原创的一种方便移植于各种微

处理器上的开源的 FAT32文件系统解决方案。

2znFAT能用来作什么?

这是最核心的一个问题,就如同筷子用来吃饭、雨伞用来挡雨,

各有各的功能,所以才有存在的必要。简单来说,znFAT最重要的用

途就是在存储设备上,如 SD卡、CF卡等等,实现FAT32文件系统,

进行各种文件操作,并保证与 windows等操作系统上的FAT32文件

系统相兼容。

虽然我们每天都在用电脑,在与文件打交道,但不一定每个人都

知道有文件系统这种东西,或者不了解它的运行机制。而我要说的是,

正因为计算机、MP3、手机等等现在能这么普及,很大程度上是因为

有文件系统。

FAT32文件系统是一种机制,或者是一种智慧,更如一个主管,

可以将存储器上的数据有机的组织为一个文件,并向我们提供针对于

文件的各种操作,比如创建文件、读取文件等等。

znFAT是一套解决方案,也就是一套实际可以看到的代码,更通

俗的说就是用 C语言对 FAT32的实现,用于运行在某一种微处理器

上,并在某一种存储设备上真正实现 FAT32中的各种文件操作。至

于 znFAT中都实现了哪些功能,在后面的介绍中大家会有全面的了

解,同时也就能了解到编写一套文件系统解决方案所要花费的心血

了。

3、为什么要自己从 0写,不是有现成的方案吗?

能问出这一问题的人,想必不是初学者,因为文件系统这种东西

已经算是比较高级的应用了,所以一般人在初学阶段是不会接触文件

系统的。只有有了一定经验,进入实际项目的人,才会越来越发现文

件系统的重要。

为人所熟知的现有的文件系统有 FATFS、uc/FS等等,由来已久,

并且也在不断的改进发展,拥有很大的应用人群。这些现有的方案,

都向使用者提供了源代码,方便移植到各种平台上。但稍有了解的,

就会发现,这些解决方案都来自于国外,或是公司,或是研究团体,

从而造成源代码很难被读懂,想要深入去了解文件系统是怎样实现

的,比较困难。所以如果能原创性地编写出一套完善的文件系统解决

方案,并配以相应的教程和应用实例,就可以使我们对文件系统有更

深刻的了解。理解了它的真谛,我们就可以去实现那些现有方案中没

有实现,而我们又急于实现的功能,一切工作都变得非常灵活。

在这里,您可能还会问,难道国内就没有成形的文件系统解决方

案吗?我要说,有!比如沁恒电子、各个开发 MP3、MP4、手机的公

司,我想都会有专门的人去研究文件系统并予以实现,但最重要的一

点,他们是不会开放源代码的,更不会告诉你他们是怎样实现的!

4FAT32文件系统到底有多复杂,好不好学?

虽在 FAT32文件系统协议文档中讲的东西很多,乍看起来很零

乱,使人无从下手,但只要耐住性子多看几遍,真正的看进去了,就

会发现 FAT32文件系统内容虽多,但层次分明,逻辑缜密。最后你

会产生这样的想法,只要肯下功夫,就一定能写出一套不错的方案来。

不过,如果是自己从 0来研究 FAT32文件系统,还是不太好弄

明白的,这也是本书的初衷,振南的任务就是把 FAT32文件系统掰

开了揉碎了,让您轻松接受,并感觉到 FAT32文件系统设计上的一

些微妙之处,感叹微软令人佩服的创造力(FAT32文件系统的老家是

微软!)

5、有了 znFAT我们能作出些什么?

当我们真正把 FAT32文件系统研究明白了,学会用 znFAT在存

储设备上进行各种文件操作了,这个时候,znFAT就成为了我们得心

应手的工具了。也就是说,利用 znFAT我们就可以开始更进一步的开

发了。而此时我们开发的层次已经与以前截然不同了,以前我们读写

数据也许就是直接在存储器的扇区里或存储单元里读写,而现在我们

是在文件里进行读写,而且我们读写的数据与 windows是相通的了。

我们可以作出更多精彩的实验和产品,比如 SD卡 MP3播放器、

可插接 U盘的数码相框、CF卡电子书等等。可以说,如果我们具有

了操作文件的能力,很多问题都可以迎刃而解,很多实验都变得很简

单了。

6znFAT是不是需要特定的硬件才能实现?

其实 znFAT研发过程中的难题有很多,除了 FAT32文件系统本身

的复杂度外,还有就是实际平台的硬件资源了。研发 znFAT的一个重

要指标就是可移植性,不光包括 znFAT本身的程序接口要易于移植,

另外更为重要的就是占用资源量,占用资源越少,越容易向一些低端

的微处理器上移植。振南在研发 znFAT的过程中所使用的硬件是

STC12C5A60S2(STC公司出产的一种 1T增强型 51核单片机,片内

有 1280字节的 RAM)、 1G的 SD卡与 CF卡各一张(其实就是基于

振南的“天狼星精华板”上的硬件资源,这里为什么要有两种存储设

备,SD卡与 CF卡,到后面您就明白了!)

应该说振南所使用的硬件已经是非常简陋了,也正是因为硬件资

源较为贫瘠,才能写出更为精简高效的代码来,以节省资源。所以振

南在编写程序的过程中,不光要考虑功能的实现,还要计算 RAM等

资源的用量。现在现在为止,znFAT实现所有功能所需要的 RAM资

源只有 900多字节,其中有 512字节的扇区数据缓冲区,也就是说,

znFAT实现FAT32的逻辑只用了 400多字节。而常用的单片机、ARM、

DSP等芯片 RAM一般也在几 K到几十 K字节,所以znFAT可以轻

松向这些芯片进行移植。

7、本书都会讲哪些内容?

在本书中,FAT32文件系统协议及基本的原理是肯定要讲解的,

然后就是 znFAT各项功能的具体实现。由于文件系统不可能孤立存

在,必须要运行于某一种微处理器上,因此要把 STC12C5A60S2单

片机一些基本用法讲一下;其次还要基于一种存储设备,所以还要讲

解 SD卡与 CF卡的驱动原理与具体实现。除此之外,还有程序的调

试方法、相关软件的用法等等。总之,此书不乏要讲的东西。

前言中振南用自问自答的方式,也许让您粗略了解了 FAT32文

件系统及 znFAT。此时的你,估计还是一个门外汉,下面就让振南慢

慢地把您让进屋来。

振南的 znFAT(前言)相关推荐

  1. 振南的znFAT FAT32文件系统

    一.最最简单文件系统: 缺点:1.查找文件效率低: 2.不可能为文件添加数据: 3.不能有效的利用空间: 二.改进后的文件系统模型: 优点:1.查找文件效率更高: 2.文件数据更改更为灵活: 缺点:1 ...

  2. 魏振南:工业装备物联网线上线下创新融合助力智能化工厂建设

    摘要:微茗智能科技总经理魏振南在2017年12月7日苏州云栖大会上分享了工业装备物联网创新融合领域的最新成果,微茗科技从智能制造分析为出发点,以数据获取为切入点,行成了线上线下两类模式.在实际应用过程 ...

  3. STM32-M3(野火)SD卡读写/移植znFAT文件访问系统

    设备: STM32F103VE-M3,板载SD卡读写模块. 源码: 野火的SD卡扇区读写驱动,振南FAT的STM32版本. 另有1G-16G SD卡若干张. 移植过程: SD卡扇区读写驱动测试,SD卡 ...

  4. 嵌入式软件相关书籍参考书目

    可以重点关注下计算机科学丛书 linux驱动 <linux设备驱动程序> <Linux设备驱动开发详解> pdf-华清远见10年特献版> <嵌入式Linux应用开发 ...

  5. 学习笔记:有源晶振与无源晶振(一)

    学习笔记:有源晶振与无源晶振(一) 前言 一.有源晶振与无源晶振,"源"是什么? 二.有源晶振与无源晶振的区别 1.引脚数量不同 2.振荡器的需求不同 学习笔记:有源晶振与无源晶振 ...

  6. 计算机保研经验(中科大、北航、成电、西交、南大)

    计算机保研经验(中科大.北航.成电.西交.南大) 目录 计算机保研经验(中科大.北航.成电.西交.南大) 前言 一.本人简介 二.投递与结果 三.时间线 四.夏令营具体细节 1.中科大 老师 面试 2 ...

  7. 推荐一些嵌入式、C/C++的开源库和项目

    前言 想用代码实现一个功能时,我们可以先看看是否有前辈已经实现了该功能,并且开源分享在网上.一般我们自己造出来的轮子的可用性基本上是很难和大神们造的轮子相比的. 因此多了解一下优秀的开源库的使用,可以 ...

  8. 助你成为嵌入式高手的100多个软硬件开源项目

    大家好,转发一个朋友总结的资料文章,内容如下 大家好,我是老温,今天给大家推荐一个嵌入式开源项目汇总的仓库. 学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言. ...

  9. 卡函数or1200基于simple-spi的SD卡驱动

    每日一贴,天今的内容关键字为卡函数 这篇blog来说说基于simple-spi这个ipcore编写spi模式的SD Card裸机的驱动程序,植移依附分不清什么SD卡啊,micro SD啊,miniSD ...

  10. 嵌入式优秀资源网址整理

    ## 嵌入式相关开源项目.库.资料------持续更新中 在产品开发的过程,难免会遇到各种各样的问题,为了方便大家快速查找. 学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但 ...

最新文章

  1. Go圣经-学习笔记之defer和异常处理
  2. 宁可寸寸断,不意绕指柔
  3. 计算机网络是啥意思啊,no signal是什么意思啊
  4. RedisClient的安装及基本使用
  5. 买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)
  6. [转]linux各文件夹介绍
  7. spring 七种事务
  8. (22)Xilinx FPGA开发软件chipscope(FPGA不积跬步101)
  9. mac下workbench轻松搭建(drools 7.11.0.Final版本)
  10. 记因循环依赖的解决方案
  11. 芝柏 bmw oracle,魅力十足的潜水腕表
  12. luoguP4709 信息传递 置换 + 多项式exp
  13. 简谈BOOST升压电路
  14. 【51单片机】(五)矩阵键盘
  15. Python报错:ValueError: operands could not be broadcast together with shapes
  16. 「第五章」点击劫持(ClickJacking)
  17. MySQL权限系统(一).The MySQL Access Privilege System 概述
  18. uniapp登录页设计
  19. 台达PLC中的寄存器如何进行高低位调换?
  20. 马士兵教你如何面试(记录原话)

热门文章

  1. Android手柄数据全解析
  2. QT与游戏手柄测试(数据与UI相连,ui界面作出反应)
  3. [不好分类]《凤凰项目》读后感
  4. 回弹强度记录表填写_混凝土抗压强度回弹法测试原始记录表.doc-_装配图网
  5. roboware studio教程_Roboware 常见操作和问题
  6. MYMPS蚂蚁分类信息系统源码,5.9E多城市全开源版本
  7. 屏幕坐标转换世界坐标
  8. 傻瓜式c语言教程,app制作教程简单易学:傻瓜简单自建app,步骤如下
  9. 网络配置实训(思科)
  10. 应用一个基于Python的开源人脸识别库,face_recognition