You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F103C8T6 SPI驱动闪迪SD卡调用f_open返回FR_NO_FILESYSTEM错误

FATFS返回FR_NO_FILESYSTEM错误排查与解决方法

1. 先确认SPI驱动与硬件链路正确性

  • 单独编写SPI读写测试逻辑:向SD卡空闲扇区写入固定测试数据,延迟后读回对比,确认读写数据完全一致
  • 检查SPI时序配置:SD卡初始化阶段必须将SPI速率降到400KHz以下,初始化完成后才能切换到最高不超过18MHz的高速模式
  • 确认CS片选逻辑:SD卡SPI通信过程中CS引脚必须全程拉低,多设备共用SPI总线时要做好总线互斥,避免误拉高CS导致传输中断
  • 排查供电稳定性:SD卡3.3V供电纹波不能超过100mV,建议在SD卡电源引脚并联100uF电解电容+0.1uF陶瓷电容滤波,避免供电不足导致读写错误
  • 校验SPI收发逻辑:确认不存在漏发、多发字节,字节序、字节对齐符合SPI通信规则

2. 核对FATFS配置参数

打开ffconf.h文件逐一核对如下配置:

  • _MIN_SS与_MAX_SS参数必须匹配SD卡扇区大小,普通SD卡统一配置为#define _MIN_SS 512、#define _MAX_SS 512即可
  • 确认_VOLUMES参数与你挂载的SD卡卷数匹配,不要配置错误
  • 确认开启了FAT12/FAT16/FAT32的支持开关,不要关闭对应文件系统的适配
  • 检查_FS_TINY、_FS_READONLY等功能开关是否和你的使用场景匹配,不要误开不相关配置

3. 确认SD卡分区与格式化规则

  • 格式化SD卡时选择MBR分区表,不要使用GPT分区表,嵌入式FATFS默认不支持GPT分区
  • 分区必须设置为主分区,不要使用逻辑分区
  • 不要使用快速格式化,选择完整格式化,分配单元大小设置为默认的512字节,卷标不要使用中文、特殊字符
  • 可以先用WinHex等工具读取电脑端识别的SD卡0扇区MBR数据,再和SPI读回的0扇区数据对比,确认SPI读取的BPB参数是否正确

4. 针对触发错误的代码逻辑定向排查

你当前触发的错误是FATFS校验SD卡BPB参数中FAT表大小不匹配,90%的概率是SPI读回的BPB参数出错:

触发错误的代码逻辑:

if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs))   /* (BPB_FATSz must not be less than needed) */
  return FR_NO_FILESYSTEM;  
  • 打印代码运行时的fs->fsize、szbfat、SS(fs)三个变量的值,和电脑端读取的SD卡实际BPB参数对比,定位是哪个参数读错
  • 如果读出来的参数全为0或者乱码,直接定位到SPI读扇区函数的逻辑问题
  • 如果参数部分正确部分错误,检查SPI多块读写逻辑、CRC校验处理逻辑是否存在bug

内容的提问来源于stack exchange,提问作者ladan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:54:03