OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2892|回复: 3

stm32f4 hal sdio hardfault

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-9-12
在线时间
17 小时
发表于 2019-11-17 22:15:36 | 显示全部楼层 |阅读模式
1金钱
以下截取自HAL_SD_WriteBlocks

#ifdef SDIO_STA_STBITERR
    while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR))
#else /* SDIO_STA_STBITERR not defined */
    while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
#endif /* SDIO_STA_STBITERR */
    {
      if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE))
      {
        /* Write data to SDIO Tx FIFO */
        for(count = 0U; count < 8U; count++)
        {
          SDIO_WriteFIFO(hsd->Instance, (tempbuff + count));
        }
        tempbuff += 8U;
      }

      if((Timeout == 0U)||((HAL_GetTick()-tickstart) >=  Timeout))
      {
        /* Clear all the static flags */
        __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);  
        hsd->ErrorCode |= errorstate;
        hsd->State = HAL_SD_STATE_READY;
        return HAL_TIMEOUT;
      }
    }


不知道怎么搞的,这里的sdio的STA寄存器更新超级慢(这个过程中STA的值为0x105000),导致写入fifo 17次,共17*256个字节,远大于512字节,最后导致堆栈溢出(总共就512字节的buffer,用完了还继续往后读取),之后进入hardfault后再读取STA,显示就正常了(0x500).
我不知道是不是我的sd卡有问题,感觉不像。测试的是F4的HAL库。
还有我必须吐槽STM32的SDIO,DMA感觉像是摆设,硬件流控制无法适用DMA,DMA动不动就FIFO溢出,我简直要吐血,后面使用官方的BSP库倒是能够读取了,但是写入却出现这种玩意。
感觉自己好菜啊,求救。。。

最佳答案

查看完整内容[请看2#楼]

谢谢,弄好了,是因为我没有进行4k对齐我的内存buffer,还说别人有问题,挺惭愧。弄好后的速度是10M/s的写入和20M/s的读取,还是很爽的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-9-12
在线时间
17 小时
 楼主| 发表于 2019-11-17 22:15:37 | 显示全部楼层
谢谢,弄好了,是因为我没有进行4k对齐我的内存buffer,还说别人有问题,挺惭愧。弄好后的速度是10M/s的写入和20M/s的读取,还是很爽的。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-9-12
在线时间
17 小时
 楼主| 发表于 2019-11-18 13:17:19 | 显示全部楼层
我补充一下,我使用的卡是sandisk 10代 100M/s的高速卡,使用过程中发现,分频系数设置小了(比如0),会出现下溢错误;设大了,写入多个块的时候,就会出现刚才我说的情况,寄存器更新居然不及时,导致程序跑了很多遍了,还没跳出循环,直接出现hardfault。而使用硬件流,会出现CRC错误。。。以上现象的情况是在不使用DMA的条件下实验发现的。注意到STM32F4系列的文档中写支持到SD卡标准2.0,会不会是不支持这个卡呢。求助原子哥,能否讲讲你的经验。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-11-19 02:29:06 | 显示全部楼层
mxmxlwlw 发表于 2019-11-18 13:17
我补充一下,我使用的卡是sandisk 10代 100M/s的高速卡,使用过程中发现,分频系数设置小了(比如0),会出 ...

我用寄存器版本代码,没问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表