打印
[ZLG-ARM]

uC/FS移植之后对SD卡识别异常的情况咨询[求助]

[复制链接]
1557|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
swordlife|  楼主 | 2009-1-17 12:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这些天在uC/FS下移植了ZLG/SD的SPI接口方式的驱动程序。移植成功,能够对某些SD卡进行新建文件等操作。发现一个关于某些SD卡有时候无法识别的问题,百思不得其解,特地请教各位。
故障现象出现过程描述:
1. 用移植成功之后的程序,在SmartARM2200开发板上对照相机用的大的SD卡进行新建文本文件操作,成功!
2. 用同一张SD卡在移植成功的操作系统之上,使用_FS_FAT_AutoFormat()函数进行格式化,格式化进行3分钟之后强行拔出。
3. 用“读卡器”将未格式化完毕的SD卡和PC机相连,在DOS状态下,用Format命令重新格式化为FAT32格式。
4. 重新插入SmartARM2200开发板,使用程序新建文件等操作失败。追踪程序发现,读取SD卡0扇区数据以后,计算偏移量之后读取BPB数据时候超出了卡的地址范围导致出错。
5. 将SD卡驱动程序中的修改如下:(就是将计算偏移量的语句注释掉)
       /* Calculate start sector of the first partition */
       _FS_mmc_logicalstart[Unit]=0;
       //_FS_mmc_logicalstart[Unit]  = _FS_mmc_mbrbuffer[0x1c6];
      // _FS_mmc_logicalstart[Unit] += (0x100UL * _FS_mmc_mbrbuffer[0x1c7]);
      // _FS_mmc_logicalstart[Unit] += (0x10000UL * _FS_mmc_mbrbuffer[0x1c8]);
      // _FS_mmc_logicalstart[Unit] += (0x1000000UL * _FS_mmc_mbrbuffer[0x1c9]);
       return FS_LBL_MEDIACHANGED;

6. 编译通过,调试。发现又能够正确对SD卡新建文件等操作了。
7. SD卡反复在PC机上用FAT32、FAT16格式化之后,再在SmartARM2200上依然能够正常新建文件等操作。
8.  在以上的程序基础上,对Mini SD卡(已经格式化为FAT16)格式,读取扇区0的内容和读大的SD卡扇区0的内容完全不同。

我的疑问:
1. 为什么有时候驱动程序里面要计算BPB的偏移量,有些驱动程序里面不要计算呢?(是同一张SD卡,只是对他进行了一次未完成的格式化动作)
2. 大封装的SD卡和Mini SD卡之间有什么差异呢?

-----备注:
1. 大的SD卡是SanDisk的 Ultra 1GB的
2. MiniSD卡是SanDisk的1GB microSD。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

51

帖子

0

粉丝