eMMC(補充2)——總線數據流

參考資料:

  1. Embedded Multi-Media Card (e•MMC) Electrical Standard (5.1) [PDF]
  2. SD/MMC Controller, Hard Processor System (HPS) Technical Reference Manual (TRM) [PDF]
  3. CRC wiki [WEB]

目錄

 

1. 總線接口 

2. eMMC 總線模型

2.1 速率模式

2.2 通信模型

2.2.1  讀數據

2.2.2 寫數據

2.2.3 No Data

3. eMMC 總線測試過程

4. eMMC 總線 Sampling Tuning

4.1 Sampling Tuning 流程

4.2 Tuning Block 數據

 


1. 總線接口 

各個信號的描述如下:

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。

2.1 速率模式

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

Mode Data Rate Bus Width Frequency Max 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  讀數據

Host 從 eMMC Device 讀取數據的流程如下:

如果 Host 發送的是 Single Block Read 的 Command,那麼 eMMC Device 只會發送一個 Block 的數據。

如果 Host 在發送 Multiple Block Read 的 Command 前,先發送一個設定需要讀取的 Block Count 的 Command。eMMC Device 在完成指定 Block Count 的數據發送後,就自動結束數據傳輸,不需要 Host 主動發送 Stop Command。

如果 Host 沒有發送設定需要讀取的 Block Count 的 Command,發送 Multiple Block Read 的 Command 後,eMMC Device 會持續發送數據,直到 Host 發送 Stop Command 停止數據傳輸。

NOTE:
從 eMMC Device 讀數據都是按 Block 讀取的。 Block 大小可以由 Host 設定,或者固定爲 512 Bytes,不同的速率模式下有所不同。

2.2.2 寫數據

Host 向 eMMC Device 寫入數據的流程如下: 

 

如果 Host 發送的是 Single Block Write Command,那麼 eMMC Device 只會將後續第一個 Block 的數據寫入的存儲器中。

如果 Host 在發送 Multiple Block Write 的 Command 前,先發送一個設定需要讀取的 Block Count 的 Command。eMMC Device 在接收到指定 Block Count 的數據後,就自動結束數據接收,不需要 Host 主動發送 Stop Command。

如果 Host 沒有發送設定需要讀取的 Block Count 的 Command,發送 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 寫入的。 Block 大小可以由 Host 設定,或者固定爲 512 Bytes,不同的速率模式下有所不同。

2.2.3 No Data

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

 

(1)Command

 

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

Description Start Bit Transmission Bit Command Index Argument CRC7 End 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。 

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

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

NOTE:
CRC 校驗簡單來說,是發送方將需要傳輸的數據“除於”(模2除)一個約定的數,並將得到的餘數附在數據上一併發送出去。接收方收到數據後,再做同樣的“除法”,然後校驗得到餘數是否與接收的餘數相同。如果不相同,那麼意味着數據在傳輸過程中發生了改變。

(2)Response

 

eMMC Response 有兩種長度的數據包,分別爲 48 Bits136 Bits

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

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

Content 爲 Response 的具體內容,不同的 Command 會有不同的 Content。

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

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

(3)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

 

在 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 則可能是出於兼容性設計的考慮。

(4)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 最佳採樣時間點的流程,大致的流程如下:

  • Host 將採樣時間點重置爲默認值
  • Host 向 eMMC Device 發送 Send Tuning Block 命令
  • eMMC Device 向 Host 發送固定的 Tuning Block 數據
  • Host 接收到 Tuning Block 並進行校驗
  • Host 修改採樣時點,重新從第 2 步開始執行,直到 Host 獲取到一個有效採樣時間點區間
  • 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 上的數據

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章