久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 一個關于SD卡讀寫超時的話題 [打印本頁]

作者: taoran    時間: 2016-10-20 13:08
標題: 一個關于SD卡讀寫超時的話題
在基于STM32 MCU的應用開發中,經常會有人用到SD卡。有人發現在對SD卡進行讀寫時,偶爾會遇到SD卡讀寫失敗的情況。尤其是單獨對SD卡進行讀寫正常、或者非多任務環境下運行正常,而當SD讀寫跟其它程序代碼混在一起或在多任務環境下運行時就容易發生異常。比方如下情形:


1、使用STM32F4SDIO,用CubeMX配置。用polling模式的時候,出現SD卡寫的時候卡死的情況。后來用DMA模式就好了。


2、STM32F746DISCO開發板和官方1.3.0例程基礎上使用了FreeRTOS系統,改為DMA傳輸后還是不穩定。后來把SDIO相關的中斷優先級別調高,SDIO中斷設為3,DMA發送和接收的調為4,比FreeRTOS的系統用戶級別高,解決問題。


3、在FreeRTOS+FatFs+STM32F429的基礎上。
A.單個任務操作,SD卡讀寫沒有問題
B.多個任務,SD卡和U盤兩個任務,優先級別一樣,SD卡無法讀寫,U盤可以讀寫,調中斷級別,調整堆棧大小都沒有用。
C.還是多任務,SD卡和U盤兩個任務,甚至更多任務,只要把SD卡任務的優先級別調為最高,則SD卡,U盤讀寫都正常。


4、使用STM32官方SDIOSD CARD驅動的時候,單任務的時候沒有出現錯誤,使用多任務的時候經常出現問題,表現為讀取文件的時候沒有問題,經常點擊屏幕的時候就會出問題,最后通過仿真找到出錯點就是讀取數據向SD卡發送CD17命令時出現SD_RX_OVERRUN這個錯誤,產生原因為讀取FIFO溢出. 通過仿真與測試發現問題主要出現在讀取過程中不能打斷。
在兩個讀取函數里面SD_ErrorSD_ReadMultiBlocks(u32 addr, u32 *readbuff, u16 BlockSize, u32NumberOfBlocks);SD_Error SD_ReadBlock(u32 addr, u32 *readbuff, u16BlockSize); 加上臨界保護可以消除問題。同樣寫操作的時候也一樣需要加臨界保護。

以上羅列的情形,根本上講因為SD卡讀寫過程中發生了超時錯誤導致讀寫異常。應對措施視具體應用要求可能有所差異,最終目的都是為了避免SD卡讀寫過程中的超時錯誤。比如將查詢模式改為DMA模式、調整相關SD卡讀寫過程中所涉及中斷的優先級、提升SD卡讀寫任務的優先級、將SD卡讀寫程序放在臨界保護區運行或者在讀寫SD卡操作時關閉中斷等。


我們可以從SD卡相關協議得知,在對SD卡進行讀寫操作時是有超時保護及約束機制的。對于標準卡和高容量卡的讀寫超時定義還有所差異。細節請參考SD卡相關規格書。SD Specifications ----Physical Layer Simplified Specification。





作者: lijinqiu    時間: 2017-8-24 21:44
謝謝分享,最近也在調試sdcard。
作者: 1113634577    時間: 2019-1-30 09:16
數據分段存儲,每段喂狗,每段寫入時間小于看門狗最大計時時間




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日本成人三级电影 | 亚洲在线观看视频 | 国产精品久久久久一区二区三区 | 国产精品视频导航 | 日韩视频二区 | 色视频www在线播放国产人成 | 日韩欧美视频在线 | www.黄色片视频 | 国产中文字幕网 | 欧美日韩精品 | 欧美精品一区二区在线观看 | 欧美日韩一区二区三区视频 | 日韩国产一区二区 | 日韩精品三区 | 人妖videosex高潮另类 | 九九久久久 | 天天色天天射天天干 | 国产特级毛片aaaaaa喷潮 | 欧美精品在欧美一区二区 | 国产大片黄色 | 欧美一卡二卡在线 | 国产激情91久久精品导航 | 久久久久久艹 | 日韩一区二区三区视频 | 日本一卡精品视频免费 | 国产91视频免费 | 国产一区二区三区四区五区加勒比 | av大片在线观看 | 欧美激情一区二区三区 | 日本大香伊一区二区三区 | 国产精品一区三区 | 毛片入口| 国产精品久久久久一区二区 | 亚洲97| 国产一区二区三区久久 | 91视频一区二区 | 欧美黑人一区二区三区 | 国产精品色 | 欧美一级网站 | 羞羞的视频免费在线观看 | 欧美一级在线观看 |