3

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

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

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

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

4

1 回答 1

4

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

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

如果您希望两台主机两台访问存储卷,则需要使用网络文件系统常见的多客户端一致性保护来实现一些东西——FAT 绝对不是一个例子。

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

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

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

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

D) 支持以上一种以上,但作为独立模式,不能同时处于活动状态,需要大量努力才能在它们之间切换。

于 2013-11-15T15:36:34.173 回答