Cube+SDIO+FATFS使用时SD卡读块卡死

2019-07-14 15:47发布

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
dull20112011
1楼-- · 2019-07-14 18:28
吕少大大
2楼-- · 2019-07-14 22:50
dull20112011 发表于 2018-11-23 06:45
参考 http://www.stmcu.org/module/forum/thread-604576-1-1.html
,看能不能帮助你...

这个贴我看过,只是讲SD卡读写的基本操作。这部分操作我已经实现,包括FATFS对文件的读和写操作。
而且已经实现文件的读取,创建,写入,保存,删除等操作。

我遇到的问题是:很容易卡死在上面贴出的那两行代码中。
dull20112011
3楼-- · 2019-07-14 23:08
 精彩回答 2  元偷偷看……
吕少大大
4楼-- · 2019-07-15 04:17
本帖最后由 adlu 于 2016-3-30 18:22 编辑

问题已解决。
吕少大大
5楼-- · 2019-07-15 05:08
本帖最后由 adlu 于 2016-3-30 18:23 编辑

已经解决。
CubeMX生成的代码SDIO polling模式可能真的有问题。
配置SDIO使用DMA模式,SDIO_RX和SDIO_TX配置相同。


生成代码,然后需要手动修改部分代码。
1.如果是用CubeMX 4.11及更早版本的,要修改stm32f4xx_hal_msp.c中HAL_SD_MspInit( )函数的两个DMA配置参数,将DMA_NORMAL改为DMA_PFCTRL。

2.修改sd_diskio.c中SD_read( )和SD_write( )函数,
分别将BSP_SD_ReadBlocks( )改为BSP_SD_ReadBlocks_DMA( );
将BSP_SD_WriteBlocks( )改为BSP_SD_WriteBlocks_DMA( ).

3.全局搜索SdTransferCplt变量,找到while(hsd->SdTransferCplt == 0)这个语句并屏蔽,否则会卡死在词句,我也不知道为什么。

经过上述步骤,就可以顺利的使用SDIO DMA功能进行SD卡读写了。
配合CubeMX生成的FATFS架构,就可以进行SD卡的文件操作了。目前未发现其他问题。
60user12
6楼-- · 2019-07-15 09:50
估计F103可以用来参考。先谢谢经验分享!

一周热门 更多>