关于FATFS 读SDHC的问题

2010年05月28日 15:27    发布者:chichu9825
我在STM32上移植了一个FATFS R0.07c的文件系统,一直工作正常,手里的两个SD卡都没问题。昨天我买了一个新的SD卡,发现识别不出来。
检查一番发现,我的两张卡,都是2G的,一张V1.1的 ,一张V2.0,而新的是2.0SDHC的。
我在PC机上对这张卡进行了几次格式化,也是同样的现象。

我跟踪代码发现:返回错误的地方在auto_mount 里调用的 check_fs函数

if (LD_WORD(&fs->win) != 0xAA55){  /* Check record signature (always placed at offset 510 even if the sector size is >512) */
  return 2;
}

这里返回的如果是0xAA55
但现在却不是
哪位兄弟知道是怎么回事,请告诉一下,谢谢了
----------------------------------------------------------------------------------------------
disk_read(fs->drive, fs->win, sect, 1)

fs->win;
fs->win;
第一次读出来的是55AA
第二次就是0000,
这是啥问题呢
----------------------------------------------------------------------------------------------
关于这个问题,到现在为止,我把问题范围缩小了一些,
文件系统挂载时,先读第一个扇区MBR和DPT,这一步,我手头所有的卡都能得到数据。
下一步,文件系统要根据DPT的第一分区的一道信息去读DBR
没问题的卡,都能都会正确的信息,在510和511位置 为0xAA和0x55
但出问题的SDHC卡,读回来的就是一个空白的数据包

我肯定怀疑DBR的位置不对,
另外2张卡 DBR的地址分别为0x000000F3 和  0x00000087
我两张出问题的SDHC 卡,DBR的地址都是 0x00002000

卡我都在PC上多次格式化了,拷贝删除都没问题。

我对这方面的知识只是一知半解,边学边干,哪个同学能看出问题在哪,请多多指教,我会不断把我的进展添加上来,解决了以后,也能让后来者看个详细的过程,少走弯路吧。

网友评论

chichu9825 2010年06月02日
问题已解决,在于SD1.1   SD2.0   SDHC  三种卡的引导区位置不同,导致读取的数据错误。写驱动,必须要亲自看一遍手册,我就是图快,移植的代码没有经过研究。
zealot 2010年06月02日
解决了就好,可惜没人能赚到分了。
ankwyq 2012年02月12日
LZ能不能详细说明下解决方法?
6796375 2012年02月12日
:)
wall_e 2012年07月24日
楼主有sdhc手册不,上传一个给我看看