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

[复制链接]
2034|10
 楼主| peace555 发表于 2015-11-22 22:36 | 显示全部楼层 |阅读模式
基于FAT文件系统的SD卡单片机读写方法详解.pdf
 楼主| peace555 发表于 2015-11-22 22:36 | 显示全部楼层

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
huihui520 发表于 2015-11-23 09:00 | 显示全部楼层
下载看下,想搞下这个
雾霾和青山 发表于 2015-11-23 09:18 | 显示全部楼层
FAT32文件系统您一定不会陌生,最多看到它是在windows操作系统里,但在一些嵌入式产品(如手机、MP3、MP4等)中,也能看到它的身影。从某种意义上来讲,FAT32文件系统是非常成功的,使我们可以脱离底层储存设备驱动,更为方便高效地组织数据。给单片机系统中的大容量存储器(如SD卡、CF卡、硬盘等)配以FAT32文件系统,将是非常有意义的(如创建的数据文件可以在windows等操作系统中直接读取等)。
zhengbo7hui 发表于 2015-11-23 09:21 | 显示全部楼层
FAT32本身是比较复杂的,对其进行讲解的最好方法就是实际演练。笔者手里持有一张刚以FAT32格式化的SD卡,我们就围绕它来讲解FAT32的实现机理。
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内
zhengbo7hui 发表于 2015-11-23 09:23 | 显示全部楼层
引导区

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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
};
放放 发表于 2015-11-23 12:46 来自手机 | 显示全部楼层
最近也在搞FATFS
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

620

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部