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

GD32F105RBT6调用f_mount返回FR_NO_FILESYSTEM故障排查求助

问题描述
  • 芯片:GD32F105RBT6
  • 需求:将文本文件保存至FAT32格式U盘
  • 故障现象:调用f_mount()返回FR_NO_FILESYSTEM错误;仅保留USB主机功能的项目可正常工作,集成RTC、定时器、DMA、ADC等外设后功能失效
  • 排查情况:关闭除TIMER2_IRQHandler和USBFS_IRQHandler外的所有中断后仍未改善;故障点锁定在调用链f_mount(...) -> find_volume(...) -> check_fs(...)中,具体为ld_word(fs->win + BS_55AA) != 0xAA55校验不通过
  • 使用FatFs版本:R0.13c
  • 相关代码:
int usbh_msc_usr_app(void) {
    
    FRESULT res;
    uint8_t WriteTextBuff[] = "Try to write text in";
    uint32_t bytesWritten, bytesToWrite;
    
    // register work area for logical drives
    usb_mdelay(100);
    res = f_mount(&fatfs, "0:/", 1);
    if (res != FR_OK) {
        return 1;
    }
    
    res = f_open(&file, "0:test.TXT", FA_CREATE_ALWAYS | FA_WRITE);
    if (res != FR_OK){
        f_mount(NULL, "0:/", 1);
        return 1;
    }
    
    bytesWritten = 0;
    bytesToWrite = sizeof(WriteTextBuff);
    res = f_write(&file, WriteTextBuff, bytesToWrite, (void*)&bytesWritten); 
    if ( (bytesToWrite != bytesWritten) || (res != FR_OK) ) {
        
    }
    
    usb_mdelay(1000);
    res = f_close(&file);
    if (res != FR_OK) {
        f_mount(NULL, "0:/", 1);
        return 1;
    }
   
    f_mount(NULL, "0:/", 1); 
    return 0;
}
可能的故障原因
  • 内存访问异常:集成多外设后,栈空间不足或全局变量(如fatfs结构体)被意外篡改。fs->win是FatFs的扇区读取缓冲区,若栈溢出或其他外设代码修改了该缓冲区,会导致读取的引导扇区末尾0xAA55校验位错误。可检查项目栈大小配置,或把fatfs结构体放在未被其他外设初始化覆盖的内存区域。
  • USB MSC读写时序干扰:即使保留了TIMER2_IRQHandler,若TIMER2的中断优先级高于USBFS或中断频率过高,会频繁打断USB主机的扇区读取操作,导致读取的引导扇区数据不完整或错误。可调整TIMER2的中断优先级,使其低于USBFS_IRQHandler的优先级,或降低TIMER2的中断频率测试。
  • FatFs配置不一致:单外设项目与集成项目的ffconf.h配置存在差异。比如_MIN_SS/_MAX_SS的扇区大小设置与U盘实际扇区不匹配,会导致引导扇区数据读取错位,0xAA55校验位位置错误;或误开启_USE_MULTI_PARTITION等配置,导致找不到正确的引导扇区。需对比两个项目的ffconf.h配置项。
  • 时钟或总线冲突:GD32F105的USB外设需48MHz时钟,集成其他外设后若总线分频或时钟源配置错误,会导致USB时钟不稳定,数据传输出错。比如AHB/APB总线分频设置不当,或USB时钟未正确配置为48MHz,都会导致读取的扇区数据错误。
  • 全局变量初始化问题:fatfs或file结构体初始化顺序错误,或被其他外设的初始化代码覆盖。比如在USB主机初始化前,其他外设的初始化修改了fatfs的工作缓冲区,导致引导扇区读取数据异常。可调整初始化顺序,确保USB相关初始化在其他外设之后,或对fatfs结构体做显式初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:31