硬汉嵌入式论坛

 找回密码
 立即注册
查看: 693|回复: 11
收起左侧

[SD/SDIO] SD卡偶尔会卡死

[复制链接]

15

主题

58

回帖

103

积分

初级会员

积分
103
发表于 2026-2-10 19:13:50 | 显示全部楼层 |阅读模式
硬件环境:STM32H735 挂载4线SD卡MKDV4GCL-ABA。

软件环境:threadx+filex。

执行fx_file_write函数写文件时,卡死的情况,具体卡死堆栈如图sta_reg值为  0x00002000;标志宏
#define SDMMC_FLAG_CMDACT                    SDMMC_STA_CPSMACT

有没有遇到过的?


回复

使用道具 举报

15

主题

58

回帖

103

积分

初级会员

积分
103
 楼主| 发表于 2026-2-10 19:15:29 | 显示全部楼层
补充图片
A6AAA5BEC827493bB6905154F462EF67.png
D03DDB6ACC3B491b8E1262CD11A641A2.png
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-2-11 00:29:33 | 显示全部楼层
是不是SD卡使用的内存空间安排到TCM RAM空间了,SDIO DMA不支持访问这个。
回复

使用道具 举报

15

主题

58

回帖

103

积分

初级会员

积分
103
 楼主| 发表于 2026-2-11 08:59:08 | 显示全部楼层
eric2013 发表于 2026-2-11 00:29
是不是SD卡使用的内存空间安排到TCM RAM空间了,SDIO DMA不支持访问这个。

不是一下就死,正常1s写一次好像没问题。物理按键等有事件了,通过队列发消息到写文件线程,记录一下信息。现在时1s按3次左右按键,触发事件,按十几次大概率会死。时钟频率从50Mhz编程12.5Mhz还是不行。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-2-12 10:53:05 | 显示全部楼层
walk 发表于 2026-2-11 08:59
不是一下就死,正常1s写一次好像没问题。物理按键等有事件了,通过队列发消息到写文件线程,记录一下信息 ...

这种i情况下, 你要解决下保证之前的写入完成了,再启动新的。

然后我这里做了个1s写入2MB文件的测试,比较稳定

【实测】使用STM32H7板子FatFS文件系统每秒读写2MB文件,实时写入7450个文件不出错,写满16GB SD卡
https://forum.anfulai.cn/forum.p ... 6360&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

15

主题

58

回帖

103

积分

初级会员

积分
103
 楼主| 发表于 2026-2-15 10:30:49 | 显示全部楼层
eric2013 发表于 2026-2-12 10:53
这种i情况下, 你要解决下保证之前的写入完成了,再启动新的。

然后我这里做了个1s写入2MB文件的测试 ...

好像找到问题了,我把FileX的缓存配置大一点就可以了。fx_user.h中#define FX_MAX_SECTOR_CACHE         256 默认256,我改成1024就可以了,可能实际SD卡一个SECTOR是512,我写的数据大于256了。缓存不够?
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-2-19 00:14:36 | 显示全部楼层
walk 发表于 2026-2-15 10:30
好像找到问题了,我把FileX的缓存配置大一点就可以了。fx_user.h中#define FX_MAX_SECTOR_CACHE          ...

对,256有点小,最好是512整数倍
回复

使用道具 举报

15

主题

58

回帖

103

积分

初级会员

积分
103
 楼主| 发表于 2026-4-29 14:24:01 | 显示全部楼层
本帖最后由 walk 于 2026-4-29 14:34 编辑


最近增加fx_file_write的频次,又出现了如帖同样的现象,fx_file_write返回错误类型是FX_IO_ERROR (0x90)
经过各种折腾,发现使用ST提供的filex(6.4.0),配置如下就不报错。
#define FX_MAX_SECTOR_CACHE         4096
#define FX_UPDATE_RATE_IN_SECONDS         1

如果使用github上最新版本filex(v6.5.0.202601),同样的配置文件,执行fx_file_write,没写几次就报错。

新版本是有什么特殊配置吗,有没有遇到同样问题的!?
对比一下,新版本多了一些fx_*_FAT_*.c/h文件。

回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-4-29 14:47:58 | 显示全部楼层
walk 发表于 2026-4-29 14:24
最近增加fx_file_write的频次,又出现了如帖同样的现象,fx_file_write返回错误类型是FX_IO_ERROR (0x90 ...

有这种情况,看来兼容有些问题。
回复

使用道具 举报

15

主题

58

回帖

103

积分

初级会员

积分
103
 楼主| 发表于 2026-4-30 08:42:29 | 显示全部楼层
eric2013 发表于 2026-4-29 14:47
有这种情况,看来兼容有些问题。

之前USBX感觉也不是很好用,看来要逃离ThreadX全家桶了。。。。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122500
QQ
发表于 2026-4-30 09:28:08 | 显示全部楼层
walk 发表于 2026-4-30 08:42
之前USBX感觉也不是很好用,看来要逃离ThreadX全家桶了。。。。

升级后带来的问题,很正常,ST的HAL库,每次更新HAL库,我的例子都得重新研究下。

嵌入式类软件全这样,习惯就好了,除非出LTS长期稳定版。
回复

使用道具 举报

15

主题

58

回帖

103

积分

初级会员

积分
103
 楼主| 发表于 2026-4-30 10:57:14 | 显示全部楼层
本帖最后由 walk 于 2026-4-30 11:10 编辑

更新:
根据SDMMC IDMA 缓冲区 0 /1 基址寄存器的值,定位到问题了,SD卡使用的缓存空间安排到TCM RAM空间了

情况1:#define FX_STM32_SD_DMA_API         1时,不管FX_STM32_SD_CACHE_MAINTENANCE是多少,改变量static UCHAR scratch[FX_STM32_SD_DEFAULT_SECTOR_SIZE]都会被编译到TCM RAM,如果MPU不管理这个空间(按默认)。报错
情况2:FX_MEDIA sdio_disk,默认被编译到TCM RAM,里面有缓存,报错。


上述两种情况导致SD卡时序错误,一直处于忙状态。导致读写错误,必须断电重启才能再次使用。但是这个不是必现,写数据少是可以侥幸不出现
还有没有其他情况,继续测试中...

TCM RAM在实际项目中MPU一般按默认还是手动管理?这个内存主要追求性能。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-5-13 00:51 , Processed in 0.399629 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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