我目前正在使用Micrium OS-II开发ST32(STM32F103xC)应用程序。到目前为止,一切都进展顺利,但我现在已经遇到障碍,无法继续。
该板配置为使用SD卡充当USB存储设备,以便主机PC可以复制保存在设备上的文件。这样可以正常工作,因为在Windows资源管理器中可以看到当前SD卡上的文件。
但是,当我尝试使用FATFS在程序中创建文件时,f_open()返回FR_NOT_READY。为了进一步研究,我构建了一些将文件写入SD的示例代码,它工作正常。所以我在我的程序中移动了编写代码,我发现如果在开始操作系统多任务处理之前调用f_open,它可以正常工作 - 我可以打开一个文件并写入它。在启用勾号后立即放置代码(但在创建任务之前)会返回到获取FR_NOT_READY。
我不确定我知道这意味着什么。我可以写入文件的位置有限制吗?写作时我是否必须禁用多任务处理? (哎呀,当然不是吗?)是不是我不能写入我目前用作USB设备的SD卡?
答案 0 :(得分:4)
实际上,您不能将SD卡作为大容量存储设备暴露给外部USB主机,也可以同时将其作为文件系统安装在本地。
为了进一步澄清 - 实际上你可以通过简单的硬件访问仲裁来尝试这样做,但是如果没有数据损坏,你很快就会出现不一致,因为每个文件系统代码都会认为它有自由修改文件系统,无需立即以一致的方式提交更改和安全性,以假设它已缓存在内存中的任何文件系统数据仍然有效,因为没有其他人可以更改存储没有告诉它的块。
如果您希望两个主机两个访问存储卷,则需要实现具有网络文件系统通用的多客户端一致性保护的功能 - 这些内容绝对不是FAT的示例
列举您的选项,应该可以:
A)接口SD卡和USB,将SD卡暴露为大容量存储设备,无需本地访问
B)接口SD卡并将其与本地文件系统代码一起使用;还有一个USB接口用于其他目的 没有大容量存储模式。
C)接口SD卡和USB,将SD卡作为本地文件系统管理,并通过管理一致性的网络文件共享类型机制授予PC访问权限
D)支持上述多个,但作为独立模式不能同时激活并需要大量工作才能切换。