OpenEdv-开源电子网

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

check_fs(fs, bsect)读扇区问题

[复制链接]

2

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-11
在线时间
1 小时
发表于 2012-11-11 22:16:20 | 显示全部楼层 |阅读模式
我的8g sdhc,逻辑首扇区在物理的8192扇区
检测fat系统的时候
check_fs(fs, 0);读回正确数据
下面的
check_fs(fs, 8192);读回的全是0
如果先check_fs(fs, 8192);就能读回正确数据

后来调试发现
check_fs(fs, 8192);//读8192扇区数据
check_fs(fs, 8192);//读8192扇区数据

两句代码挨着,第一次读回数据正确,第二次读回的数据就全是0....
大神帮分析一下


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-11 23:11:56 | 显示全部楼层
跟踪进去check_fs看看,你做了什么操作?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-11
在线时间
1 小时
 楼主| 发表于 2012-11-12 11:25:26 | 显示全部楼层
昨晚看了 发现了问题是第一次调用读扇区函数,
// if ver = SD2.0 HC, sector need <<9
if(CardInfo.CardType != CARDTYPE_SDV2HC)
{
sector = sector<<9;
}
这里没执行,第二次调用的时候这里却执行了,导致第二次读回数据就错误了
除了sd卡初始化,应该没有其他地方对CardInfo.CardType 做改变啊...
现在还有另外个问题是
1,逻辑扇区在物理扇区的8192扇区,通过winhex找到的,程序里哪里能获得这个偏移量信息
2,我的是sandisk 8G SDHC ,属于2.0?或者3.0?你的那个驱动程序里没有对3.0的判断,3.0和2.0对写驱动程序是否有区别?



感谢原子的帮助!
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-11
在线时间
1 小时
 楼主| 发表于 2012-11-12 11:55:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这个问题“1,逻辑扇区在物理扇区的8192扇区,通过winhex找到的,程序里哪里能获得这个偏移量信息 ”刚才找到答案了,怪自己没研究仔细,物理第一个扇区有偏移值....
其他问题还是不明白
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-11
在线时间
1 小时
 楼主| 发表于 2012-11-12 16:54:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
看来坛里的一些帖子,发现自己理解错了很多东西,收货很多,现在最不懂的是什么时候需要sector = sector<<9; 我看你的程序里面也都有address<<9,是扇区转换为字节地址?如果为CARDTYPE_SDV2HC就不用转换了吗?为什么?
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-11
在线时间
1 小时
 楼主| 发表于 2012-11-12 17:11:11 | 显示全部楼层
原理SDHC是以块寻址,sd以字节寻址....
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-11
在线时间
1 小时
 楼主| 发表于 2012-11-12 19:17:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
找到原因是堆栈溢出导致CardInfo.CardType错误...在读扇区的时候溢出的,改了这个Stack_Size      EQU     0x00000800就好了

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-12 21:12:48 | 显示全部楼层
回复【7楼】lincolne:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2013-12-13 00:44:38 | 显示全部楼层
感谢楼主分享
学无止境
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-4-25
在线时间
19 小时
发表于 2017-8-24 15:46:40 | 显示全部楼层
表示感谢,我他妈也被纠结了一天多,还好看到你的帖子,弱弱问一下你是怎么查出来的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 16:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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