我试图连接SD卡在1位模式通过Stm32l4通过FatFS+SDIO接口。由CubeMX 5.0自动生成的代码。启用DMA并在Cube中配置。当我调用FatFS func (如f_mount()或f_open() )时,会得到FR_DISK_ERR返回语句。DMA_Timeout的低级别读取返回。求你帮帮我。
发布于 2019-03-05 16:10:31
因此,首先,您可能应该查看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和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调用进行交换。
希望这能帮上忙。
https://stackoverflow.com/questions/54091299
复制相似问题