前面的文章提到過SD卡主要分為兩個操作模式,一是初始化和識別操作模式。還有一種就是這篇文章須要分析的傳輸數據模式啦。 
           
傳輸數據模式: 
          
傳輸數據模式主要有六種狀態,各自是Stand-by狀態、Transfer狀態、Sending-data狀態、Receive-data狀態、Programming狀態、Disconnect狀態。這六種狀態通過不同的Command就能夠切換到某種狀態,換句話說,這六種狀態貫穿了整個傳輸數據模式。
 
          
 要理解傳輸數據模式的流程,老衲覺得除了理解這六種狀態,還須要對Commands有一定的了解。越熟悉越好。當然。這並非叫你去背Commands。好了。我們來看看傳輸數據模式的流程框圖: 
          
 
 
        
老衲我第一次看到這圖的時候,簡直看暈了,有木有!。太惡心了吧,誰定義的協議。敢不敢再復雜一點?沒辦法,做IT的就是苦逼,僅僅能慢慢一點點啃,在理解流程之前。我們必須講協議里的英文翻譯一遍,然后結合流程圖理解究竟是怎么一回事,最后結合代碼來看,這才干真正明確傳輸數據的過程是怎么一回事,以下是對英文協議里傳輸數據模式的翻譯:
傳輸數據模式(翻譯):
在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保留。
看起來是挺暈的對吧,確實挺暈的,最好的辦法是將代碼相結合,分析的讀寫過程,井,有機會到后具體分析。
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
