在sd卡識別模式結束之前,控制器使用的時鐘頻率均為fod。在資料傳輸模式,控制器可能會使用fpp頻率。控制器傳送一條ssend_csd(cmd9)命令來獲取sd卡csd暫存器(card specific data)裡面的描述值,譬如,塊長度,卡容量資訊等。廣播命令set_dsr(cmd4)為各個已識別的sd卡配置驅動階段(??)。它會向sd卡的dsr暫存器寫入相關的資訊。控制器的時鐘頻率也在這個時刻從fod轉到fpp。set_dsr命令是可選的。
cmd7命令用來選擇某個sd卡,使其進入transfer狀態,在指定時間段內,只有乙個卡能處於transfer狀態。當某個先前被選中的處於transfer狀態的sd卡接收到cmd7之後,會釋放與控制器的連線,並進入stand-by狀態。當cmd7使用保留位址0x0000時,所有的sd卡都會進入stand-by狀態。
資料傳輸模式下各個狀態的轉換關係總結如下:
所有的資料讀命令都可以被停止命令(cmd12)在任意時刻終止。資料傳輸會終止,sd卡返回transfer狀態。讀命令有:塊讀操作(cmd17)、多塊讀操作(cmd18)、傳送寫保護(cmd30)、傳送scr(acmd51)以及讀模式下的普通命令(cmd56)
所有的資料寫命令都可以被停止命令(cmd12)在任意時刻終止。寫命令也會在取消選擇命令(cmd7)之前停止。寫命令有:塊寫操作(cmd24,cmd25)、程式設計命令(cmd27)、鎖定/解鎖命令(cmd42)以及寫模式下的普通命令(cmd56)
資料傳輸一旦完成,sd卡會退出資料寫狀態,進入programming狀態(傳輸成功)或者transfer狀態(傳輸失敗)
如果塊寫操作被叫停,但是寫操作包含的最終塊其長度和crc校驗是正確的話,資料會被程式設計到sd卡(從快取寫入到flash?)
sd卡可能會提供快取模式,意思是前次寫入塊在程式設計到flash的時刻,控制器可以接著傳送下一塊的資料
當寫快取為滿時刻,並且sd卡處於programming狀態,dat0會保持為低電平(busy),表明其為忙狀態
寫csd,寫保護,擦除這些操作沒有快取的功能,當sd卡正在處理這些命令的時候,其餘的資料傳輸命令會被忽略。當sd卡為忙,並且處於programming狀態的時候,dat0也會被sd卡拉低,
在sd卡處於programming狀態時候,不允許控制器傳送設定引數命令。設定引數命令有:設定塊長度(cmd16)、擦除塊開始(cmd32)以及擦除塊結束(cmd33)
在sd卡程式設計時刻,讀命令也是不允許的
當把另乙個卡從stand-by狀態轉換為transfer狀態的時候,正處於erase和programming狀態的卡其操作不會終止,它會自動進入disconnect狀態,釋放資料線。
處於disconnect狀態的卡可以通過傳送cmd7命令使其脫離此狀態,並進入programming狀態,並重新啟用忙識別符號
復位sd卡(使用cmd0或者cmd15)會終止任何等待中或正在進行的programming操作。這可能會損毀sd卡的資料
cmd34-37 cmd50,cmd57保留
SD卡協議學習點滴(一)
首先sd卡有所謂操作模式 operation mode 的概念,每種操作模式又具體對應一種或多種狀態,主機通過傳送命令可以使sd卡在不同的狀態間轉換,sd卡則接受命令,並根據自己現在所處狀態做出不同的響應。系統上電時刻或者搜尋sd卡時,sd卡控制器應該處於sd卡識別模式 sd卡在剛接入系統時刻也處於...
SD卡分析二
4 core層分析 core層完成了不同協議和規範的實現,並為host層的驅動提供了介面函式,在host層我們曾經呼叫的兩個函式 mmc alloc host sizeof struct s3cmci host pdev dev mmc add host mmc 我 們就從這兩個函式入手,來分析co...
sd卡,驅動學習
linux sd卡驅動開發 一 sd 相關基礎概念 linux sd卡驅動開發 二 sd 卡驅動分析host篇 linux sd卡驅動開發 三 sd 卡驅動分析core篇 linux sd卡驅動開發 四 sd 控制器之真正的硬體操作 linux sd卡驅動開發 五 sd 卡驅動分析core補充篇 l...