这些天在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。 |