【问题标题】:STM32 + FatFS + SDIO + CubeMXSTM32 + FatFS + SDIO + CubeMX
【发布时间】:2019-06-03 02:47:13
【问题描述】:

我尝试通过 FatFS+SDIO 接口将 1bit 模式的 SD 卡连接到 Stm32l4。 CubeMX 5.0 自动生成的代码。在 Cube 中启用和配置 DMA。 当我调用像 f_mount() 或 f_open() 这样的 FatFS 函数时,我得到 FR_DISK_ERR 返回语句。 DMA_Timeout 的低级别读取返回。请帮帮我。

【问题讨论】:

    标签: stm32 fatfs cubemx


    【解决方案1】:

    因此,首先,您可能应该查看 ST 的文档,了解如何准确地让进程树与 SD 卡一起移动。我知道使用 USB,您必须调用主机进程并等待主机状态处于活动状态,然后才能进行任何 FATFS 调用。确保你在等待硬件中断触发存在。

    类似的效果,只要确保SD没有挂载的情况下有一个超时参数即可。

    // stateOfHost will change depending on the cube generated code, but it should be somewhere in the SD Card code
    extern ApplicationTypeDef stateOfHost;
    
    // Set the default state to idle
    ApplicationTypeDef stateOfHost = APPLICATION_IDLE;
    
    while(1)
    {
        // Start USB Host Process 
        MX_USB_HOST_PROCESS();
    
        if(stateOfHost == HOST_USER_CLASS_ACTIVE)
        {
            // FATFS Can now be called
        }
    }
    

    如果在那之后所有其他方法都失败了,这可能听起来有点奇怪,但请尝试增加默认堆栈大小。出现 DMA 超时,因为未调用磁盘的回调。没有要填写的数据。尝试通过 FATFS 的这种实现进行调试是一场噩梦。

    如果堆栈大小未增加到超过默认设置 0x400,则 USB OTG 和 SD 卡 FATFS 第三方中间件会出现问题。

    在文件 startup_stm32l4(xx)xx.s 内部(括号中的两个 x 代表您的 L4 变体),将堆栈大小更改为合适的值。首先,尝试 0x1000。

    我遇到了类似的问题,需要将堆栈大小增加到 0x3000 才能让我的 USB 正常工作。

    如果 SD 被识别,请确保创建变量来跟踪您的所有 FATFS 调用,以确保整个过程是成功的。

    要通过 FATFS 读取,您必须: 1.挂载工作区(f_Mount) 2.打开一个文件(f_open) 3.读取文件打开(f_read)

    写入操作完全相同,只是与读取调用交换。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 2016-10-20
      • 2020-09-30
      • 2022-08-18
      • 2016-10-03
      • 2016-03-07
      • 2017-11-07
      • 2018-05-16
      • 2020-08-21
      相关资源
      最近更新 更多