SD卡读写开发文档.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档