OpenEdv-开源电子网

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

SD卡读取问题

[复制链接]

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
发表于 2012-3-8 19:09:58 | 显示全部楼层 |阅读模式
8G的 SD卡格式化成FAT32系统,每扇区512字节,每镞64扇区。
用winhex打开之后




保留区所占大小应该是4464扇区。
然后我读SD卡第4464扇区,读出来的内容是FAT表1的内容吗?
为什么我读出来全是0呢???
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-8 19:46:50 | 显示全部楼层
回复【楼主位】hongdan0714jin:
---------------------------------
用WinHex是可以看FAT表的内容的哦,对比一下就知道了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
 楼主| 发表于 2012-3-8 20:26:43 | 显示全部楼层


 回复【2楼】Pony279:
---------------------------------
FAT表看过了。。。
我写了一个测试文件进去的,不是全0啊。。。
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
 楼主| 发表于 2012-3-8 21:47:21 | 显示全部楼层
SD卡是V2.0HC版本的。。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-8 22:17:22 | 显示全部楼层
那先试试读第0扇区吧 先确定不是读函数本身的问题
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-8 22:22:03 | 显示全部楼层
另外你的卡的第0扇区是MBR还是DBR的?
如果DBR不是在第0扇区,还要加上一个偏移量的。 

我的程序是这样初始化的
 //初始化FAT1_address
 p_fat32->FAT1_address = DBR_sector +                 //DBR_sector DBR的扇区地址
     GetWord_S(DBR_buffer, 0x0e);//保留扇区数
https://github.com/roxma
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2012-3-8 23:02:58 | 显示全部楼层
回复【楼主位】hongdan0714jin:
---------------------------------
先确定有无MBR,如果没有MBR,则DBR就位于扇区0.
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-8 23:20:11 | 显示全部楼层
以前我手上两个SD卡都是有MBR的,然后参考前人写过的代码做初始化,
一直用着没问题,
直到后来调试新加的写文件的功能的时候,破坏了SD卡上的文件系统,然后格式化,
MBR就没了,紧接着就是我的文件系统初始化出了问题了,这一个问题搞了我一天。。。
在那之前我还一直以为,一定会有MBR而且是在0扇区的。。。
https://github.com/roxma
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
 楼主| 发表于 2012-3-9 14:05:25 | 显示全部楼层


 回复【8楼】Pony279:
---------------------------------
读取的0扇区数据。。。
看到某个资料上说,前446字节是引导代码。
接下来64个字节是分区表项。。。

是不是说SD卡插在电脑上时就需要引导扇区,用单片机直接操作时就不需要引导扇区,所以那446个字节数据都是0.。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-3-9 14:20:21 | 显示全部楼层
回复【9楼】hongdan0714jin:
---------------------------------
对SD卡,很多都是没有这个的.
只有分区表.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
 楼主| 发表于 2012-3-9 15:08:07 | 显示全部楼层


 回复【7楼】螃蟹爱虫:
---------------------------------
这是从第8192扇区,就是根目录起始扇区(见一楼图)读回来的的数据,为什么和winhex查看的引导扇区数据一样?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-9 21:39:27 | 显示全部楼层
回复【9楼】hongdan0714jin:
---------------------------------
我记得DBR 前面的部分还有个 MSDOS5.0 来着...

如果读0扇区和winhex读的对比不一样,说明你的读函数已经有问题了。
https://github.com/roxma
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
 楼主| 发表于 2012-3-9 21:51:21 | 显示全部楼层
回复【12楼】Pony279:
---------------------------------
 MBR,全称为Master Boot Record,即硬盘的主引导记录。 
  为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。 
硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk artition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。



上面是摘录,读0扇区前面446字节全0,只有64字节的分区表和55aa。(见7楼)
从分区表上找到DBR读出来就是10楼的数据,和1楼用winhex看到的1样。。。
winhex看到的数据是从DBR开始的。。。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-9 22:05:46 | 显示全部楼层
回复【13楼】hongdan0714jin:
---------------------------------
既然你有MBR,

那么FAT1的地址应该是DBR的地址加上保留扇区数吧?

楼主位的 "然后我读SD卡第4464扇区" 不能直接读到FAT1的。
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-3-9 22:10:00 | 显示全部楼层

回复【13楼】 hongdan0714jin :
---------------------------------
"winhex看到的数据是从DBR开始的。。。"

 用winhex查看MBR时要打开物理磁盘,查看DBR时要打开逻辑驱动器


 

https://github.com/roxma
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

限制会员

积分
-44
金钱
-44
注册时间
2011-9-6
在线时间
0 小时
 楼主| 发表于 2012-3-9 22:30:55 | 显示全部楼层
回复【15楼】Pony279:
---------------------------------
哦,搜噶。。。
原来这样啊。。。
让俺纠结那么久。。。
大哥,多谢鸟儿。。。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2012-8-29
在线时间
0 小时
发表于 2012-8-29 19:57:47 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥,请教一个问题,我用SD卡是小卡1GB的,能用你的例说STM32里的驱动程序驱动吗?我现在初始化是可以了,但是其他的就不行了啊,谢谢!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-29 20:34:19 | 显示全部楼层
回复【17楼】10192201:
---------------------------------
用最新代码试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 13:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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