打印

SDIO—FatFs移植与读写测试 问题

[复制链接]
202|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
棋王高手|  楼主 | 2019-10-31 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//在外部SD卡挂载文件系统,文件系统挂载时会对SDIO设备初始化
        res_sd = f_mount(&fs,"0:",1);
        
/*----------------------- 格式化测试 ---------------------------*/  
        /* 如果没有文件系统就格式化创建创建文件系统 */
        if(res_sd == FR_NO_FILESYSTEM)
        {
                printf("》SD卡还没有文件系统,即将进行格式化...\r\n");
    /* 格式化 */
                res_sd=f_mkfs("0:",0,0);                                                        
               
                if(res_sd == FR_OK)
                {
                        printf("》SD卡已成功格式化文件系统。\r\n");
      /* 格式化后,先取消挂载 */
                        res_sd = f_mount(NULL,"0:",1);                        
      /* 重新挂载        */                        
                        res_sd = f_mount(&fs,"0:",1);
                }
                else
                {
                        LED_RED;
                        printf("《《格式化失败。》》\r\n");
                        while(1);
                }
        }
  else if(res_sd!=FR_OK)
  {
    printf("!!SD卡挂载文件系统失败。(%d)\r\n",res_sd);
    printf("!!可能原因:SD卡初始化不成功。\r\n");
                while(1);
  }
  else
  {
    printf("》文件系统挂载成功,可以进行读写测试\r\n");
  }



然后查看 f_mount 函数 如下
FRESULT f_mount (
        FATFS* fs,                        /* Pointer to the file system object (NULL:unmount)*/
        const TCHAR* path,        /* Logical drive number to be mounted/unmounted */
        BYTE opt                        /* 0o not mount (delayed mount), 1:Mount immediately */
)
{
        FATFS *cfs;
        int vol;
        FRESULT res;
        const TCHAR *rp = path;


        vol = get_ldnumber(&rp);
        if (vol < 0) return FR_INVALID_DRIVE;
        cfs = FatFs[vol];                                        /* Pointer to fs object */

        if (cfs) {
#if _FS_LOCK
                clear_lock(cfs);
#endif
#if _FS_REENTRANT                                                /* Discard sync object of the current volume */
                if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR;
#endif
                cfs->fs_type = 0;                                /* Clear old fs object */
        }

        if (fs) {
                fs->fs_type = 0;                                /* Clear new fs object */
#if _FS_REENTRANT                                                /* Create sync object for the new volume */
                if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR;
#endif
        }
        FatFs[vol] = fs;                                        /* Register new fs object */

        if (!fs || opt != 1) return FR_OK;        /* Do not mount now, it will be mounted later */

        res = find_volume(&fs, &path, 0);        /* Force mounted the volume */
        LEAVE_FF(fs, res);

}
f_mount 函数返回值没有 FR_NO_FILESYSTEM




/*----------------------- 格式化测试 ---------------------------*/  
        /* 如果没有文件系统就格式化创建创建文件系统 */
        if(res_sd == FR_NO_FILESYSTEM)
        {
                printf("》SD卡还没有文件系统,即将进行格式化...\r\n");
    /* 格式化 */
                res_sd=f_mkfs("0:",0,0);                                                        
               
                if(res_sd == FR_OK)
                {
                        printf("》SD卡已成功格式化文件系统。\r\n");
      /* 格式化后,先取消挂载 */
                        res_sd = f_mount(NULL,"0:",1);                        
      /* 重新挂载        */                        
                        res_sd = f_mount(&fs,"0:",1);
                }
                else
                {
                        LED_RED;
                        printf("《《格式化失败。》》\r\n");
                        while(1);
                }
        }



所以我觉得这个if(res_sd == FR_NO_FILESYSTEM) 判断函数在main中没有作用? 大家怎么看

使用特权

评论回复

相关帖子

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

本版积分规则

378

主题

378

帖子

0

粉丝