SD卡初始化以及識別過程

2021-07-27 05:38:24 字數 1206 閱讀 1581

sd卡上電後進入sd模式,如果sd卡在接收cmd0命令時cs為低,則sd卡進入spi模式,並且應答為r1應答,sd卡處於idle狀態,回到sd模式的唯一方法就是重新上電。

spi模式初始化

1.上電後主機應傳送至少74個時鐘,在這期間應保持cs為

高電平,然後sd卡進入idle模式。

2.傳送cmd0命令時,cs為低電平,則sd卡進入spi模式。cmd0命令沒有引數,cmd0的應答r1格式,收到應答為01。

3.sd卡傳送復位命令cmd0後,為了區別卡是sd1.0、sd2.0或者mmc卡,要傳送版本查詢命令cmd8,命令引數

0x1aa。以便初始化high capacity sd卡,如果sd卡不能在該電壓下工作,則sd卡不作應答,並處於idle狀態,否則sd卡將作出應答,回應狀態一般分兩種:若返回0x01,表示此sd卡接cmd8,也就是說此sd卡為版本2.0;若應答為其他,則表示此sd卡為版本1或者mmc。因為不同版本的sd卡操作要求有不一樣的地方,所以務必查詢sd卡的版本號,否則也會出現sd卡無法正常工作的問題。

4.若是sd2.0

,進一步

迴圈傳送命令cmd55+acmd41。其中,cmd55無引數,應答直到返回0x00。傳送cmd41命令,直至返回00。

根據應答判斷sd卡仍然處於初始化階段;r1應答的bit0為1表明處於idle狀態,sd卡還在初始化階段;當應答為0x00時,表明sd卡已完成初始化過程。然後,傳送cmd58命令來判斷是hcsd還是scsd,到此sd2.0卡初始化成功

5.若cmd8應答錯誤,則進一步判斷為1.0卡還是mmc卡,迴圈傳送cmd55+acmd41,返回00,則為sd1.0卡,到此sd1.0卡初始成功。如果在一定的迴圈次數下,應答不為00,則為mmc卡,進一步傳送cmd1進行初始化,應答為00,則確定為mmc卡,初始化成功。

6.理論上要求傳送cmd58獲得sd卡電壓引數,但實際過程中由於事先都知道了sd卡的工作電壓,因此可省略這一步簡化程式。協議書上也建議盡量不要用這個命令。

SD卡初始化

傳送指令時可能會有狀態轉換,尤其是初始化時。指令分為兩類 一類為通用指令,另一類為針對某種卡的特定指令,但特定指令的實際數可以通用指令相同,所以cmd55 特定指令來傳送特定指令,1 傳送cmd0指令 go idle state 卡進入idle狀態 2 傳送指令cmd8 send if cond 如...

SD卡初始化步驟詳解

硬體平台 飛思卡爾s12xep100 開發環境 codewarrior 5.2 結果 批量儲存穩定 最近在做檔案系統的公升級,先前用的是21ic論壇上面down的znfat,相信做微控制器軟體的兄弟們應該都知道。後來用的過程中發現此檔案系統超時機制做的不是很好,而且不精簡,會占用比較大的ram和fl...

STM32初始化SD卡流程

1,初始化sdio外設,關閉sdio時鐘。2,上電,開啟時鐘,注意此時時鐘應不能超過400khz,且此時是只有一位資料線,要到初始化完成後再調時鐘與資料線寬度。3,延時最低74個時鐘週期。使時鐘與sd卡穩定,否則會出錯。4,傳送cmd0,需要返回0x01,進入idle狀態 5,為了區別sd卡是2.0...