2013-11-14 37 views
2

我目前正在開發使用Micrium OS-II的ST32(STM32F103xC)的應用程序。到目前爲止,這一切都很順利,但我現在已經觸及了一個街區,無法繼續。ST32上的FATFS與設備配置爲USB驅動器

板配置作爲使用SD卡,使主機可以複製在設備上保存了文件的USB存儲設備。這工作正常,因爲可以在Windows資源管理器中看到SD卡上的文件。

然而,當我嘗試使用FATFS在我的計劃,f_open創建一個文件()返回FR_NOT_READY。爲了進一步調查,我構建了一些將文件寫入SD的示例代碼,並且工作正常。所以我在我的程序中移動了編寫代碼,並且發現如果我在啓動OS多任務處理勾號之前調用了f_open,它就能正常工作 - 我可以打開一個文件並寫入它。在啓用tick之後立即放置代碼(但在任務創建之前)會返回FR_NOT_READY。

我不知道我知道這是什麼意思。我可以寫入文件的位置有限制嗎?寫作時是否必須禁用多任務處理? (哎呀,當然不是?)簡單地說,我不能寫入我目前用作USB設備的SD卡?

+0

可能是因爲在ffconfig.h文件中將_FS_REENTRANT設置爲0的原因? –

+0

不,仍然爆發。在FATFS操作過程中,USB中斷似乎與SD卡代碼混淆有關。 –

+0

此設備是否有專用的SD卡控制器,或者您不得不求助於SPI? –

回答

4

事實上,你不能暴露SD卡作爲大容量存儲設備與外部USB主機,並且當地也安裝作爲在同一時間的文件系統。

爲了進一步闡明 - 實際上你可以嘗試使用簡單的硬件訪問仲裁來做到這一點,但是如果不是數據損壞,你很快就會產生不一致,因爲每一個文件系統代碼都假定它有自由修改文件系統,沒有要求立即提交以一致的方式安全變化的假設,它在內存中已緩存的任何文件系統的數據仍然是有效的,因爲沒有其他人可以改變存儲塊不告訴它

如果你想要兩個主機兩個訪問存儲卷,你需要實現一個網絡文件系統通用的多客戶端一致性保護 - FAT肯定不是一個例子。

歷數你的選擇,下面應該是可能的:

A)接口SD卡和USB,露出SD卡作爲大容量存儲設備沒有本地接入

B)接口SD卡和使用它與本地文件系統代碼;還有一個USB接口用於其他一些目的沒有海量存儲模式

C)接口SD卡和USB,管理SD卡作爲本地文件系統,並授予經由其管理一致性

d的網絡文件共享型機構的PC訪問)支持上述的一個以上的,但作爲獨立模式,它們不能同時處於激活狀態並且需要付出大量努力才能在兩者之間切換。

相關問題