ST32 上的 FATFS,设备配置为 USB 驱动器

Jul*_*old 3 embedded iar micrium

我目前正在使用 Micrium OS-II 开发 ST32 (STM32F103xC) 的应用程序。到目前为止,一切都很顺利,但我现在遇到了障碍,无法继续。

该板被配置为使用 SD 卡充当 USB 存储设备,以便主机 PC 可以复制设备上保存的文件。这工作正常,因为可以在 Windows 资源管理器中查看当前 SD 卡上的文件。

但是,当我尝试使用 FATFS 在程序中创建文件时,f_open() 返回 FR_NOT_READY。为了进一步研究,我构建了一些示例代码,将文件写入 SD,并且工作正常。所以我在程序中移动了编写代码,我发现如果我在启动操作系统多任务处理之前调用 f_open,它就会正常工作 - 我可以打开一个文件并写入它。在启用勾选之后(但在创建任务之前)立即放置代码会返回到获取 FR_NOT_READY。

我不确定我知道这意味着什么。写入文件的位置有限制吗?写作时是否必须禁用多任务处理?(哎哟,当然不是?)是否只是因为我无法写入当前用作 USB 设备的 SD 卡?

Chr*_*ton 5

事实上,您无法将 SD 卡作为大容量存储设备暴露给外部 USB 主机,同时也无法将其作为文件系统挂载在本地。

进一步澄清一下 - 实际上您可以尝试通过对硬件访问的简单仲裁来做到这一点,但是如果不是数据损坏,您很快就会出现不一致,因为每段文件系统代码都会假设它可以自由地修改文件系统,不需要立即以一致的方式提交更改,并且安全地假设它缓存在内存中的任何文件系统数据仍然有效,因为没有其他人可以在不告诉它的情况下更改存储块

如果您希望两台主机分别访问存储卷,则需要实施网络文件系统常见的多客户端一致性保护功能- FAT 绝对不是其中的一个示例。

列举您的选项,以下应该是可能的:

A) 接口SD卡和USB,将SD卡暴露为大容量存储设备,无需本地访问

B) 连接SD卡并将其与本地文件系统代码一起使用;还有一个 USB 接口用于其他用途 ,无需大容量存储模式

C) 连接SD卡和USB,将SD卡作为本地文件系统进行管理,并通过管理一致性的网络文件共享类型机制授予PC访问权限

D) 支持以上一种以上,但作为独立模式,不能同时激活,并且需要付出很大的努力才能在之间切换。