[应用相关]

有MBR的SD卡在fatfs系统中如何处理?

[复制链接]
1663|1
手机看帖
扫描二维码
随时随地手机跟帖
无脑达人|  楼主 | 2013-9-17 09:31 | 显示全部楼层 |阅读模式
RT,当SD卡跑到以下程序就出问题
static
BYTE 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-9-17 17:33 | 显示全部楼层
研究了一个下午,用单扇区读程序查出 "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以下的,有什么好资料介绍学习?

使用特权

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

本版积分规则

10

主题

68

帖子

1

粉丝