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

[复制链接]
2001|0
 楼主| swordlife 发表于 2009-1-17 12:27 | 显示全部楼层 |阅读模式
这些天在uC/FS下移植了ZLG/SD的SPI接口方式的驱动程序。移植成功,能够对某些SD卡进行新建文件等操作。发现一个关于某些SD卡有时候无法识别的问题,百思不得其解,特地请教各位。<br />故障现象出现过程描述:<br />1.&nbsp;用移植成功之后的程序,在SmartARM2200开发板上对照相机用的大的SD卡进行新建文本文件操作,成功!<br />2.&nbsp;用同一张SD卡在移植成功的操作系统之上,使用_FS_FAT_AutoFormat()函数进行格式化,格式化进行3分钟之后强行拔出。<br />3.&nbsp;用“读卡器”将未格式化完毕的SD卡和PC机相连,在DOS状态下,用Format命令重新格式化为FAT32格式。<br />4.&nbsp;重新插入SmartARM2200开发板,使用程序新建文件等操作失败。追踪程序发现,读取SD卡0扇区数据以后,计算偏移量之后读取BPB数据时候超出了卡的地址范围导致出错。<br />5.&nbsp;将SD卡驱动程序中的修改如下:(就是将计算偏移量的语句注释掉)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Calculate&nbsp;start&nbsp;sector&nbsp;of&nbsp;the&nbsp;first&nbsp;partition&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_FS_mmc_logicalstart[Unit]=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//_FS_mmc_logicalstart[Unit]&nbsp;&nbsp;=&nbsp;_FS_mmc_mbrbuffer[0x1c6];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;_FS_mmc_logicalstart[Unit]&nbsp;+=&nbsp;(0x100UL&nbsp;*&nbsp;_FS_mmc_mbrbuffer[0x1c7]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;_FS_mmc_logicalstart[Unit]&nbsp;+=&nbsp;(0x10000UL&nbsp;*&nbsp;_FS_mmc_mbrbuffer[0x1c8]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;_FS_mmc_logicalstart[Unit]&nbsp;+=&nbsp;(0x1000000UL&nbsp;*&nbsp;_FS_mmc_mbrbuffer[0x1c9]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FS_LBL_MEDIACHANGED;<br /><br />6.&nbsp;编译通过,调试。发现又能够正确对SD卡新建文件等操作了。<br />7.&nbsp;SD卡反复在PC机上用FAT32、FAT16格式化之后,再在SmartARM2200上依然能够正常新建文件等操作。<br />8.&nbsp;&nbsp;在以上的程序基础上,对Mini&nbsp;SD卡(已经格式化为FAT16)格式,读取扇区0的内容和读大的SD卡扇区0的内容完全不同。<br /><br />我的疑问:<br />1.&nbsp;为什么有时候驱动程序里面要计算BPB的偏移量,有些驱动程序里面不要计算呢?(是同一张SD卡,只是对他进行了一次未完成的格式化动作)<br />2.&nbsp;大封装的SD卡和Mini&nbsp;SD卡之间有什么差异呢?<br /><br />-----备注:<br />1.&nbsp;大的SD卡是SanDisk的&nbsp;Ultra&nbsp;1GB的<br />2.&nbsp;MiniSD卡是SanDisk的1GB&nbsp;microSD。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

51

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部