eMMC 原理 4 :匯流排協議
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 進入其他高速率模式,目前支援以下的幾種速率模式。
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 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 的解析如下所示:
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。 更多的細節,請參考 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 最佳取樣時間點的流程,大致的流程如下:
- 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 上的資料
5. 參考資料
相關推薦
eMMC 原理 4 :匯流排協議
1. eMMC 匯流排介面 eMMC 匯流排介面定義如下圖所示: 各個訊號的描述如下: CLK CLK 訊號用於從 Host 端輸出時鐘訊號,進行資料傳輸的同步和裝置運作的驅動。在一個時鐘週期內,CMD 和 DAT0-7 訊號上都可以支援傳輸 1 個位元,即 SDR (S
Qt模型/檢視原理(4):自定義檢視
Qt模型/檢視原理(4):自定義檢視 若對C++語法不熟悉,建議參閱《C++語法詳解》一書,電子工業出版社出版,該書語法示例短小精悍,對查閱C++知識點相當方便,並對語法原理作了詳細講解。 自定義檢視的基本原則如下 1)、檢視需要自行繪製,通常在paintEvent()函式內完成,所
MyBatis框架原理4:外掛
外掛的定義和作用 首先引用MyBatis文件對外掛(plugins)的定義: MyBatis 允許你在已對映語句執行過程中的某一點進行攔截呼叫。預設情況下,MyBatis 允許使用外掛來攔截的方法呼叫包括: Executor (update, query, flushStatements, commit,
eMMC 原理 3 :分割槽管理
1. Partitions Overview eMMC 標準中,將內部的 Flash Memory 劃分為 4 類區域,最多可以支援 8 個硬體分割槽,如下圖所示: 1.1 概述 一般情況下,Boot Area Partitions 和 RPMB Partition 的容
《暢銷的原理》:4星。關於判斷與決策的研究的綜述。
使用 src 分享 積極 對比 大量 性能 相同 效應 全書是關於人類的判斷與決策的心理學研究的綜述。有一些內容跟《屏幕上的聰明決策》重合。總體評價4星,還不錯,首先是因為是研究的綜述,每一個觀點都有出處,相對比較靠譜,其次有不少觀點還是比較新穎的。 以下是書中一些信
spring框架學習筆記4:SpringAOP實現原理
odin 就是 sets 使用 point 攔截 ceo oca ssl AOP AOP(Aspect Oriented Programming),即面向切面編程,可以說是OOP(Object Oriented Programming,面向對象編程)的補充和完善。OOP引入
eMMC原理——總線協議
不同 order 數據傳輸 mpat sso eterm 分享圖片 dex 例如 1. eMMC 總線接口 eMMC 總線接口定義如下圖所示: 各個信號的描述如下: CLK CLK 信號用於從 Host 端輸出時鐘信號,進行數據傳輸的同步和設備運作的驅動。在一個時鐘周
學習:MQTT協議及原理
1 MQTT協議實現方式: 實現MQTT協議需要客戶端和伺服器端通訊完成,在通訊過程中,MQTT協議中有三種身份:釋出者(Publish)、代理(Broker)(伺服器)、訂閱者(Subscribe)。其中,訊息的釋出者和訂閱者都是客戶端,訊息代理是伺服器,訊息釋出者可以同時是訂閱者。
VC++/MFC訊息對映機制(4):附:鉤子函式原理
VC++/MFC訊息對映機制(4):附:鉤子函式原理 若對C++語法不熟悉,建議參閱《C++語法詳解》一書,電子工業出版社出版,該書語法示例短小精悍,對查閱C++知識點相當方便,並對語法原理進行了透徹、深入詳細的講解。 一、鉤子SetWindowsHookEx 注意:本文的鉤子和
區塊鏈100講:HTTPS協議的原理及其與HTTP協議的區別
1 HTTPS協議是什麼 https協議比http協議多了一個s,字面意思上s=secure(安全)。它跟http協議一樣都是應用層協議,都是工作在TCP協議之上。 只不過https協議在傳輸過程中的資料都是經過了加密。本質上HTTPS協議就是在TCP協議之上又加了一層SS
深度解析:IIC和SPI匯流排協議,有何不同?
[主從裝置]必須使用相同的工作引數——SCLK、CPOL 和 CPHA,才能正常工作。如果有多個[從裝置],並且它們使用了不同的工作引數,那麼[主裝置]必須在讀寫不同[從裝置]間重新配置這些引數。以上SPI匯流排協議的主要內容。SPI不規定最大傳輸速率,沒有地址方案;SPI也沒規定通訊應答機制,沒有規定流控制
MySQL(4):主從複製原理
1、主從複製概述 MySQL主從複製也可以稱為MySQL主從同步,它是構建資料庫高可用叢集架構的基礎。它通過將一臺主機的資料複製到其他一臺或多臺主機上,並重新應用relay log中的SQL語句來實現複製功能。MySQL支援單向、雙向、鏈式級聯、非同步複製,5.5版本之後加入的半同步複製,5.6版本之後
(轉)理論經典:TCP協議的3次握手與4次揮手過程詳解
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"
4: memcached原理 部署memcached 、 Session共享 總結和答疑
Top NSD OPERATION DAY04 1 案例1:構建memcached服務 1.1 問題 本案例要求先快速搭建好一臺memcached伺服器,並對memcached進行簡單的增、刪、改、查操作: 安裝memcached軟體,並啟動服務 使用teln
tcp/ip詳解卷一(筆記4:應用層應用與協議)
相關文章: tcp/ip詳解卷一(筆記1:概述與IP層協議) tcp/ip詳解卷一(筆記2:UDP及相關的協議) tcp/ip詳解卷一(筆記3:tcp與相關協議) 文章目錄 25 SNMP(簡單網路管理協議) 25.1 SNMP報文 25
大型網站的 HTTPS 實踐(1):HTTPS 協議和原理
1 前言 百度已經於近日上線了全站 HTTPS 的安全搜尋,預設會將 HTTP 請求跳轉成 HTTPS。本文重點介紹 HTTPS 協議, 並簡單介紹部署全站 HTTPS 的意義。 2 HTTPS 協議概述 HTTPS 可以認為是 HTTP + TLS。HTTP 協議
作業系統核心原理-4.執行緒原理(下):死鎖基礎原理
我們都見過交通阻塞,一大堆汽車因為爭奪行路權,互不相讓而造成阻塞,又或者因為車輛發生故障拋錨或兩輛車相撞而造成道路阻塞。在這種情況下,所有的車都停下來,誰也無法前行,這就是死鎖。本篇就來了解一下什麼是死鎖,如何應對死鎖。 一、死鎖初窺 1.1 為何會發生死鎖? 死鎖的發生歸根結底是因為對資源的競
作業系統核心原理-4.執行緒原理(上):執行緒基礎與執行緒同步
我們都知道,程序是運轉中的程式,是為了在CPU上實現多道程式設計而發明的一個概念。但是程序在一個時間只能幹一件事情,如果想要同時幹兩件或者多件事情,例如同時看兩場電影,我們自然會想到傳說中的分身術,就像孫悟空那樣可以變出多個真身。雖然我們在現實中無法分身,但程序卻可以辦到,辦法就是執行緒。執行緒就是我們為
科普:QUIC協議原理分析
作者介紹:lancelot,騰訊資深研發工程師。目前主要負責騰訊 stgw(騰訊安全雲網關)的相
HBase學習總結(4):HBase的工作原理
一、切分和分配大表 HBase中的表是由行和列組成的。HBase中的表可能達到數十億行和數百萬列。每個表的大小可能達到TB級,有時甚至PB級。這些表會切分成小一點兒的資料單位,然後分配到多臺伺服器上。