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

HAL库的BUG(F4、F7)_SDIO(SDMMC)

[复制链接]
ldskendy 发布时间:2018-1-10 18:31
这次公布一个HAL库的BUG,关于F4、F7的,版本是目前最新的CUBEF41.18.0和F7的DFP包里的,版本号是2.9.0,应该对应目前最新的CUBEF7库。
这个BUG是在DFPF7 2.9.0版本发现的。查看了其他系统的HAL代码几乎一致,因此也应该存在BUG。

希望给使用SDIO、SDMMC功能有异常的网友有所帮助。

环境:WIN7 64bit + MDK5.22
硬件:stm32F7 DISCO (F746)
使用HAL库对TF进行读取操作,
方式MA
中断函数:直接调用HAL库的处理函数。

  BUG1:没用使用中断读数据时,当FIFO至少有8个字节时,触发SD_Read_IT(),其中的tmp = (uint32_t*)hsd->pRxBuffPtr的指针没初始化,为0

  BUG2:开启DMA后,当执行DMA中断会不明原因出现DTIMEOUT标志置位,将执行if((hsd->Context & SD_CONTEXT_DMA) != RESET)

  if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK)会对hsd->hdmarx = NULL;造后续DMA无法正常使用,从面导致FIFO数据无法及时读出,

  最终导致FIFO数据超出8个,置位,导致BUG1产生。


具体发现问题过程如下:

V1.01  20171227

1.通过Show Caller Code功能查找在开DMA传输SD数据时,偶发进入HardFault_Handler中断的异常,发现以下情况:

  a.HAL_NVIC_EnableIRQ(SDMMC1_IRQn)开中断后,SDMMC产生的中断调用库函数HAL_SD_IRQHandler。

  b.HAL_SD_IRQHandler函数会判断SDMMC_IT_RXFIFOHF标志位,如有效则执行SD_Read_IT(hsd)。

  c.当传输数据开始时,SDMMC_FIFO数据大于8个时,且有其它错误中断产生时,如超时,进入SDMMC1_IRQn。

  d.进入中断后,执行SD_Read_IT(hsd),其中的tmp = (uint32_t*)hsd->pRxBuffPtr;(因为代码没有使用IT方式读取数据,所以该指针没有初始化)

  e.hsd->pRxBuffPtr在之前并没有初始化,在调试时发现值为0,在读取数据时就会改写地址为0数据,最终会出现HardFault_Handler。

  f.调试发现,操作过程中会出现两次TIMEOUT中断,随后HFIFO置位,下个超时中断进来后会进入HFIFO处理流程,SD_Read_IT

  g.自编写SD的中断函数,不对FIFOHF进行判断,出现错误时,只清标志位,关中断,然后退出

2.HAL2.9.0库的SD中断函数有BUG,

  BUG1:没用使用中断读数据时,当FIFO至少有8个字节时,触发SD_Read_IT(),其中的tmp = (uint32_t*)hsd->pRxBuffPtr的指针没初始化,为0

  BUG2:开启DMA后,当执行DMA中断会不明原因出现DTIMEOUT标志置位,将执行if((hsd->Context & SD_CONTEXT_DMA) != RESET)

  if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK)会对hsd->hdmarx = NULL;造后续DMA无法正常使用,从面导致FIFO数据无法及时读出,

  最终导致FIFO数据超出8个,置位,导致BUG1产生。

收藏 评论7 发布时间:2018-1-10 18:31

举报

7个回答
ldskendy 回答时间:2018-2-5 09:33:30
zero99 发表于 2018-2-1 09:29
来晚了,感谢支持,已汇总到1月技术原创
https://www.stmcu.org.cn/module/forum/thread-614550-1-1.html ...

谢谢支持,稍后再发一个FW_F7_V1.9.0的USB鼠标的小小BUG
creep 回答时间:2018-1-11 09:17:11
上次你发邮件反馈的bug有回复了没?
这个官方提供的SDIO驱动我也在用,不过只简单的用到了DMA中断读,写只是测试了下没发现问题。
我测试比较简单都没注意到你说的这些bug。
ldskendy 回答时间:2018-1-11 21:39:51
creep 发表于 2018-1-11 09:17
上次你发邮件反馈的bug有回复了没?
这个官方提供的SDIO驱动我也在用,不过只简单的用到了DMA中断读,写只 ...

上次的回复了,确认了第一个是笔误,第二个是代码还有不完善的地方。
这次的这个BUG,可能只对一些TF存在,我用的是1G的TF卡。
如果产生超时中断就会激这两个BUG,如果不产生超时中断就没事。
creep 回答时间:2018-1-11 22:28:46
ldskendy 发表于 2018-1-11 21:39
上次的回复了,确认了第一个是笔误,第二个是代码还有不完善的地方。
这次的这个BUG,可能只对一些TF存在 ...

嗯,我测试的是闪迪的16G和Netac的8G的TF卡,目前还没有发现bug。
zero99 回答时间:2018-2-1 09:29:50
来晚了,感谢支持,已汇总到1月技术原创
https://www.stmcu.org.cn/module/forum/thread-614550-1-1.html
luo_18 回答时间:2018-9-6 22:17:29
我现在用的也是stmf7的 hal 库,读写mmc经常出错
北斗stone 回答时间:2018-9-13 19:17:47
最近也用到F7的HAL库,搞了半天发现连写都没法写了,16年那会我拿F4的时候试着还好好的...

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版