1. 程式人生 > >eMMC原理——總線協議

eMMC原理——總線協議

不同 order 數據傳輸 mpat sso eterm 分享圖片 dex 例如

1. eMMC 總線接口

eMMC 總線接口定義如下圖所示:

技術分享圖片

各個信號的描述如下:

CLK

CLK 信號用於從 Host 端輸出時鐘信號,進行數據傳輸的同步和設備運作的驅動。
在一個時鐘周期內,CMD 和 DAT0-7 信號上都可以支持傳輸 1 個比特,即 SDR (Single Data Rate) 模式。此外,DAT0-7 信號還支持配置為 DDR (Double Data Rate) 模式,在一個時鐘周期內,可以傳輸 2 個比特。
Host 可以在通訊過程中動態調整時鐘信號的頻率(註,頻率範圍需要滿足 Spec 的定義)。通過調整時鐘頻率,可以實現省電或者數據流控(避免 Over-run 或者 Under-run)功能。 在一些場景中,Host 端還可以關閉時鐘,例如 eMMC 處於 Busy 狀態時,或者接收完數據,進入 Programming State 時。

CMD

CMD 信號主要用於 Host 向 eMMC 發送 Command 和 eMMC 向 Host 發送對於的 Response。Command 和 Response 的細節會在後續章節中介紹。

DAT0-7

DAT0-7 信號主要用於 Host 和 eMMC 之間的數據傳輸。在 eMMC 上電或者軟復位後,只有 DAT0 可以進行數據傳輸,完成初始化後,可配置 DAT0-3 或者 DAT0-7 進行數據傳輸,即數據總線可以配置為 4 bits 或者 8 bits 模式。

Data Strobe

Data Strobe 時鐘信號由 eMMC 發送給 Host,頻率與 CLK 信號相同,用於 Host 端進行數據接收的同步。Data Strobe 信號只能在 HS400 模式下配置啟用,啟用後可以提高數據傳輸的穩定性,省去總線 tuning 過程。

NOTE:
Extended CSD byte[183] BUS_WIDTH 寄存器用於配置總線寬度和 Data Strobe

2. eMMC 總線模型

eMMC 總線中,可以有一個 Host,多個 eMMC Devices。總線上的所有通訊都由 Host 端以一個 Command 開發發起,Host 一次只能與一個 eMMC Device 通訊。

系統在上電啟動後,Host 會為所有 eMMC Device 逐個分配地址(RCA,Relative device Address)。當 Host 需要和某一個 eMMC Device 通訊時,會先根據 RCA 選中該 eMMC Device,只有被選中的 eMMC Device 才會響應 Host 的 Command。

NOTE:
更詳細的工作原理請參考 eMMC 工作模式 章節。

2.1 速率模式

隨著 eMMC 協議的版本叠代,eMMC 總線的速率越來越高。為了兼容舊版本的 eMMC Device,所有 Devices 在上電啟動或者 Reset 後,都會先進入兼容速率模式(Backward Compatible Mode)。在完成 eMMC Devices 的初始化後,Host 可以通過特定的流程,讓 Device 進入其他高速率模式,目前支持以下的幾種速率模式。

ModeData RateBus WidthFrequencyMax Data Transfer (x8)
Backward Compatible Single x1, x4, x8 0-26 MHz 26 MB/s
High Speed SDR Single x1, x4, x8 0-52 MHz 52 MB/s
High Speed DDR Dual x4, x8 0-52 MHz 104 MB/s
HS200 Single x4, x8 0-200 MHz 200 MB/s
HS400 Dual x8 0-200 MHz 400 MB/s

NOTE:
Extended CSD byte[185] HS_TIMING 寄存器可以配置總線速率模式
Extended CSD byte[183] BUS_WIDTH 寄存器用於配置總線寬度和 Data Strobe

2.2 通信模型

Host 與 eMMC Device 之間的通信都是由 Host 以一個 Command 開始發起的,eMMC Device 在完成 Command 所指定的任務後,則返回一個 Response。

2.2.1 Read Data

技術分享圖片

Host 從 eMMC Device 讀取數據的流程如上圖所示。

如果 Host 發送的是 Single Block Read 的 Command,那麽 eMMC Device 只會發送一個 Block 的數據(一個 Block 的數據的字節數由 Host 設定或者為 eMMC Device 的默認值,更多細節請參考 eMMC 工作模式 章節)。
如果 Host 發送的是 Multiple Block Read 的 Command,那麽 eMMC Device 會持續發送數據,直到 Host 主動發送 Stop Command。

NOTE:
從 eMMC Device 讀數據都是按 Block 讀取的。

2.2.2 Write Data

技術分享圖片

Host 向 eMMC Device 寫入數據的流程如上圖所示。

如果 Host 發送的是 Single Block Write Command,那麽 eMMC Device 只會將後續第一個 Block 的數據寫入的存儲器中。
如果 Host 發送的是 Multiple Block Write Command,那麽 eMMC Device 會持續地將接收到的數據寫入到存儲器中,直到 Host 主動發送 Stop Command。

eMMC Device 在接收到一個 Block 的數據後,會進行 CRC 校驗,然後將校驗結果通過 CRC Token 發送給 Host。
發送完 CRC Token 後,如果 CRC 校驗成功,eMMC Device 會將數據寫入到內部存儲器時,此時 DAT0 信號會拉低,作為 Busy 信號。Host 會持續檢測 DAT0 信號,直到為高電平時,才會接著發送下一個 Block 的數據。如果 CRC 校驗失敗,那麽 eMMC Device 不會進行數據寫入,此次傳輸後續的數據都會被忽略。

NOTE:
向 eMMC Device 寫數據都是按 Block 寫入的。

2.2.3 No Data

在 Host 與 eMMC Device 的通信中,有部分交互是不需要進行數據傳輸的,還有部分交互甚至不需要 eMMC Device 的回復 Response。

技術分享圖片

2.2.4 Command

技術分享圖片

如上圖所示,eMMC Command 由 48 Bits 組成,各個 Bits 的解析如下所示:

DescriptionStart BitTransmission BitCommand IndexArgumentCRC7End Bit
Bit position 47 46 [45:40] [39:8] [7:1] 0
Width (bits) 1 1 6 32 7 1
Value "0" "1" x x x "1"

Start Bit 固定為 "0",在沒有數據傳輸的情況下,CMD 信號保持高電平,當 Host 將 Start Bit 發送到總線上時,eMMC Device 可以很方便檢測到該信號,並開始接收 Command。

Transmission Bit 固定為 "1",指示了該數據包的傳輸方向為 Host 發送到 eMMC Device。

Command Index 和 Argument 為 Command 的具體內容,不同的 Command 有不同的 Index,不同的 Command 也有各自的 Argument。 更多的細節,請參考 eMMC Commands 章節。

CRC7 是包含 Start Bit、Transmission Bit、 Command Index 和 Argument 內容的 CRC 校驗值。

End Bit 為結束標誌位,固定為"1"。

NOTE:
CRC 校驗簡單來說,是發送方將需要傳輸的數據“除於”(模2除)一個約定的數,並將得到的余數附在數據上一並發送出去。接收方收到數據後,再做同樣的“除法”,然後校驗得到余數是否與接收的余數相同。如果不相同,那麽意味著數據在傳輸過程中發生了改變。更多的細節不在本文展開描述,感興趣的讀者可以參考 CRC wiki 中的介紹。

2.2.5 Response

技術分享圖片

eMMC Response 有兩種長度的數據包,分別為 48 Bits 和 136 Bits。

Start Bit 與 Command 一樣,固定為 "0",在沒有數據傳輸的情況下,CMD 信號保持高電平,當 eMMC Device 將 Start Bit 發送到總線上時,Host 可以很方便檢測到該信號,並開始接收 Response。

Transmission Bit 固定為 "0",指示了該數據包的傳輸方向為 eMMC Device 發送到 Host。

Content 為 Response 的具體內容,不同的 Command 會有不同的 Content。 更多的細節,請參考 eMMC Responses 章節。

CRC7 是包含 Start Bit、Transmission Bit 和 Content 內容的 CRC 校驗值。

End Bit 為結束標誌位,固定為"1"。

2.2.6 Data Block

Data Block 由 Start Bit、Data、CRC16 和 End Bit 組成。以下是不同總線寬度和 Data Rate 下,Data Block 詳細格式。

1 Bit Bus SDR

技術分享圖片

CRC 為 Data 的 16 bit CRC 校驗值,不包含 Start Bit。

4 Bits Bus SDR

技術分享圖片

各個 Data Line 上的 CRC 為對應 Data Line 的 Data 的 16 bit CRC 校驗值。

8 Bits Bus SDR

技術分享圖片

各個 Data Line 上的 CRC 為對應 Data Line 的 Data 的16 bit CRC 校驗值。

4 Bits Bus DDR

技術分享圖片

8 Bits Bus DDR

技術分享圖片

在 DDR 模式下,Data Line 在時鐘的上升沿和下降沿都會傳輸數據,其中上升沿傳輸數據的奇數字節 (Byte 1,3,5 ...),下降沿則傳輸數據的偶數字節(Byte 2,4,6 ...)。
此外,在 DDR 模式下,1 個 Data Line 上有兩個相互交織的 CRC16,上升沿的 CRC 比特組成 odd CRC16,下降沿的 CRC 比特組成 even CRC16。odd CRC16 用於校驗該 Data Line 上所有上升沿比特組成的數據,even CRC16 則用於校驗該 Data Line 上所有下降沿比特組成的數據。

NOTE:
DDR 模式下使用兩個 CRC16 作為校驗,可能是為了更可靠的校驗,選用 CRC16 而非 CRC32 則可能是出於兼容性設計的考慮。

2.2.7 CRC Status Token

在寫數據傳輸中,eMMC Device 接收到 Host 發送的一個 Data Block 後,會進行 CRC 校驗,如果校驗成功,eMMC 會在對應的 Data Line 上向 Host 發回一個 Positive CRC status token (010),如果校驗失敗,則會在對應的 Data Line 上發送一個 Negative CRC status token (101)。

NOTE:
讀數據時,Host 接收到 eMMC Device 發送的 Data Block 後,也會進行 CRC 校驗,但是不管校驗成功或者失敗,都不會向 eMMC Device 發送 CRC Status Token。

詳細格式如下圖所示:

Positive CRC status token

技術分享圖片

Negative CRC status token

技術分享圖片

3. eMMC 總線測試過程

當 eMMC Device 處於 SDR 模式時,Host 可以發送 CMD19 命令,觸發總線測試過程(Bus testing procedure),測試總線硬件上的連通性。如果 eMMC Device 支持總線測試,那麽 eMMC Device 在接收到 CMD19 後,會發回對應的 Response,接著 eMMC Device 會發送一組固定的測試數據給 Host。Host 接收到數據後,檢查數據正確與否,即可得知總線是否正確連通。

NOTE: 如果 eMMC Device 不支持總線測試,那麽接收到 CMD19 時,不會發回 Response。
總線測試不支持在 DDR 模式下進行。

測試數據如下所示:

技術分享圖片

NOTE: 總線寬度為 1 時,只發送 DAT0 上的數據,總線寬度為 4 時,則只發送 DAT0-3 上的數據

4. eMMC 總線 Sampling Tuning

由於芯片制造工藝、PCB 走線、電壓、溫度等因素的影響,數據信號從 eMMC Device 到達 Host 端的時間是存在差異的,Host 接收數據時采樣的時間點也需要相應的進行調整。而 Host 端最佳采樣時間點,則是通過 Sampling Tuning 流程得到。

NOTE:
不同 eMMC Device 最佳的采樣點可能不同,同一 eMMC Device 在不同的環境下運作時的最佳采樣點也可能不同。
在 eMMC 標準中,定義了在 HS200 模式下可以進行 Sampling Tuning。

4.1 Sampling Tuning 流程

Sampling Tuning 是用於計算 Host 最佳采樣時間點的流程,大致的流程如下:
1. Host 將采樣時間點重置為默認值
2. Host 向 eMMC Device 發送 Send Tuning Block 命令
3. eMMC Device 向 Host 發送固定的 Tuning Block 數據
4. Host 接收到 Tuning Block 並進行校驗
5. Host 修改采樣時點,重新從第 2 步開始執行,直到 Host 獲取到一個有效采樣時間點區間
6. Host 取有效采樣時間點區間的中間值作為采樣時間點,並推出 Tuning 流程

NOTE:
上述流程僅僅是一個示例。Tuning 流程執行的時機、頻率和具體的步驟是由 Host 端的 eMMC Controller 具體實現而定的。

4.2 Tuning Block 數據

Tuning Block 是專門為了 Tuning 而設計的一組特殊數據。相對於普通的數據,這組特殊數據在傳輸過程中,會更高概率的出現 high SSO noise、deterministic jitter、ISI、timing errors 等問題。這組數據的具體內容如下所示:

技術分享圖片

技術分享圖片

NOTE: 總線寬度為 1 時,只發送 DAT0 上的數據,總線寬度為 4 時,則只發送 DAT0-3 上的數據

eMMC原理——總線協議