STM32/STM8技术论坛
直播中

周丽

7年用户 233经验值
私信 关注
[问答]

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

回帖(17)

凌流浪

2018-11-23 08:55:45

找到while(hsd->SdTransferCplt == 0)这个语句并屏蔽....

你的SDIO global interrupt的优先级是多少? SDIO的Tx,Rx的DMA的中断优先级又是多少?

我也碰到你的问题,但我将SDIO global interrupt的优先级设置为小于或等于SDIO的Tx,Rx的DMA的中断优先级后,问题好像解决了。
举报

李云生

2018-11-23 09:06:58
参考 http://www.stmcu.org/module/forum/thread-604576-1-1.html
,看能不能帮助你...
举报

周丽

2018-11-23 09:12:47
引用: dull20112011 发表于 2018-11-23 06:45
参考 http://www.stmcu.org/module/forum/thread-604576-1-1.html
,看能不能帮助你...

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

我遇到的问题是:很容易卡死在上面贴出的那两行代码中。
举报

李云生

2018-11-23 09:21:33
明白,好像是什么状态不满足时卡死了,有没有可能是硬件原因,如信号不稳定等...
举报

周丽

2018-11-23 09:29:12
本帖最后由 adlu 于 2016-3-30 18:22 编辑

问题已解决。
举报

周丽

2018-11-23 09:43:16
本帖最后由 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卡的文件操作了。目前未发现其他问题。
举报

晁莹

2018-11-23 09:55:14
估计F103可以用来参考。先谢谢经验分享!
举报

蔡表胤

2018-11-23 10:12:36
按照您的方法没有解决呢
举报

张志诚

2018-11-23 10:24:10
谢谢分享!!!
举报

周丽

2018-11-23 10:30:19
引用: 充电搜索 发表于 2018-11-23 06:34
找到while(hsd->SdTransferCplt == 0)这个语句并屏蔽....

你的SDIO global interrupt的优先级是多少? SDIO的Tx,Rx的DMA的中断优先级又是多少?

谢谢分享.
可能就是优先级的问题。CubeMX里面没有任何提示,或者自动设定这两个优先级的高低,所以只有自己试错才能知道。
举报

张桂芝

2018-11-23 10:49:38
明白,好像是什么状态不满足时卡死了,有没有可能是硬件原因,如信号不稳定等
举报

李天氍

2018-11-23 10:58:56
举报

蔡表胤

2018-11-23 11:10:54
按照楼上的方法改过系统优先级后DMA传输就可以了。
举报

逯荣荣

2018-11-23 11:16:23
弄了好久都每成功,你们有没有代码啊
举报

刘庸宏

2018-11-23 11:27:49
谢谢分享经验!!!
举报

毕凯

2018-11-23 11:46:49
mark一下,项目中可能会用到。
举报

lee_st

2018-11-23 13:18:29
没有响应
举报

更多回帖

发帖
×
20
完善资料,
赚取积分