SD卡應用總結(FatFs)

2021-07-10 13:30:35 字數 2732 閱讀 1078

對於sd卡的應用,想必大家都嘗試多。不過,很多網友恐怕只停留在實驗的基礎上吧。對於sd卡在檔案系統下或者不帶檔案系統下,對sd卡的操作都是很簡單的。是的,只是簡單的檔案讀寫確實不難。但是,如果每秒鐘不停的寫資料,而且是不停的工作,恐怕sd卡的應用就沒有這麼簡單了吧,有時總會出現一些莫名其妙的問題。

不知道大家是否遇到過這些問題?本人開發了幾個關於sd卡的專案,例如,定時拍照、定時錄音等。對於這樣的專案,基本上要求每一秒都在不停的寫資料,而且一般一天工作好幾個小時,甚至會不停的工作。在這些專案中,本人遇到太多的問題,下面把遇到的問題及解決方法與大家分享,希望有同樣經驗的網友一起分享一下您的經驗。

問題1:根目錄下檔案毀壞

問題2:根目錄正常,裡邊的資料夾毀壞

問題3:檔案大小為0位元組,並且無法刪除

問題4:sd卡電源無法關斷

問題5:臨界**

問題6:fat表與fsinfo資訊不匹配

問題7:檔案毀壞

問題8:sd卡資料寫入失敗

問題9:sd卡熱插拔

現象:在fatfs下可以讀寫檔案,可在pc上無法開啟目錄,提示檔案毀壞。

分析:通過winhex軟體開啟磁碟,發現目錄完全正常,但是fat表已經毀壞,引起的原因可能是帶電插拔。      解決:既然是fat表與目錄對不上,而且fat毀壞,就是用pc修復也只會刪除這些檔案,對於我們的微控制器來說,也沒有好的解決方法,那就格式吧。

現象:在fatfs下可以讀寫檔案,可在pc上可以開啟根目錄,卻無法裡面的資料夾,提示檔案毀壞。

分析:通過winhex軟體開啟磁碟,發現目錄完全正常,但是fat表與目錄資料對應不上,引起的原因可能是帶電插拔。

解決:既然是fat表與目錄對不上,就是用pc修復也只會刪除這些檔案,對於我們的微控制器來說,也沒有好的解決方法,那就刪除這個檔案吧。

現象:檔案已經存在,但在pc下無法刪除,刪除後會自動生成。

分析:既然檔案已經建立,但沒有內容,說明,檔案開啟後,寫資料失敗。

解決:既然檔案已經新建,但沒有寫內容,我們可以在寫內容失敗後刪除此檔案,否則後面就刪不掉了,只能格式了。

現象:通過i/o埠控制sd卡電源,關斷後sd卡電源端還有2.9v左右的電壓。

分析:不管用mos管還是電源晶元,通過i/o埠控制都應該截斷電源,但事實上sd卡電源叫還是有電,原因是這些電壓是通過spi的4個埠串進去了,特別是片選管腳。

解決:既然是通過這幾個管腳竄進去的,那麼在關掉電源之前讓這幾個管腳都沒有電壓輸入就可以了。

現象:在操作檔案系統時有時還沒有讀寫完成,就斷電或插拔sd卡。

分析:如果沒有寫完資料就直接斷電或插拔會導致檔案或檔案系統毀壞。

解決:在對檔案進行寫操作時進來減小臨界**的尺寸。 我們可以儘量減少操作檔案的時間,如果時間不能減少,我們可以減少臨界**的尺寸,可以在**中新增f_sync()函式。

現象:為了盡快操作檔案,而不用通過fat遍歷就可以知道sd卡的儲存狀態,在fsinfo中儲存了未使用簇數和空閒簇號,但某種原因導致fat表中是實際使用情況與fsinfo中資訊不匹配。

分析:fsinfo中的資訊可以快速定位到sd卡中的空閒區域,如果這裡的資訊不正確,我們只能通過fat表獲取這些資訊。如果sd卡很大,特別是應用了很大空間,從fat表中獲取這些資訊非常緩慢。

解決:如果某處讀寫操作非常緩慢時,可能是fat表與fsinfo中的資訊不匹配,我們需要進行一次匹配以矯正fsinfo中的資訊。

現象:在fatfs下寫入檔案時,有時由於頭沒有寫對,有時由於尾沒有寫讀,導致檔案檔案開啟。

分析:通過winhex軟體開啟磁碟,發現檔案內容不正確,有點缺頭,有的缺尾。

解決:既然是檔案頭或未不正確,我們可以對其頭或尾進行判斷,不正確的可以刪除掉。

現象:在fatfs下寫入檔案時,有時會一次寫入不了資料,有時會連續幾次寫入不了資料。

分析:寫入不了資料,是一些儲存異常或者sd卡異常導致,例如接觸不良、記憶體或堆疊問題等。

解決:寫不了資料並不意味做sd卡有問題,我們可以讓裝置重啟,再寫入資料。

如果連續幾次寫不了資料就格式化sd卡,勢必導致sd卡中檔案內容的丟失,為了把損失將到最低,我們可以讓裝置重啟,如果仍然無法寫入資料,再格式化sd卡。

現象:在很都時候,我們都需要對sd卡進行熱插拔操作,而我們知道,很多檔案毀壞都是這樣操作導致的。

分析:在讀寫sd卡時,突出斷電由於檔案並沒有操作完成,會導致檔案毀壞。

解決:在對sd卡進行插拔操作時,斷掉sd卡的供電。要讀sd卡進行斷電操作,可以有很多方法,例如,可以把sd卡鎖在裝置中,扒卡之前必須開鎖,通過鎖我們知道要對sd卡進行插拔了,所以,不能再對sd卡操作了,切斷sd卡供電。在沒有插入卡之前不能對sd卡供電。    當然我們還可以通過按鍵之類的東西實現,以保證不對sd卡帶電操作即可。

fatfs寫SD卡卡死

最近在學習fatfs操作sd卡,做了乙個儲存串列埠資料的小模組,是在你的例程 ex013 sdio fatfs檔案系統例程 上修改的。大概0.1秒儲存100個資料,發現過個幾分鐘程式就會卡死。原以為我修改帶來的問題,試了你的源程式,通過串列埠隔100ms傳送一次命令2,自動建立文字儲存資料,過幾分鐘...

SD卡與fatfs檔案系統 2

sd卡fat分割槽內容 1 主引導記錄mbr和分割槽表 mbr和分割槽表佔512個位元組 占用第1個扇區的空間 分割槽表的內容 2 分割槽引導記錄 dbr 中記錄著檔案系統的起始位置 大小 每簇扇區數 fat表個數及大小等相關資訊。分割槽啟動扇區的內容是fdc或fdc擴充套件描述符 3 檔案分配表 ...

SD卡的讀寫和FatFS檔案系統

u8 spi readwritebyte u8 txdata spi匯流排讀寫乙個位元組 u8 sd waitready void 等待sd卡就緒 u8 sd sendcommand u8 cmd,u32 arg,u8 crc sd卡傳送乙個命令 u8 sd sendcommand nodeasse...