SD卡協議學習點滴(一)

2021-06-03 11:33:23 字數 2257 閱讀 5699

**:

首先sd卡有所謂操作模式(operation mode)的概念,每種操作模式又具體對應一種或多種狀態,主機通過傳送命令可以使sd卡在不同的狀態間轉換,sd卡則接受命令,並根據自己現在所處狀態做出不同的響應。

系統上電時刻或者搜尋sd卡時,sd卡控制器應該處於sd卡識別模式;sd卡在剛接入系統時刻也處於這種模式,並且處於此模式下的idle狀態。

sd卡識別模式:在這種模式下,控制器會檢驗sd卡的工作電壓範圍,識別sd卡型別,並要求它們傳送各自的相對位址(relative card address);這些操作在sd卡各自的cmd線上進行。所有的操作均使用預設的 sd卡識別時鐘頻率(identification clock rate)

sd卡復位:傳送go_idle_state(cmd0)到sd卡後,除處於非活動狀態(inactive state)之外的sd卡都會進入空閒狀態(idle state);在idle狀態,sd卡的cmd線處於輸入模式,預設相對位址為0x0000,預設驅動暫存器設定為最低速度,最大驅動電流能力。

工作條件檢測

在控制器和sd卡進行任何通訊之前,控制器不清楚sd卡支援的工作電壓範圍,故而控制器首先使用預設的電壓傳送一條reset指令(cmd0),緊跟著的cmd8指令,用於取得sd卡支援工作電壓範圍資料。sd**過檢測cmd8的引數部分來檢查控制器使用的工作電壓,控制器通過分析回傳的cmd8引數部分來校驗sd卡是否可以在所給電壓下工作。如果sd卡可以在指定電壓下工作,則它回送cmd8的命令響應字,其中包含check voltage, check pattern。如果sd卡不支援所給電壓,則sd卡不會給出任何響應資訊,並繼續處於idle狀態。在plv2.0(physical layer version2.0)下,在首次執行acmd41之前,必須執行cmd8指令,用以初始化sdhc卡,sdhc卡根據是否接收到cmd8指令來鑑別控制器是否支援plv2.0協議。使用低電壓的控制器也必須在acmd41命令之前傳送cmd8,避免可以工作在兩種電壓模式下的sd卡因為沒有接收到cmd8, 而預設工作在高電壓環境下,被誤認為是只支援高電壓工作模式。

每次控制器傳送cmd0復位sd卡後,都要重新進行系列初始化操作(cmd8,acmd41...)。

如果acmd41指令的ocr位元位為0,控制器可以查詢各個sd卡,並決定它們共同的工作電壓範圍。在作為查詢的acmd41指令傳送之後,sd卡並不會開始初始化過程,直到控制器重新傳送一條acmd41指令。

sd卡初始化和識別過程:

sd卡的初始化開始於接收到acmd41指令之後,acmd指令的hcs(host capacity support)位如果設定為1的話,表明控制器支援sdhc卡,否則表示不支援。

在cmd8命令傳送之後的acmd41指令其功能有所擴充套件,在引數裡多了hcs部分,在響應裡面多了ccs(card capacity status)部分。hcs引數會被不響應cmd8命令的sd卡所拋棄。控制器向不響應cmd8的卡傳送acmd41指令時,hcs位應該設定為零0。如果向sdhc卡傳送hcs位為0的acmd41命令,sdhc卡返回的響應,其busy標識位永遠為0,代表忙狀態。hcs標識位用來表明sd卡是否已經完成初始化,如果未完成,hcs為零,否則為1,如果hcs為0,控制器會重**送acmd41指令,sd卡只檢查首次接收到的acmd41指令的hcs位。

響應cmd8的sd卡傳送的對於acmd41指令響應會包含ccs部分,控制器只檢查hcs標誌位為1的響應所包含的ccs位。ccs=1表明其為sdhc卡,否則為標準sd卡。

控制器隨後傳送all_send_cid(cmd2)命令,查詢各個卡的cid(unique card identification)值,還沒有被識別的sd卡(處於ready狀態)會傳送cid值作為響應,傳送完cid值之後,sd卡進入識別狀態(identification state),然後控制器傳送cmd3(send_relative_addr)命令,要求各個sd卡傳送乙個新的相對位址(rca),rca在之後的資料傳輸模式中用於定址。rca傳送完之後。sd卡進入stand-by狀態,在這個狀態,如果控制器想要給sd卡分配乙個新的rca,它可以傳送另一條cmd3命令給sd卡。最後發布的rca為sd卡的真實rca。

SD卡協議學習點滴(二)

在sd卡識別模式結束之前,控制器使用的時鐘頻率均為fod。在資料傳輸模式,控制器可能會使用fpp頻率。控制器傳送一條ssend csd cmd9 命令來獲取sd卡csd暫存器 card specific data 裡面的描述值,譬如,塊長度,卡容量資訊等。廣播命令set dsr cmd4 為各個已識...

sd卡,驅動學習

linux sd卡驅動開發 一 sd 相關基礎概念 linux sd卡驅動開發 二 sd 卡驅動分析host篇 linux sd卡驅動開發 三 sd 卡驅動分析core篇 linux sd卡驅動開發 四 sd 控制器之真正的硬體操作 linux sd卡驅動開發 五 sd 卡驅動分析core補充篇 l...

SDIO協議讀寫SD卡之卡識別模式介紹

sd卡的工作模式分為兩類,分別為卡識別模式和資料傳輸模式,在sd卡上電或者主機發出復位命令之後的預設工作模式為卡識別模式。本文主要對卡識別模式進行介紹。在利用sdio協議進行sd卡驅動開發中,與spi協議驅動序列flash類似,也是利用各種不同的命令實現對sd卡的控制。此處進行乙個大致的闡述。在sd...