首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32 + FatFS + SDIO + CubeMX

STM32 + FatFS + SDIO + CubeMX
EN

Stack Overflow用户
提问于 2019-01-08 11:54:25
回答 1查看 4.1K关注 0票数 0

我试图连接SD卡在1位模式通过Stm32l4通过FatFS+SDIO接口。由CubeMX 5.0自动生成的代码。启用DMA并在Cube中配置。当我调用FatFS func (如f_mount()或f_open() )时,会得到FR_DISK_ERR返回语句。DMA_Timeout的低级别读取返回。求你帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2019-03-05 16:10:31

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

类似的效果,只需确保有一个超时参数,如果情况的SD没有安装。

代码语言:javascript
复制
// 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和SD卡FATFS第三方中间件会出现问题。

在文件startup_stm32l4(xx)xx.s中(括号中的两个x表示L4的变体),将堆栈大小更改为适当的东西。首先,尝试0x1000。

我有类似的问题,需要增加堆栈大小到0x3000,以使我的USB工作。

如果认识到SD,请确保使用变量来跟踪所有FATFS调用,以确保其成功的全部方式。

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

写入操作完全相同,只需与read调用进行交换。

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54091299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档