sd卡除錯關鍵點: sd除錯注意點
1. 上電時要延時足夠長的時間給 sd 卡乙個準備過程,在我的程式裡是 5 秒,根據不同的卡設定不同的延時時間。 sd 卡初始化第一步在傳送 cmd 命令之前,在片選有效的情況下首先要傳送至少 74 個時鐘,否則將有可能出現 sd 卡不能初始化的問題。
2. sd 卡傳送復位命令 cmd0 後,要傳送版本查詢命令 cmd8 ,返回狀態一般分兩種,若返回 0x01 表示此 sd 卡接受 cmd8, 也就是說此 sd 卡支援版本 2 ;若返回 0x05 則表示此 sd 卡支援版本 1 。因為不同版本的 sd 卡操作要求有不一樣的地方,所以務必查詢 sd 卡的版本號,否則也會出現 sd 卡無法正常工作的問題。
3. 理論上要求傳送 cmd58 獲得 sd 卡電壓引數,但實際過程中由於事先都知道了 sd 卡的工作電壓,因此可省略這一步簡化程式。協議書上也建議盡量不要用這個命令。
4. sd 卡讀寫超時時間要按照協議說明書書上的給定值 ( 讀超時: 100ms ;寫超時: 250ms) ,這個值要在程式中準確計算出來,否則將會出現不能正常讀寫資料的問題。我自己定義了乙個計算公式:超時時間 =(8/clk )*arg 。
5. 2gb 以內的 sd 卡 ( 標準卡 ) 和 2gb 以上的 sd 卡 ( 大容量卡 ) 在位址訪問形式上不同,這一點尤其要注意,否則將會出現無法讀寫資料的問題。如標準卡在讀寫操作時,對讀或寫命令令牌當中的位址域符初值0x10 ,表示對第 16 個位元組以後的位址單元進行操作 ( 前提是此 sd 卡支援偏移讀寫操作 ) ,而對大容量卡讀或寫命令令牌當中的位址域符初值 0x10 時,則表示對第 16 塊進行讀寫操作,而且大容量卡只支援塊讀寫操作,塊大小固定為 512 位元組,對其進行位元組操作將會出錯。
6. 對某一塊要進行寫操作時最好先執行擦出命令,這樣寫入的速度就能大大提高。進行擦除操作時不管是標準卡還是大容量卡都按塊操作執行,也就是一次擦除至少 512 位元組。
7. 對標準卡進行位元組操作時,起始和終止必須在乙個物理扇區內,否則將不能進行讀寫操作。實際操作過程中建議用塊操作以提高效率。不管是標準卡還是大容量卡乙個讀寫命令只能對乙個塊進行操作,不允許跨物理層位址操作。
8. 在寫資料塊前要先寫入若干個 dummy data 位元組,寫完乙個塊資料時,主機要監測 miso 資料線,如果從機處於忙狀態這根資料線會保持低電平,這樣主機就可以根據這根資料線的狀態以決定是否傳送下乙個命令,在從機沒有釋放 miso 資料線之前,主機絕對不能執行其他命令,否則將會導致寫入的資料出錯,而且從機也不會響應主機的命令。
9. 在 spi 模式下, crc 校驗是被忽略的,但依然要求主從機傳送 crc 碼,只是數值可以是任意值,一般主機的 crc 碼通常設為 0x00 或 0xff 。
讀多塊操作和寫多塊操作的傳輸停止形式不一樣,讀多塊操作時用用命令 cmd12 終止傳輸,而寫多塊操作時用stop tran token( 停止傳輸令牌,值為 0xfd) 終止傳輸。
SD卡讀寫 Verilog實現SD卡讀寫
目前常見的sd卡有兩種形式,一種是標準的sd卡,另外一種是tf卡,無論標準的sd卡或者tf卡,其基本協議是相同的,因此對於程式設計來說,這兩種型別的sd卡的讀寫方式是相同的。針對兩種不同型別的sd卡,其引腳介面訊號定義如下圖所示 標準sd卡 tf卡 對於上述的兩種型別的sd卡,都支援兩種操作模式,分...
linux上sd卡驅動移植除錯記錄
編譯出來了之後,我插上了我的乙個512mb的卡,在啟動資訊了列印如下 s3c2440 sdi s3c2440 sdi powered down.mmc0 error 110 whilst initialising sd card s3c2440 sdi s3c2440 sdi powered dow...
SD卡 MMC卡 MS卡 TF卡
sd卡 secure digital memory card 中文翻譯為安全數碼卡 是一種基於半導體快閃記憶器的新一代記憶裝置。sd卡由日本松下 東芝及美國 sd卡的技術是基於 卡 mmc 格式上發展而來,大小和mmc卡差不多,尺寸為32mm x 24mm x 2.1mm。長寬和mmc卡一樣,只是比...