我试图通过FatFS + SDIO接口将1bit模式的SD卡连接到Stm32l4。 由CubeMX 5.0自动生成的代码。在多维数据集中启用和配置了DMA。 当我像f_mount()或f_open()那样调用FatFS函数时,会得到 FR_DISK_ERR 返回语句。低电平读取返回的时间为 DMA_Timeout 。请帮帮我。
答案 0 :(得分: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)
写操作完全相同,只是与read调用交换了。
希望这会有所帮助。