历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2018年09月16日 | 基于STM32的SD卡FATFS文件系统学习笔记

2018-09-16 来源:eefocus

在移植文件系统前,首先来掌握一些基本知识(必须掌握的):

一、FATFS文件系统格式分析

搞文件系统,首先要了解一下SD卡里面的结构和分区,如下图



1、引导扇区

引导扇区包含着磁盘和文件系统的许多重要参数。文件管理系统首先要对该扇区的信息进行分析,才能了解当前磁盘上文件系统的格式。

EB 58 90 4D 53 44 4F 53 35 2E 30 00 02 08 20 00 02 00 00 00

00 F8 00 00 3F 00 FF 00 00 0000 0000 34 0F 00 CC 03 00 00

00 00 00 00 02 00 00 00 01 00 06 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 29 22 B0 50 A0 4E 4F 20 4E 41 4D 45 20 20

20 20 46 41 54 33 32 20 20 20 33 C9 8E D1 BC F4 7B 8E C1 8E

11-12字节

每一扇区的字节数

典型为0x00、02,512

13

每簇扇区数

8

14-15

保留扇区数

0x20,00,保留32个扇区

21

介质类型

0xF8,固定介质

32-35

总扇区数

0x00 34 0F 00,十进制996352

36-39

文件分配表所占扇区数

0xCC 03 00 00,972

44-47

根目录所在簇号

02 00 00 00,2号簇

48-49

FSINFO扇区标号

01 00,在1号扇区

50-51

引导扇区的备份扇区号

06 00,在6号扇区

66

扩展引导标志

0x29

82-89

FAT32字符串

46 41 54 33 32 20 20 20




FAT32与FAT12、FAT16区分是通过簇的数量,簇总数=总扇区数-(保留扇区数+分配表扇区数+根目录区扇区数)/每簇扇区数。996352-(32+972*2+0)/8=124297,有12万多簇,肯定是FAT32系统。

在FAT32文件系统,根目录区与普通目录一样,都是位于数据区,比较典型的都是从2号簇开始。数据区起始扇区号=根目录区起始扇区号=保留扇区+2*分配表扇区=32+1944=1976号。3号簇起始就是1984。利用shell命令里的SDRD命令读出来看一下。我编写的这个命令以扇区号为参数,每次读入两个扇区,并以十六进制的形式显示在串口终端上。

体外的知识:


 


 



FAT16 DBR 参数的偏移0x11 处记录了根目录所占扇区的数目。偏移0x16

记录了FAT 表所占扇区的数据。偏移0x10 记录了FAT 表的副本数目。系统在得

到这几项参数以后,就可以确定数据区的开始扇区偏移了。

FAT16 文件系统从根目录所占的32 个扇区之后的第一个扇区开始以簇为单

位进行数据的处理,这之前仍以扇区为单位。对于根目录之后的第一个簇,系

统并不编号为第0 簇或第1 簇 (可能是留作关键字的原因吧),而是编号为第2

簇,也就是说数据区顺序上的第1 个簇也是编号上的第2 簇。

FAT 文件系统之所以有12,16,32 不同的版本之分,其根本在于FAT 表用

来记录任意一簇链接的二进制位数。以FAT16 为例,每一簇在FAT 表中占据2

字节(二进制16 位)。所以,FAT16 最大可以表示的簇号为0xFFFF(十进制的

65535),以32K 为簇的大小的话,FAT32 可以管理的最大磁盘空间为:32KB×

65535=2048MB,这就是为什么FAT16 不支持超过2GB 分区的原因。

FAT 表实际上是一个数据表,以2 个字节为单位,我们暂将这个单位称为

FAT 记录项,通常情况其第1、2 个记录项(前4 个字节)用作介质描述。从第三

个记录项开始记录除根目录外的其他文件及文件夹的簇链情况。根据簇的表现

情况FAT 用相应的取值来描述,见表


 








二,文件系统的移植

1,首先,去网上下载FATFS的源码

2,推荐到http://www.360doc.com/content/12/0708/23/10358948_223078499.shtml 这里,这是一篇写得比较好,比较详细的移植文章。


推荐阅读

史海拾趣

Abilis Systems公司的发展小趣事

Abilis Systems公司是一家专注于数字视频和数字广播领域的半导体公司,以下是该公司发展的五个相关故事:

  1. 公司成立和初期发展: Abilis Systems公司成立于2004年,总部位于法国索恩-卢瓦尔省的克勒拉克。公司成立之初,致力于研发数字视频和数字广播领域的创新技术,旨在提供先进的芯片解决方案。

  2. 技术创新和产品推出: 在成立后的几年里,Abilis Systems公司不断进行技术创新,并推出了一系列创新的数字视频和数字广播芯片产品。这些产品包括数字电视接收器和解调器、数字广播接收器等,为客户提供了高性能和高度集成的解决方案。

  3. 市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,Abilis Systems积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于数字电视、数字广播、卫星电视等领域,赢得了客户的信赖和认可。

  4. 并购和战略合作: 为了进一步加强技术实力和扩大市场份额,Abilis Systems公司进行了一系列并购和战略合作。通过收购具有相关技术和市场资源的企业,公司拓展了产品线,并加强了在数字视频和数字广播领域的领先地位。

  5. 未来展望和发展方向: Abilis Systems将继续致力于技术创新和产品升级,加强在数字视频和数字广播领域的研发投入。公司将不断推出符合市场需求的新产品和解决方案,为客户提供更优质的服务和支持。同时,公司还将积极参与行业标准制定和国际合作,推动数字视频和数字广播技术的发展和应用。

Alcatel-Lucent公司的发展小趣事
  1. Alcatel-Lucent 的起源可以追溯到 19 世纪末的法国。1880 年,一家名为 Compagnie Générale d'Électricité (CGE) 的公司在法国成立,主要从事电信和电气设备的制造和销售。这家公司后来成为了 Alcatel-Lucent 的前身之一。

  2. 20 世纪初,CGE 开始涉足电信领域,并开始在法国和国际市场上发展。该公司逐渐成为了一家领先的电信设备制造商,并参与了许多重要的电信基础设施项目。

  3. 2006 年,法国的 Alcatel 和美国的 Lucent Technologies 公司宣布合并,成立了 Alcatel-Lucent 公司。这次合并创造了一个综合性的电信设备制造商,覆盖了通信网络、软件和服务等多个领域。

  4. 合并后,Alcatel-Lucent 成为了全球领先的电信设备供应商之一,为全球各地的电信运营商提供了广泛的产品和解决方案,包括固定和移动网络、光纤通信、宽带接入和数据中心等领域。

  5. 在成立后的几年里,Alcatel-Lucent 继续推出创新的产品和技术,包括下一代移动通信技术 LTE、IP/MPLS 网络和云计算解决方案等,为数字化时代的通信基础设施发展做出了重要贡献。

ERA Transformers公司的发展小趣事

在电子行业中,ERA Transformers公司以其开创性的技术而闻名。该公司专注于研发和生产高效的电子变压器,以满足不断增长的电子设备需求。在一次研发过程中,公司工程师们面临了一个重大挑战:如何提高变压器的能效和稳定性。经过数月的深入研究与反复试验,他们终于开发出了一种新型的高效能变压器,该变压器采用了先进的材料和独特的设计,显著提高了能效和稳定性,这一创新技术的突破使得ERA Transformers公司在电子行业中崭露头角。

Crowd_Supply__Inc.公司的发展小趣事

与众不同的是,Crowd Supply Inc.采用了一种基于众包和预售的产品研发策略。他们在平台上发布项目概念和初步设计,通过社区的力量进行方案优化和功能迭代。这种模式不仅降低了产品开发成本,还使得产品更贴近用户需求。其中一款基于该策略开发的产品——一款高集成度的开源硬件开发板,在预售阶段就获得了大量订单,为公司带来了可观的收入。

Everbuild公司的发展小趣事

随着公司的逐步发展,Everbuild开始注重技术研发和品牌建设。公司投入大量资金引进先进的生产设备和技术人才,不断推出具有创新性的电子产品。其中,一款高性能的智能手机处理器在市场上引起了热烈反响,成为公司的明星产品。同时,Everbuild还加强了品牌宣传和推广,提高了品牌的知名度和美誉度。

迦美信芯(CanaanTek)公司的发展小趣事

迦美信芯通讯技术有限公司成立于2008年,总部位于被誉为“中国硅谷”的上海张江高科技园区。自成立以来,公司便专注于射频领域集成电路的研发和销售。凭借对技术的深入理解和不懈追求,迦美信芯逐渐在射频前端市场占据了一席之地。

问答坊 | AI 解惑

无法上传附件!

为什么今天无法上传附件,根本就没有这个选项啊? 难道是ie问题,或者论坛受到攻击?…

查看全部问答>

AT89S52的PDF

大家好,我是一个刚学的,只能上传最简单的。…

查看全部问答>

一个LED的N种玩法 (二)---渐变

一个LED的N种玩法 (二)---渐变 Author: chenzhufly Email: chenzhufly@126.com 2010-4-28   在第一篇中我已经能够上LED闪烁起来了,还可以怎么玩呢?想到网络上曾经讨论过LED亮度渐变的程序,实现的方式很多,我这里挑个最简单的—用延时 ...…

查看全部问答>

关于16为data width如何在pSRM里面申请一个unsignd char

CPU与SRAM的访问方式为WORD访问,也就是说,CPU能一次从SRAM里面读出16BIT的数据,这样现在有一个问题想不通: unsigned char testTemp; 请问,CPU如何在SRAM里面定位一个BYTE,并申请了这个空间的?…

查看全部问答>

如何申请版主?

RT.几个区都找了找.没找到 本人大三学生,现在在准备电子设计大赛.跟着老师在做东西.用的STM32核心.几个大点的电子类论坛都逛过,还是最喜欢这里的气氛.可是.觉得大家看帖积极.回帖稍微有点那个啊.尤其是STM板块.帮大家解决问题的总是那么几个人.今 ...…

查看全部问答>

求助:MSP430F5438信息区问题。

MSP430F5438信息区128字节,不够用,其他信息写到哪里。谢谢!…

查看全部问答>

2012TI杯做电源的孩儿们,你们都选择了TI的哪些元器件啊~?

RT啦·~  我怎么感觉只能用到INA282?…

查看全部问答>

跪求资料

谁有STM32的视频资料啊…

查看全部问答>

Linux下静态库和动态库的制作与使用--李家凯老师

作者:武汉华嵌嵌入式培训中心 讲师 李家凯 Linux下静态库和动态库(共享库)的制作与使用 Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库。linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。 静态函数库:   ...…

查看全部问答>

一个不该作的比较 : STM32F1 与C2000 的ADC的比较

        用STM32F103,对ADC编程时,觉得它的ADC配合DMA很是方便,然而,仔细一想,它不用DMA -- 多数情况下还是不行的。因为,如果多通道转换时,它的结果寄存器只有一个,如果不及时将结果移走,下一通道转换将覆 ...…

查看全部问答>