- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SD卡读写关键是对SD的初始化、块扇区的读写、以及SD卡文件结构的掌握,
初始化SD首先发送 0x40 0x 00 0x00 0x00 0x00 0x59 应答 0x01 进入空闲模式
在发送 0x41 0x 00 0x00 0x00 0x00 0x59 应答 0x00 激活SD卡
使用WinHex分析SD卡可以得到第一数据区即根目录区,在第520区,每扇区512字节,等等,分析后得结果用于,读数据的验证。
本SD卡为1G的金士顿卡,扇区宽度为512字节,根据WinHex和读SD卡的结论得出解读,可以得出表一:
读本SD卡的第0块物理扇区512字节, 即常说的引导扇区。
MBR(主引导的区)的长度为446字节(0x00~0x1BD),以后每16个字节代表一个分区,共四个,该卡仅一个分区所以后面三个都是空的,这16个就是分区表:
地址
长度
内容
详解
1BE
1
00
激活则为 00 ,否则80
1BF
1
01
分区起始的磁头号
1C0
2
01 00
起始扇区和柱面号,低6位时扇区号,?????
1C2
1
06
分区类型,0B代表FAT32, 06代表FAT16
1C3
1
29
分区结束的磁头号
1C4
2
7F E0
分区结束的扇区和柱面号
1C6
4
00 00 00 20
地址20由该地址读到内容就是逻辑地址的0扇区
1CA
4
003C 7B E0
分区的总扇区数。493979
由上述分析得出本SD卡的逻辑地址的0扇区应该在隐藏扇区中,块的扇区地址为0读扇区得到的内容:如下图所示:
具体分析如下图所示 :
名称
偏移
长度
内容
详细
BS_jmpBoot
0
3
BUFF[0..2]
一般为EB XX 90 或 E9 xx xx
OEMName
3
8
BUFF[3..A]
仅一个名字。无所谓
每扇区字节数
0B
2
BUFF[B..C]
即0x0200 =512 即每个扇区有512个字节
每簇的扇区数
0D
1
BUFF[D]
即每个簇有(64个)0x40扇区,也就是每个簇有64*512=32k
保留扇区数
0E
2
04 00
从第一扇区开始被保留的扇区数为04
FAT表份数
10
1
02
一般都是两个FAT表。两者宽度一样
根目录项数
11
2
00 02
一般FAT16为512即0x0200
总扇区数TotSec16
13
2
00 00
当容量大于1M时,总扇区数就放在TotSec32处,此处放置0
介质种类
15
1
F8
表示固定存储介质,F0表示移动存储介质
FATSz16
16
2
F2 00
0X00F2表示一个分区占242个扇区共两分区
SecPerTrk
18
2
3F 00
表示每磁道的扇区数。这里不是硬盘,无意义
磁头数
1A
2
无意义
HiddSec
1C
4
0FAT表前隐藏的扇区数32
TotSec32
20
4
0x003C7BE0
该卡的总扇区数,也即该卡的最大容量为0x003C7BE0*512=1981936M
DrvNum
24
1
00
一般硬盘为80 软盘为00
保留
25
1
00
共NT使用,此处必须为0
BootSig
26
1
29
扩展引导标记,表示后面的域可用
VolID
27
4
内容随便,仅一ID
VolLab
2B
11
卷标11个字节,此处NO MAME
FilesysType
36
8
即文件类型,此处为FAT16
可执行代码
3E
448
…….引导分区字节…..
1分区头
1BE
-
无
1BF
-
1C0
-
1C2
-
1C3
-
1C4
-
1C6
-
1CA
-
2分区
1CE
-
结构同上
签名
1FE
2
55 AA
结束标志
分析得出主目录所在扇区地址:
主引导区数(1个) + 保留扇区数(0x04个) + 隐藏数(0x20个)+2个 FAT表宽度(0Xf2*2)=521,即从第521个扇区(扇区地址为520)开始的32个扇区中存放根目录。
读本SD卡的根目录的第一个扇区得出如图数据:
本卡卷标名为UJNX,可见第一个32字节的文件为该根目录,但是他以文件夹的形式呈现,并且大小Size为0,在大多数正常情况下我们可以认为无后缀名的,大小为零的文件为文件夹(我知道这个并不科学,谁有好的建议?)。可以看出32个扇区的根目录最多可以存储512个目录文件。文件就简单了,直接根据FAT表簇的地址读数据就是了。
读FAT表:
在FAT表中每两个字节的数据对应唯一的一个簇地址,每个簇有64个扇区,例如在第一个(地址为0x24)FAT表的第一个扇区中的数据如下:
读文件
1、根据32字节的目录获取文件名、类型、大小、起始簇的地址
2、
文档评论(0)