打印
[其他ST产品]

STM32H7+SD卡+RTOS+FATFS FATFS报错Debug

[复制链接]
941|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FATFS报错Debug
错误情景:
f_mount等等函数均报错,如:
f_mount(&fs," ", 0); 此时不报错, 但如果使用f_open等函数,则马上报错not_ready

f_mount(&fs," ", 1); 立刻报错fr_disk_err或者fr_not_ready

尝试过的方法:

1. 4bits改为1bits, 无效
2. 调节时钟频率, 无效
3. 设置上拉电阻, 无效
4. 修改栈区堆区大小, 无效(使用了RTOS)(但需要注意的是RTOS任务内存分配也不要太小, 我分配了4096, 不确定最小可以有多小)
5. 更换SD卡(没试过, 本人使用了32GB的SD卡)

使用特权

评论回复
沙发
wang6623|  楼主 | 2023-6-29 16:48 | 只看该作者
解决方案:

虽然FATFS始终不能工作

但是! SD卡可以正常配置, 初始化, 以及读取信息.

使用特权

评论回复
板凳
wang6623|  楼主 | 2023-6-29 16:49 | 只看该作者
所以基本排除了SD卡以及SDMMC配置时出问题的可能性. 问题定位在FATFS的配置与RTOS的配置上.

但新的问题又来了, FATFS只是一个抽象层,它不应该出现自身的配置上的问题

继续定位问题, 定位在RTOS与FATFS的兼容上面.

仔细查阅CubeMX中的配置项, 发现问题:

FATFS中选项栏 "Advanced Setting"中有一个选项:“Use DMA Template”

使用特权

评论回复
地板
wang6623|  楼主 | 2023-6-29 16:49 | 只看该作者
这里被强制选择为"Enable", 但是我在配置的时候并没有设置相关的DMA选项, 这里设为ENABLE, 与实际配置不符
更新DMA配置(MDMA部分), 问题解决.

使用特权

评论回复
5
wang6623|  楼主 | 2023-6-29 16:49 | 只看该作者
运行效果:

使用特权

评论回复
6
wang6623|  楼主 | 2023-6-29 16:50 | 只看该作者
勘误:

网络上有尝试通过降低时钟频率的方法,实测不需要,100M时钟频率正常工作.

4bits改为1bits, 理由是CubeMX初始化时有bug, 实测不需要(cube版本6.8.1, FW_H7版本1.11)
可以正常满速工作, 但是没有测试最高速率是多少, 以及100M时钟会不会数据出错.

使用特权

评论回复
7
wang6623|  楼主 | 2023-6-29 16:51 | 只看该作者
补录:

便于各位自行定位问题所在, 这里给出我的SD卡读取代码, 如果这部分可以正常工作, 就不要在SD卡上面浪费时间了, 不是SD卡的问题
    uint64_t CardCap;              //SD卡容量
    HAL_SD_CardCIDTypeDef SDCard_CID;
    HAL_SD_CardInfoTypeDef  SDCardInfo;

    SD_Driver.disk_initialize(0);

    HAL_SD_GetCardCID(&hsd1,&SDCard_CID);        //获取CID
    HAL_SD_GetCardInfo(&hsd1,&SDCardInfo);                    //获取SD卡信息
    CardCap=(uint64_t)(SDCardInfo.LogBlockNbr)*(uint64_t)(SDCardInfo.LogBlockSize);        //计算SD卡容量

    uart_printf("Card ManufacturerID: %d \r\n",SDCard_CID.ManufacturerID);                                //制造商ID
    uart_printf("CardVersion:         %d \r\n",(uint32_t)(SDCardInfo.CardVersion));                //卡版本号
    uart_printf("Class:               %d \r\n",(uint32_t)(SDCardInfo.Class));                    //
    uart_printf("Card RCA(RelCardAdd):%d \r\n",SDCardInfo.RelCardAdd);                                        //卡相对地址
    uart_printf("Card BlockNbr:       %d \r\n",SDCardInfo.BlockNbr);                                                //块数量
    uart_printf("Card BlockSize:      %d \r\n",SDCardInfo.BlockSize);                                        //块大小
    uart_printf("LogBlockNbr:         %d \r\n",(uint32_t)(SDCardInfo.LogBlockNbr));                //逻辑块数量
    uart_printf("LogBlockSize:        %d \r\n",(uint32_t)(SDCardInfo.LogBlockSize));                //逻辑块大小
    uart_printf("Card Capacity:       %d MB\r\n",(uint32_t)(CardCap>>20));                                //卡容量

使用特权

评论回复
8
wang6623|  楼主 | 2023-6-29 16:51 | 只看该作者
工程代码git链接:
在master分支

使用特权

评论回复
9
Undshing| | 2023-7-1 23:21 | 只看该作者
FATFS不工作?

使用特权

评论回复
10
Wordsworth| | 2023-12-30 07:13 | 只看该作者

输入电源和负载电流环路并没有什么问题

使用特权

评论回复
11
Clyde011| | 2023-12-30 08:16 | 只看该作者

控制地与其他地要通过一些特定的点连接

使用特权

评论回复
12
公羊子丹| | 2023-12-30 09:09 | 只看该作者

事实上很多做项目的工程师本身自己也会在用

使用特权

评论回复
13
万图| | 2023-12-30 10:12 | 只看该作者

引线的长度直接与它的电感量和电阻量成比例

使用特权

评论回复
14
Uriah| | 2023-12-30 11:15 | 只看该作者

变换器效率就显得比较低

使用特权

评论回复
15
帛灿灿| | 2023-12-30 13:11 | 只看该作者

设计者的作用就是在理解电路工作过程的基础上,保证PCB设计合理。

使用特权

评论回复
16
Bblythe| | 2023-12-30 14:14 | 只看该作者

两个环路最有可能产生电磁干扰(EMI)

使用特权

评论回复
17
周半梅| | 2023-12-30 16:10 | 只看该作者

没有发现有哪本是介绍设计思想的

使用特权

评论回复
18
Pulitzer| | 2023-12-30 17:13 | 只看该作者

滤波电容接线端的放置很重要

使用特权

评论回复
19
童雨竹| | 2023-12-30 19:09 | 只看该作者

但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。

使用特权

评论回复
20
普莱兴科技| | 2024-8-8 18:51 | 只看该作者
wang6623 发表于 2023-6-29 16:51
工程代码git链接:
在master分支

连接没看到

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

390

帖子

0

粉丝