OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13914|回复: 5

一直没法看懂原子哥你的FAT_INIT程序~~

[复制链接]

13

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2011-1-20
在线时间
5 小时
发表于 2011-2-9 21:25:56 | 显示全部楼层 |阅读模式
       首先感谢哥无私的分享自己的程序,俺这段时间一直在学习文件系统的有关知识,现在终于对FAT32有了初步的认识,这才敢鼓足勇气看原子哥你的程序,谁知道一开始就死在初始化程序这里了,原子哥你这里面定义了一堆结构体,以俺微薄的知识看,好像有几个是重复的,这一块俺卡住了,比如bootsector710与bpb710,应该前者包含后者哈,还有fat_buffer中的数据是DBR还是MBR哈,咋看到原子哥你把它赋值给俩个结构体哈~~~
       原子哥能否把这块的思路说下,就是解释下这个初始化完成了哪些工作可以吗?俺知道这个初始化程序最后是把BPB中的有关信息存进了头文件中一开始定义的几个变量中,貌似俺也就这块能看懂~~
      辛苦原子哥了,感谢张洋哥在另一个帖子里的指点~~~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-2-10 11:43:57 | 显示全部楼层
bootsector710与bpb710,你说的前者包含后者是对的。但不是重复的。
bootsector710的结构体定义如下:

//FAT32 DBR区,操作系统引导记录区
typedef __packed struct 
{
BYTE bsJump[3]; // jump inst E9xxxx or EBxx90
BYTE bsOemName[8]; // OEM name and version
BYTE bsBPB[53]; // BIOS parameter block
BYTE bsExt[26]; // Bootsector Extension
BYTE bsBootCode[418]; // pad so structure is 512b
BYTE bsBootSectSig2; // boot sector signature byte 0x00 
BYTE bsBootSectSig3; // boot sector signature byte 0x00
BYTE bsBootSectSig0; // boot sector signature byte 0x55 
BYTE bsBootSectSig1; // 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文件系统原理》一文。

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2011-1-20
在线时间
5 小时
 楼主| 发表于 2011-2-10 14:18:28 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
好的,感谢原子哥,辛苦啦,俺继续钻研哥的武林秘籍喽~~~
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2011-2-13
在线时间
10 小时
发表于 2011-2-19 16:33:55 | 显示全部楼层
对了,问个问题,现在调用那个函数可以写SD卡呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-2-19 16:46:55 | 显示全部楼层
回复【4楼】waronder:
-------------------------------
在SD驱动的.c文件里面有
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
发表于 2011-9-21 16:42:08 | 显示全部楼层
回复【楼主位】smy096:
---------------------------------
呵呵,楼主的帖子写的太客气了。俺就不会这么客气,说话直来直去,经常得罪人,看了楼主的帖子感觉巨汉,自己非常渺小!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 04:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表