0.前言
本文主要參考eMMC規范,從總體上對eMMC 進行簡要介紹。主要包含如下的內容:
(1)eMMC系統的總體架構
(2)eMMC的總線協議
(3)device controller
(4)flash memory
1.eMMC系統總體架構
圖 eMMC 系統總體架構
eMMC規范主要定義了Device Controller和接口的相關規范,如圖中藍色部分標識
- power部分
(1)VCCQ主要用於MMC IO BLOCK的供電也就是與host接口IO部分的供電,同時也給eMMC core供電;
VCC主要給eMMC內部的flash memory,以及eMMC core與flash接口部分IO的供電;VCCQ和VCC分為兩種電壓,一種電壓是high voltage(2.7v~3.6v),一種電壓是dual voltage(1.70v~1.95v和2.7v~3.6v)
(2)VSSQ是IO的地也就是eMMC內部的CORE的地,VSS是eMMC內部的flash的地;
圖 eMMC供電
注:VCCQ一定要小於或等於VCC
- bus部分
有11條信號線:(1)clk, 0~200MHZ,每個cycle可以在上升沿或下降沿傳輸,也可以在上升沿和下降沿都傳輸;(2)data strobe,由slave device 發送給host controller,主要用在HS400 mode(5.1規范?),頻率與clk一致,用於host同步接收device的data(上升沿和下降沿有效),response和CRC status(只有上升沿有效);(3)cmd,雙向信號線,用於從host發送命令給device和device發送response給host,有兩種操作模式:open drain(初始化模式)和push pull(fast command transfer)(4) 8 bit data bus,雙向信號線,工作在push pull mode,支持 1bit, 4bit, 8bit傳輸,默認上電或reset后只有DATA0用於數據傳輸,可以通過命令配置有多少條數據線用於傳輸數據。在device內部,DAT1~DATA7包含上拉電阻,平時不使用時保持上拉狀態(也就是高電平??),使用時則斷開上拉。
- Host Controller
通過發送CMD讀寫device端數據或通過CMD對device端進行配置
- eMMC device controller
實現對memory的管理,接收bus端的CMD,實際讀寫I/O寄存器
- flash memory
包含了實際的存儲介質nand flash
圖 eMMC接口
注:
1.4.1規范之前使用32位地址,最高容量達到2G;
2.4.1之后采用512B扇區訪問模式,可支持大於2G的存儲空間
2. eMMC總線
2.1 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。
- command: 任何操作都要以CMD開始,只能由host發往device,且要串行完成;
- response: 在接收到host端發送的CMD,device作為回應將通過command line發送一個response,只能有device發往host,且只能通過command line串行傳輸;
- data: data可由host發送device(寫)可以由device發往host(讀),data線可采用1線,4線,8線傳輸,對於每條data線,可以選擇單沿傳輸(single data rate)還是雙沿傳輸 (dual data rate)
- crc status:用於device發送給host告知接收到的寫入數據校驗是否成功
2.2 bus speed modes
隨着 eMMC 協議的版本迭代,eMMC 總線的速率越來越高。為了兼容舊版本的 eMMC Device,所有 Devices 在上電啟動或者 Reset 后,都會先進入兼容速率模式(Backward Compatible Mode)。
在完成 eMMC Devices 的初始化后,Host 可以通過特定的流程,讓 Device 進入其他高速率模式,目前支持以下的幾種速率模式

2.3 clk control
1.總線速率在任何時刻都可以改變;
2.不帶回應的命令,命令結束位后有8個clock;
3.帶有回應的命令,設備響應結束位后有8個clock;
4.讀數據傳輸。在上個data blcok的結束位后有8個clock;
5.寫數據傳輸,CRC status token結束位后有8個clock
2.4 Error conditions
1.CRC and illegal command
如果發送給某地址的設備的命令的CRC檢測錯誤,則不會執行這條命令,也不會回應
2.Time-out conditions
讀寫擦除操作的超時時間,一般超時時間是典型時間的10倍,spec中規定了每種操作的超時時間
3.Read ahead in multiple block read operation
為了提高效率,當有多個塊讀取時,設備可能會超前讀取,如果host讀取的最后一個物理地址,那么device會出錯,因此host要忽略這個錯誤
2.5 Minimum performance
TODO,參考spec6.9.2
2.6 Memory array partitioning
BYTE:基本的傳輸單元
BLOCK:面向讀寫命令的操作單元
GROUP: for erase and WP
2.7 timing
TODO 見 spec 6.15
3. device controller
NAND Flash 直接接入 Host 時,Host 端通常需要有 NAND Flash Translation Layer,即 NFTL 或者 NAND Flash 文件系統來做壞塊管理、ECC等的功能。
eMMC 則在其內部集成了 Flash Controller,用於完成擦寫均衡、壞塊管理、ECC校驗等功能。
相比於直接將 NAND Flash 接入到 Host 端,eMMC 屏蔽了 NAND Flash 的物理特性,可以減少 Host 端軟件的復雜度,讓 Host 端專注於上層業務,省去對 NAND Flash 進行特殊的處理。
同時,eMMC 通過使用 Cache、Memory Array 等技術,在讀寫性能上也比 NAND Flash 要好很多。

圖 NAND Flash 與 eMMC
3.1 eMMC操作模式

3.2 device寄存器

圖 eMMC寄存器
有三種方式可以對設備reset:
1.斷電在上電;
2.reset信號;
3.發送特定命令
4. flash memory
4.1 分區管理

-
BOOT Area Partition 1 & 2
此分區主要是為了支持從 eMMC 啟動系統而設計的。
該分區的數據,在 eMMC 上電后,可以通過很簡單的協議就可以讀取出來。同時,大部分的 SOC 都可以通過 GPIO 或者 FUSE 的配置,讓 ROM 代碼在上電后,將 eMMC BOOT 分區的內容加載到 SOC 內部的 SRAM 中執行。 -
RPMB Partition
RPMB 是 Replay Protected Memory Block 的簡稱,它通過 HMAC SHA-256 和 Write Counter 來保證保存在 RPMB 內部的數據不被非法篡改。
在實際應用中,RPMB 分區通常用來保存安全相關的數據,例如指紋數據、安全支付相關的密鑰等。 -
General Purpose Partition 1~4
此區域則主要用於存儲系統或者用戶數據。 General Purpose Partition 在芯片出廠時,通常是不存在的,需要主動進行配置后,才會存在。 -
User Data Area
此區域則主要用於存儲系統和用戶數據。
User Data Area 通常會進行再分區,例如 Android 系統中,通常在此區域分出 boot、system、userdata 等分區。
更多 eMMC 分區相關的細節,請參考 eMMC基礎技術: 分區管理 章節。