最近在使用ST的HAL库开发项目,在调试过程中,花费了我几个昼夜,终于发现问题不在我代码上,是ST的库有一点点问题,可能是ST芯片涉及的底层驱动、接口太多了,技术人员也不能一一验证吧。直接贴问题代码吧。! B* r: l+ X- c5 _9 u A 8 @/ I) X! L& T7 Q STM32_CUBE F4V1.18.0/ R' H: n r7 b 文件:stm32f4xx_ll_sdmmc.c L1468,原来这段代码应该是有问题的,超时标志,居然清EMDREND标志,那接下来的那条指令很可能直接超时了。 if(__SDIO_GET_FLAG(SDIOx, SDIO_FLAG_CTIMEOUT))1 E4 Y. s# t" {* \) }2 G {. g0 i7 Z; X% \6 |4 I /* Card is SD V2.0 compliant */$ x) [ g" G: w __SDIO_CLEAR_FLAG(SDIOx, SDIO_FLAG_CTIMEOUT); //LDS原代码:__SDIO_CLEAR_FLAG(SDIOx, SDIO_FLAG_CMDREND); ) T- f, \: |& z5 i' v. Y return SDMMC_ERROR_CMD_RSP_TIMEOUT; } * X, r2 T' p, L2 A* ^$ @ 文件:stm32f4xx_hal_sd.c,L2547,增加一条CMD55指令,解决问题:某些SDSC卡无法初始化识别。在CMD8后的第一条CMD55指令的R1回应会置位_ILLEGAL_CMD,造成初始化程序返回,无法初始化SDSC卡,先加发一条CMD55,只对超时位判断, 如果超时就是MMC,否则发ACMD41。进入后续操作* }: ]( z- R- [$ s) o2 L/ X 0 _8 z5 M p8 d9 _ errorstate = SDMMC_CmdOperCond(hsd->Instance);" A9 i3 ~; |* L }- z if(errorstate != HAL_SD_ERROR_NONE) {6 B3 h% |3 C1 y2 G* T- D hsd->SdCard.CardVersion = CARD_V1_X; /********************* LDS:********************************// P3 U. d! t( R# f+ D+ S6 d /* 增加以下代码,某些SDSC卡,在CMD8后的第一条CMD55指令 * 的R1回应会置位_ILLEGAL_CMD,如果超时就是MMC卡 */ + e$ U+ d( y. i6 t( d8 c. Y7 E errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0U); if(errorstate == SDMMC_ERROR_CMD_RSP_TIMEOUT) //MMC¿¨ * F- D8 z. a3 f- }: N {3 u7 b) i, M" h/ F$ c8 J" @. U! T2 [ return HAL_SD_ERROR_UNSUPPORTED_FEATURE;0 D% z" H, ?- l: r+ f }" i8 M( y: k( Q# q O6 v /********************* LDS:*********************************/ |
参与人数 2 | ST金币 +16 | 收起 理由 |
---|---|---|
MrJiu | + 6 | 顶!!! |
shaoziyang | + 10 | 很给力! |
我的也是SD+FATFS,不过没有用CubeMX,以前是用DFP里的HAL代码,也有一点总部,后来发现CubeF4V1.18的代码新点,就直接复制HAL到工程里使用了。& D/ ~- s9 M+ ?# `0 k2 v
对了,HAL的SD驱动,如果你使用DMA传输数据,中断函数又是直接调HAL的自带的话,也有BUG的,有空了我再贴出来,解决方法就是,要不自已写中断函数代码,要不改HAL库的函数。
对应的硬件是原子的F407,探索者,使用了DMA传输方式,中断代码在stm32f4xx_it.c上,(为什么放这里?我反这个文件的代码全部定义到片上的RAM区去执行了,)
FATFS的版本是最新的0.13r
HAL的版本是最新的CUBEF41.18.0
# n7 O7 _, j3 Q& j, ]: r" C
5 |/ X) L% I5 g4 F* b) s+ N
) c. {- [6 y: z: D
. q, W9 A+ r2 c, C7 D: w# b
. E; L) K0 N1 o3 j
' C( g- U* q: H1 {2 }3 z
3 g" p- t @- x) p# V7 B
! D4 X7 a( A# K" ?
SDIO.rar
2018-1-10 14:05 上传
点击文件名下载附件
75.2 KB, 下载次数: 152
我之前发邮件反馈问题很快会收到反馈结果的,工作日的时候可能比较快一些收到回复。
已发邮件,试试反馈有没有效果,如果有回复的话,把以前遇到的问题也反馈了。
支持!!!