打印

GD32用SDIO在SD卡中创建FATFS文件系统新建txt文件并读写其内...

[复制链接]
1787|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 ywd_Linux 于 2021-5-20 13:45 编辑

求救各位大神,我在用GD32F450,想在SD卡里新建一个txt格式的文件保存一些数据,使用官方例程的SDIO通道,移植2个版本步骤差不多,结果都是能初始化正常,延时f_mount(&fs,"0:",0);可通过,返回0 ( 但f_mount(&fs,"0:",1);这样写就会程序卡死)。  然后通过后创建文件就卡死,求救啊,哪位有调试通的例程分享学习一下,万分感谢!main()
{
   sd_error = sd_config();           //内包含sd_init();              函数初始化卡等,获取卡信息,配置总线模式和传输模式
   card_info_get();                              //将获取的卡信息打印到调试串口
   Fstate=f_mount(&fs,"0:",0);
        if(Fstate == FR_OK)
        {
                 printf("SD card mount ok!\r\n");
        }
        else
        {
                 printf("SD card mount error, error code:%d.\r\n",Fstate);
        }

   /*以上打印结果都正常,卡片信息大小块之类的都可以打印*/
   Fstate = f_open(&fil, filename, FA_CREATE_ALWAYS | FA_WRITE);    // 这里会卡死
   printf("05191541 f_open Fstate = %d \r\n",Fstate);                         // 这句打印因为f_open卡死,不会被打印

}

在线断点看了一下卡住的位置,f_open() 函数中调用 --> find_volume() 函数里
        //这个if判断进不去
        if (fs->fs_type) {                                        /*如果卷已装入 If the volume has been mounted */
                stat = disk_status(fs->drv);
                if (!(stat & STA_NOINIT)) {                /* and the physical drive is kept initialized */
                        if (!_FS_READONLY && mode && (stat & STA_PROTECT)) {        /* Check write protection if needed */
                                return FR_WRITE_PROTECTED;
                        }
                        return FR_OK;                                /* The file system object is valid */
                }
        }

       /* 以下代码尝试装入卷(分析BPB并初始化fs对象) Following code attempts to mount the volume.  */

        fs->fs_type = 0;                                        /* Clear the file system object */
        fs->drv = LD2PD(vol);                           /* Bind the logical drive and a physical drive */
       stat = disk_initialize(fs->drv);        /* Initialize the physical drive */
        if (stat & STA_NOINIT) {                   /* Check if the initialization succeeded */
                return FR_NOT_READY;                    /* Failed to initialize due to no medium or hard error */
        }
        if (!_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check disk write protection if needed */
                return FR_WRITE_PROTECTED;
        }


会卡死在 stat = disk_initialize(fs->drv);这个函数里
DSTATUS disk_initialize (
        BYTE pdrv                                /* Physical drive nmuber to identify the drive */
)
{
   DSTATUS stat = RES_OK;

     if(disk.is_initialized[pdrv] == 0)
    {
       disk.is_initialized[pdrv] = 1;
         
       stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);              //就是这里卡死,找不到原因,愁人
     }
  return stat;
}




求救啊,哪位有调试通的例程分享学习一下,万分感谢!
求救啊,哪位有调试通的例程分享学习一下,万分感谢!
求救啊,哪位有调试通的例程分享学习一下,万分感谢!

使用特权

评论回复
沙发
lxz1986| | 2022-4-21 18:36 | 只看该作者
我擦,我这两天也在研究这个问题。卡在那里,然后报硬件故障。

使用特权

评论回复
板凳
lidi911| | 2022-4-21 20:05 | 只看该作者
来来来,等待版主大大解答。

使用特权

评论回复
地板
ywd_Linux|  楼主 | 2022-5-24 14:35 | 只看该作者
后来问题解决了,我用的卡64G容量太大,目前换成8G可以正常运行。貌似识别卡容量好像跟代码协议的版本有关系

使用特权

评论回复
5
alexz2008| | 2022-5-28 18:23 | 只看该作者
楼主用的官方哪个例程呀? 我用官方的SDIO例程遇到问题,卡死在sd_bus_mode_config了,不知道怎么解决

使用特权

评论回复
6
alexz2008| | 2022-5-28 22:38 | 只看该作者
楼主,我用的是8G卡,也卡死在f_open里同样的地方,为啥呀

使用特权

评论回复
7
alexz2008| | 2022-5-29 00:06 | 只看该作者
alexz2008 发表于 2022-5-28 22:38
楼主,我用的是8G卡,也卡死在f_open里同样的地方,为啥呀

解决了,原来是我fatfs的diskio里没改完整

使用特权

评论回复
评论
HAPPYEVER 2022-10-18 17:01 回复TA
diskio哪里需要改呀? 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

17

帖子

0

粉丝