STM32
直播中

杨颜

7年用户 165经验值
私信 关注
[问答]

请问原子哥的FAT_INIT程序该如何理解?

       首先感谢哥无私的分享自己的程序,俺这段时间一直在学习文件系统的有关知识,现在终于对FAT32有了初步的认识,这才敢鼓足勇气看原子哥你的程序,谁知道一开始就死在初始化程序这里了,原子哥你这里面定义了一堆结构体,以俺微薄的知识看,好像有几个是重复的,这一块俺卡住了,比如bootsector710与bpb710,应该前者包含后者哈,还有fat_buffer中的数据是DBR还是MBR哈,咋看到原子哥你把它赋值给俩个结构体哈~~~
       原子哥能否把这块的思路说下,就是解释下这个初始化完成了哪些工作可以吗?俺知道这个初始化程序最后是把BPB中的有关信息存进了头文件中一开始定义的几个变量中,貌似俺也就这块能看懂~~
      辛苦原子哥了,感谢张洋哥在另一个帖子里的指点~~~

回帖(5)

孙勳努

2019-7-23 08:20:22
bootsector710与bpb710,你说的前者包含后者是对的。但不是重复的。
bootsector710的结构体定义如下:
//FAT32 DBR区,操作系统引导记录区
typedef __packed struct 
{
BYTEbsJump[3];// jump inst E9xxxx or EBxx90
BYTEbsOemName[8];// OEM name and version
BYTEbsBPB[53];// BIOS parameter block
BYTEbsExt[26];// Bootsector Extension
BYTEbsBootCode[418];// pad so structure is 512b
BYTEbsBootSectSig2;// boot sector signature byte 0x00 
BYTEbsBootSectSig3;// boot sector signature byte 0x00
BYTEbsBootSectSig0;// boot sector signature byte 0x55 
BYTEbsBootSectSig1;// boot sector signature byte 0xAA
#define BOOTSIG0        0x55
#define BOOTSIG1        0xaa
#define BOOTSIG2        0x00
#define BOOTSIG3        0x00
}bootsector710;
这个主要为了获取bsJump这个参数,以及bsBPB。
而bpb710,则是对bsBPB的解析。
这样,两个结构体分别解析不同的字段,从而得到各种参数。
第一次读取的是MBR,后面读取的是DBR。
思路看代码基本就明白了吧?初始化主要就是完成了获取文件系统的各种参数,比如:文件系统的类型(FAT12/16/32),文件系统的根目录所在的扇区,每个扇区的字节数,每个簇的扇区数,FAT表所在扇区等等这些信息。
在有了这些信息之后,就可以按部就班的去读取各个文件,及数据了。
具体请看《FAT文件系统原理》一文。
举报

汪芳

2019-7-23 08:32:59
回复【2楼】发烧友:
-------------------------------
好的,感谢原子哥,辛苦啦,俺继续钻研哥的武林秘籍喽~~~
举报

石栓柱

2019-7-23 08:43:02
对了,问个问题,现在调用那个函数可以写SD卡呢?
举报

陆苏倌

2019-7-23 08:55:35
回复【4楼】waronder:
-------------------------------
在SD驱动的.c文件里面有
举报

更多回帖

发帖
×
20
完善资料,
赚取积分