| 
 
| 这些天在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卡9扇区数据以后,计算偏移量之后读取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。
 | 
 |