完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
运行环境: 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个回答
|
|
要解决STM32H723 SD卡挂载失败的问题,我们可以分为以下几个步骤:
1. 确保硬件连接正确:首先检查STM32H723与SD卡之间的硬件连接是否正确,包括数据线和电源线。确保SD卡插槽与SD卡的接触良好。 2. 初始化SDMMC驱动:在挂载SD卡之前,确保已经正确初始化了SDMMC驱动。这包括配置SDMMC时钟、电源、命令和数据线路等。 3. 检查SD卡检测机制:确保在挂载SD卡之前,已经正确实现了SD卡检测机制。这可以通过检测SD卡插入时的信号或者使用外部中断来实现。当检测到SD卡插入时,再进行挂载操作。 4. 重置SD卡状态:在挂载失败后,尝试重置SD卡的状态。这可以通过发送SDMMC的CMD0命令(GO_IDLE_STATE)来实现。这样可以确保SD卡处于初始状态,便于后续操作。 5. 重新初始化SD卡:在重置SD卡状态后,重新初始化SD卡。这包括发送SDMMC的ACMD41命令(SEND_OP_COND)来设置SD卡的电压范围和频率,以及发送CMD2(ALL_SEND_CID)和CMD3(SEND_RELATIVE_ADDR)命令来获取SD卡的CID和RCA。 6. 重新挂载SD卡:在完成SD卡初始化后,再次尝试挂载SD卡。此时,如果硬件连接和驱动配置正确,挂载操作应该可以成功。 7. 调试和日志记录:如果问题仍然存在,建议添加调试信息和日志记录,以便更好地了解问题所在。这可以帮助你发现潜在的问题,例如驱动配置错误、硬件故障等。 8. 考虑使用其他方法:如果以上方法都无法解决问题,可以考虑使用其他方法来挂载SD卡,例如使用不同的驱动库或者更换SD卡。 通过以上步骤,你应该能够解决STM32H723 SD卡挂载失败的问题。如果问题仍然存在,请仔细检查硬件连接和驱动配置,或者寻求专业人士的帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:19 , Processed in 0.747809 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号