本帖最后由 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;
}
求救啊,哪位有调试通的例程分享学习一下,万分感谢!
求救啊,哪位有调试通的例程分享学习一下,万分感谢!
求救啊,哪位有调试通的例程分享学习一下,万分感谢!
|