有MBR的SD卡在fatfs系统中如何处理?
RT,当SD卡跑到以下程序就出问题staticBYTEcheck_fs(/*0:TheFATbootrecord,1:ValidbootrecordbutnotanFAT...
RT,当SD卡跑到以下程序就出问题staticBYTE check_fs ( /* 0:The FAT boot record, 1:Valid boot record but not an FAT, 2:Not a boot record, 3:Error */ FATFS *fs, /* File system object */ DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */){ static const char fatstr[] = "FAT"; if (disk_read(fs->drive, fs->win, sect, 1) != RES_OK) /* Load boot record */ return 3; if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55) /* Check record signature (always placed at offset 510 even if the sector size is >512) */ return 2; if (!mem_cmp(&fs->win[BS_FilSysType], fatstr, 3)) /* Check FAT signature */ return 0; if (!mem_cmp(&fs->win[BS_FilSysType32], fatstr, 3) && !(fs->win[BPB_ExtFlags] & 0x80)) return 0; return 1;} 第3,第4个if不能通过,原因是SD卡有MBR区在0扇区,不能写,但系统在0扇区读到 FAT格式的标识,所认出错。但刚接触SD卡的运用,求各位兄弟指点
展开
2013-10-11
展开全部
研究了一个下午,用单扇区读程序查出 "FAT" 标识符在 扇区16中, 扇区0中的DPT查到有标识的扇区不是16, 在程序中 chk_mounted 涵数中 获得 有"FAT"标识扇区地址的指令:if (tbl[4]) { bsect = LD_DWORD(&tbl[8]) } ,经调试发现 bsect = 8192 刚好是512*16于是产生疑问:SDHC的MBR区的定义是不是与其他SD卡的不一样,还有我的SDHC卡是4G的,网上很难找到关于SDHC的存储器资料,且网上学习读取SD卡的教程也是在2G以下的,有什么好资料介绍学习?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询