check_fs(fs, bsect)读扇区问题

2019-08-14 06:01发布

我的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....
大神帮分析一下


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-08-14 06:30
 精彩回答 2  元偷偷看……
lincolne
2楼-- · 2019-08-14 08:54
昨晚看了 发现了问题是第一次调用读扇区函数,
// 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对写驱动程序是否有区别?



感谢原子的帮助!
lincolne
3楼-- · 2019-08-14 13:23
回复【2楼】正点原子:
---------------------------------
这个问题“1,逻辑扇区在物理扇区的8192扇区,通过winhex找到的,程序里哪里能获得这个偏移量信息 ”刚才找到答案了,怪自己没研究仔细,物理第一个扇区有偏移值....
其他问题还是不明白
lincolne
4楼-- · 2019-08-14 16:54
回复【2楼】正点原子:
---------------------------------
看来坛里的一些帖子,发现自己理解错了很多东西,收货很多,现在最不懂的是什么时候需要sector = sector<<9; 我看你的程序里面也都有address<<9,是扇区转换为字节地址?如果为CARDTYPE_SDV2HC就不用转换了吗?为什么?
lincolne
5楼-- · 2019-08-14 21:23
原理SDHC是以块寻址,sd以字节寻址....
lincolne
6楼-- · 2019-08-15 02:15
 精彩回答 2  元偷偷看……

一周热门 更多>