1. 程式人生 > >SD3.0協議解讀四

SD3.0協議解讀四

前面的文章提到過SD卡主要分為兩個操作模式,一是初始化和識別操作模式,另一種就是這篇文章需要分析的資料傳輸模式啦。


資料傳輸模式:

資料傳輸模式主要有六種狀態,分別是Stand-by狀態、Transfer狀態、Sending-data狀態、Receive-data狀態、Programming狀態、Disconnect狀態。這六種狀態通過不同的Command就可以切換到某種狀態,換句話說,這六種狀態貫穿了整個資料傳輸模式。

要理解資料傳輸模式的流程,老衲認為除了理解這六種狀態,還需要對Commands有一定的瞭解,越熟悉越好,當然,這並不是叫你去背Commands。好了,我們來看看資料傳輸模式的流程框圖:

資料傳輸模式(翻譯):

     在SD卡識別模式結束之前,控制器使用的時鐘頻率均為Fod。在資料傳輸模式,控制器可能會使用Fpp頻率。控制器傳送一條SSEND_CSD(CMD9)命令來獲取SD卡CSD暫存器(Card Specific Data)裡面的描述值,譬如,塊長度,卡容量資訊等。廣播命令SET_DSR(CMD4)配置所有識別卡的驅動段。對應於應用匯流排LayOut(長度),卡的數量和資料傳輸頻率,這個命令設定DSR暫存器。時鐘頻率在那個點上也應該從Fod切換Fpp。SET_DSR命令對Host和卡都是可選的。

CMD7 用來選擇一個卡並將它置於傳輸狀態(Transfer  state),在任何時間只能有一個卡處於傳輸狀態。 如果已有一個卡處於傳輸狀態, 它和主機的連線將釋放,並返回到 Stand-by狀態。當 CMD7 以保留相對地址“0x0000”傳送時,所有卡將返回到 Stand-by 狀態。這可以用來識別新的卡而不重置其他已註冊的卡。 在這種狀態下已有一個 RCA 地址的卡不響應識別命令(ACMD41,CMD2,CMD3)

資料傳輸模式下各個狀態的轉換關係總結如下:

·所有的資料讀命令都可以被停止命令(CMD12)在任意時刻終止。資料傳輸會終止,SD卡返回Transfer狀態。讀命令有:塊讀操作(CMD17)、多塊讀操作(CMD18)、傳送防寫(CMD30)、傳送scr(ACMD51)以及讀模式下的普通命令(CMD56)。

·所有的資料寫命令都可以被停止命令(CMD12)在任意時刻終止。寫命令也會在取消選擇命令(CMD7)之前停止。寫命令有:塊寫操作(CMD24,CMD25)、程式設計命令(CMD27)、鎖定/解鎖命令(CMD42)以及寫模式下的普通命令(CMD56)。

·資料傳輸一旦完成,SD卡會退出資料寫狀態,進入Programming狀態(傳輸成功)或者Transfer狀態(傳輸失敗)如果塊寫操作被叫停,但是寫操作包含的最終塊其長度和CRC校驗是正確的話,資料會被程式設計到SD卡(從快取寫入到Flash)。

·卡可能提供塊寫緩衝。 這意味著在前一塊資料被操作時,下一塊資料可以傳送給卡。如果所有卡寫緩衝已滿, 只要卡在 Programming State, DAT0 將保持低電平(BUSY)。

·寫CSD、CID、防寫和擦除時沒有緩衝。這表明在卡因這些命令而處於忙時,不再接收其他資料傳輸命令。 在卡忙時 DAT0 保持低電平, 並處於 Programming State。實際上如果 CMD 和 DAT0 線分離,而且主機佔有的忙 DAT0 線和其他 DAT0 線分開,那麼在卡忙時,主機可以訪問其他卡。

·在卡被程式設計(programming)時,禁止引數設定命令。引數設定命令包括:設定塊長度(CMD16),擦除塊開始(CMD32)和擦除塊結束(CMD33)。卡在操作時不允許讀命令。
·使用 CMD7 指令把另一個卡從 Stand-by 狀態轉移到 Transfer 狀態不會中止擦除和程式設計(programming)操作。卡將切換到 Disconnect 狀態並釋放 DAT 線。
·使用 CMD7 指令可以不選中處於 Disconnect 狀態的卡。卡將進入 Programming 狀態,重新啟用忙指示。
·使用 CMD0 或 CMD15 重置卡將中止所有掛起和活動的程式設計(programming)操作。這可能會破壞卡上的資料內容,需要主機保證避免這樣的操作。CMD34-37 CMD50,CMD57保留。
-