你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SD卡+FATFS文件系统下挂载失败问题分析

[复制链接]
无敌小河马 提问时间:2024-5-8 15:22 / 已解决

运行环境: STM32H723+TCP服务端+SDMMC+FATFS文件系统+其它

SD卡挂载卸载方式:MCU运行后通过网口发送命令到MCU对SD卡进行挂载和卸载

问题现象: 将SD卡移除后使用挂载命令出现失败(正常),插上SD卡后继续使用挂载命令还是挂载失败(不正常)

问题分析: 一旦挂载失败,后续无法继续挂载,可能和挂载失败的第一次有关,寻找第一次挂载出现了什么。

由于第一次挂载失败是因为没有插SD卡,这个时候必然会挂载失败。挂载SD卡属于FATFS文件系统的操作,但是在挂载时它会调用底层的驱动,用来初始化底层驱动SD卡的硬件外设及SD卡。

对比有SD卡正常挂载、无SD卡失败挂载、然后插上SD卡的失败挂载三种情况下的disk和hsd1全局变量的变化及差异。

正常挂载时,无问题

无卡挂载失败时,在执行errorstate = SD_PowerON(hsd)函数返回错误,后续代码全部跳出不执行,且hsd->ErrorCode被置为错误代码HAL_SD_ERROR_UNSUPPORTED_FEATURE,0x10000000。

失败后插卡重新挂载时,在执行if (HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK)时出错,跳转进去进一步分析,发现:

if (hsd->ErrorCode != HAL_SD_ERROR_NONE)

{

/ Clear all the static flags /

__HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS);

status = HAL_ERROR; }

该代码判断到了在无卡挂载时保存的错误代码,导致HAL_SD_ConfigWideBusOperation返回了HAL_ERROR错误,最终导致初始化报错,无法继续执行后续的初始化及文件系统挂载。

所以,在进行HAL_SD_Init前将hsd1.ErrorCode错误信息清除在进行后续的初始化操作即可。

hsd1.ErrorCode = 0;

/ HAL SD initialization /

sd_state = HAL_SD_Init(&hsd1);

同时,发现在调用底层初始化时做了个判断,初始化过后不在进行初始化,这样就会出现一个问题,如果SD卡插拔了,下次挂载就要初始化SD卡,所以这个逻辑改为,初始化成功就置一initialized,否则清零initialized

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;

}

改为

DSTATUS disk_initialize (BYTE pdrv) / Physical drive nmuber to identify the drive /

{

DSTATUS stat = RES_OK;

stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);

if(stat == 0) disk.is_initialized[pdrv] = 1;

else disk.is_initialized[pdrv] = 0;

return stat;

}

1 收藏 评论4 发布时间:2024-5-8 15:22

举报

4个回答
无敌小河马 回答时间:2024-5-8 15:24:14

有SD卡挂载成功时的disk和hsd1

4856d78f04f102cbc63ab17c9094d29.png

无敌小河马 回答时间:2024-5-8 15:25:19

无SD卡挂载失败时的disk和hsd1对比挂载成功时的变量

cd1ff55ed8d05ac6e1d9788096c0738.png

无敌小河马 回答时间:2024-5-8 15:26:45

插卡后任然挂载失败的disk和hsd1对比挂载成功时的变量

dda2fdd9114d5fdd0993ea2743056ec.png

无敌小河马 回答时间:2024-5-8 15:29:06

其它挂载方面的问题暂时没有发现。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版