1.前言
eMMC總線操作包含:
- boot mode,
- device identification mode
- interrupt mode
- data transfer mode
本文主要描述data transfer mode
2. data transfer mode
圖 emmc狀態轉換-data transfer mode
注1:busy(Dat0=low)信號在prg-state狀態永遠是激活的。由於之前版本的原因,設備在prg-state(busy激活時)狀態可能仍然會把CMD24/25當做有效或無效命令。所以host應注意設備如果在prg-state狀態且busy激活時不要發送CMD24/25命令。
注2:上圖中i表示init流程;r表示read data狀態轉換;w表示write data狀態轉換
2.1 data transfer mode概述
- 在data transfer mode下的所有的數據通信都是host和選中的device之間點對點的,所有帶有RCA參數的命令都會在CMD line上獲得回應
- 當device被指定了RCA后,它將不再響應identificaiton mode的命令:CMD1,CMD2,CMD3
- 重啟設備(CMD0, CMD15或者硬件重啟)或者停電會終止任何將要發送或者正在寫入的操作。這會引起一些或者全部被尋址的數據進入一個未知狀態,除非使用Reliable Write來保證寫入的可靠性。host有責任來防止這種情況的發生
- 如下的命令在設備配置為DDR傳輸模式時是不被允許的,且會被作為無效命令:bus testing(CMD19,CMD14), lock-unlock(CMD42)和set block length(CMD16)。
2.2 data transfer mode狀態轉換說明
- stand-by state
. 當device回到stand-by state的時候,通過command line和data line通信時是工作在push-pull模式
. 在host讀取全部的CSD寄存器之前,fpp時鍾必須維持在fod。host發送SEND_CSD(CMD9)命令來得到Device Specific Data(CSD寄存器),即,block length,設備存儲大小,最大時鍾頻率等內容
. 廣播命令SET_DSR(CMD4)會配置device的驅動能力。 此命令會根據應用的總線布局(長度)(???)和數據傳輸速率來編輯其DSR寄存器。時鍾也在此時由fod切換到fpp
. stand-by state下,host通過發送命令CMD7(參數為device的RCA)將對應RCA的device設為transfer state;
. host通過發送命令CMD7(參數為保留RCA "0x0000"),則device回到stand-by state
- transfer state
. 如果先前已經在transfer state,host通過發送命令CMD7(參數為任何不等於RCA的地址值),則device將離開transfer state回到stand-by state;
. 如果先前已經在transfer state,host通過發送命令CMD7(參數為當前 device的RCA),則device將忽略此命令,且可能會被認為是非法命令.
. 所有的數據讀取命令可以用停止命令(CMD12)在任何時候終止。數據傳輸會終止且設備會返回到transfer state。數據讀取命令包括了: block讀取(CMD17), multiple block 讀取(CMD18), send tuning block(CMD21)和send write protect(CMD30),如上這些命令會讓device從transfer state切換到sending-data state.
. 所有的寫數據命令可以用停止命令(CMD12)在任何時候終止。寫命令必須在使用CMD7命令反選device之前被停止掉。寫數據命令包括了: block write(CMD24和CMD25), write CID(CMD26), write CSD(CMD27),如上這些命令會讓device從transfer state切換到receive-data state.
. 設備可以為block write提供buffering功能,這意味着之前的block在寫入的時候,下一個block的可以被送到設備里
. 對於write CSD, write CID, write protection和 erase 是沒有buffering功能的。這意味着當device為上述某個命令工作的時候,其他的數據傳輸命令是不會被接受的。device是busy且處於Programming狀態時,DAT0 line會保持low
- receive-data state
. 當數據傳輸一結束,device會退出寫數據狀態且移動到Programming state(傳輸成功)或者Transfer state(傳輸失敗)
. 若一個寫block操作被停止,但最后一個block的CRC和length都有效,則數據會被寫入
- disconnect state
. 當設備處於disconnect state,CMD7(參數為當前device的RCA)用來選擇設備並轉換為programming state
. 在Disconnect state的device可以重新被選擇(CMD7)。此情況下device會移動到Programming狀態且重新激活busy標識
- programming state
. 如果先前已經在programming state,host通過發送命令CMD7(參數為任何不等於RCA的地址值),則device將離開programming state回到disconnect state;
. 如果先前已經在programming state,host通過發送命令CMD7(參數為當前 device的RCA),則device將忽略此命令,且可能會被認為是非法命令.
. device在被寫入的時候Parameter設置命令是不允許被接受的。parameter設置命令包括了: set block length(CMD16), erase group selection(CMD35-36)
. 把另外一個device從stand-by轉換到Transfer狀態(CMD7)是不會終止寫入操作的。此設備會轉換為Disconnect狀態且釋放DAT0的控制權
- bus test state
. 在執行bus testing階段之前(CMD19,CMD14),建議設置數據傳輸的時鍾頻率。這樣的話bus test會給出一個真實的數據。若是測試的時鍾頻率小於實際數據傳輸頻率則測試結果是錯誤的
3.關鍵狀態轉換
- init狀態轉換
power on->CMD0(IDLE state)->CMD1->READY state->CMD2->Identification state->CMD3->standby state->CMD7->Transfer state;
- read data狀態轉換
Transfer State->CMD8->Sending-data State->CMD12 Operating Complete->Transfer State
- write data狀態轉換
Transfer state->CMD4->Receivedata State->transfer complete->Programming State->Operation complete->Transfer State
4. 參考文檔
[1]http://www.jedec.org/sites/default/files/docs/JESD84-B51.pdf