打印

基于FAT文件系统的SD卡单片机读写方法详解

[复制链接]
1716|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
peace555|  楼主 | 2015-11-22 22:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于FAT文件系统的SD卡单片机读写方法详解.pdf
沙发
peace555|  楼主 | 2015-11-22 22:36 | 只看该作者

基于FAT文件系统的SD卡单片机读写方法详解.pdf

基于FAT文件系统的SD卡单片机读写方法详解.pdf

286.75 KB

使用特权

评论回复
板凳
huihui520| | 2015-11-23 09:00 | 只看该作者
下载看下,想搞下这个

使用特权

评论回复
地板
雾霾和青山| | 2015-11-23 09:18 | 只看该作者
FAT32文件系统您一定不会陌生,最多看到它是在windows操作系统里,但在一些嵌入式产品(如手机、MP3、MP4等)中,也能看到它的身影。从某种意义上来讲,FAT32文件系统是非常成功的,使我们可以脱离底层储存设备驱动,更为方便高效地组织数据。给单片机系统中的大容量存储器(如SD卡、CF卡、硬盘等)配以FAT32文件系统,将是非常有意义的(如创建的数据文件可以在windows等操作系统中直接读取等)。

使用特权

评论回复
5
zhengbo7hui| | 2015-11-23 09:21 | 只看该作者
FAT32本身是比较复杂的,对其进行讲解的最好方法就是实际演练。笔者手里持有一张刚以FAT32格式化的SD卡,我们就围绕它来讲解FAT32的实现机理。

使用特权

评论回复
6
zhengbo7hui| | 2015-11-23 09:22 | 只看该作者
1、 实例说明
此实例首先在一张空的SD卡(已被格式化为FAT32格式)上创建一个文本文件,并在其中输入20个字符。再将它插入到单片机系统中,实现对这个文件的读取,将文件内容输出在调试终端上。
2、 实现过程
1) 格式化与创建文件 Windows上的磁盘格式化与文件创建就不用多说了。
2)DBR(DOS BOOT RECORD  操作系统引导记录区)
DBR是我们进军FAT32的首道防线。其实DBR中的BPB部分才是这一区域的核心部分(第12~90字节为BPB),只有深入详实的理解了BPB的意义,才能够更好的实现和操控FAT32。关于DBR在FAT32中的地位就不多说了,以下面实际的DBR内

使用特权

评论回复
7
zhengbo7hui| | 2015-11-23 09:23 | 只看该作者
引导区

QQ截图20151123092310.jpg (348.5 KB )

QQ截图20151123092310.jpg

使用特权

评论回复
8
zhengbo7hui| | 2015-11-23 09:42 | 只看该作者
上面的数据看起来杂乱不堪,无从下手,其实对我们有用的数据只不过90个字节(如图中彩色线标记的字节)。仅仅是这90个字节就可以告诉我们关于磁盘的很多信息,比如每扇区字节数、每簇扇区数、磁道扇区数等等。对于这些信息的读取,只要遵循DBR中的字段定义即可。(比如图中紫色字段的两个字节表示这张磁盘的每一个扇区有512个字节,具体的计算方法见下文)

使用特权

评论回复
9
zhengbo7hui| | 2015-11-23 09:53 | 只看该作者
每位的涵义

QQ截图20151123095237.jpg (87.15 KB )

QQ截图20151123095237.jpg

QQ截图20151123095255.jpg (151.67 KB )

QQ截图20151123095255.jpg

使用特权

评论回复
10
zhengbo7hui| | 2015-11-23 09:53 | 只看该作者
DBR的实现代码:
struct FAT32_DBR
{
unsigned char BS_jmpBoot[3]; //跳转指令offset: 0
unsigned char BS_OEMName[8]; // offset: 3
unsigned char BPB_BytesPerSec[2];//每扇区字节数offset:11
unsigned char BPB_SecPerClus[1]; //每簇扇区数offset:13
unsigned char BPB_RsvdSecCnt[2]; //保留扇区数目offset:14
unsigned char BPB_NumFATs[1]; //此卷中FAT表数offset:16
unsigned char BPB_RootEntCnt[2]; //FAT32 为0 offset:17
unsigned char BPB_TotSec16[2]; //FAT32为0 offset:19
unsigned char BPB_Media[1]; //存储介质offset:21
unsigned char BPB_FATSz16[2]; //FAT32为0 offset:22
unsigned char BPB_SecPerTrk[2]; //磁道扇区数offset:24
unsigned char BPB_NumHeads[2]; //磁头数offset:26
unsigned char BPB_HiddSec[4]; //FAT区前隐扇区数offset:28
unsigned char BPB_TotSec32[4]; //该卷总扇区数offset:32
unsigned char BPB_FATSz32[4]; //一个FAT表扇区数offset:36
unsigned char BPB_ExtFlags[2]; //FAT32特有offset:40
unsigned char BPB_FSVer[2]; //FAT32特有offset:42
unsigned char BPB_RootClus[4]; //根目录簇号offset:44
unsigned char FSInfo[2]; //保留扇区FSINFO扇区数offset:48
unsigned char BPB_BkBootSec[2]; //通常为6 offset:50
unsigned char BPB_Reserved[12]; //扩展用offset:52
unsigned char BS_DrvNum[1]; // offset:64
unsigned char BS_Reserved1[1]; // offset:65
unsigned char BS_BootSig[1]; // offset:66
unsigned char BS_VolID[4]; // offset:67
unsigned char BS_FilSysType[11]; //     offset:71
unsigned char BS_FilSysType1[8]; //"FAT32 " offset:82
};

使用特权

评论回复
11
放放| | 2015-11-23 12:46 | 只看该作者
最近也在搞FATFS

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

620

帖子

2

粉丝