1 eMMC是什么
eMMC是embedded MultiMediaCard的簡稱,即嵌入式多媒體卡, 是一種閃存卡的標准,它定義了基於嵌入式多媒體卡的存儲系統的物理架構和訪問接口及協議,具體由電子設備工程聯合委員會JEDEC訂立和發布。它是對MMC的一個拓展,具有體積小,功耗低,容量大等優點,非常適合用作智能手機、平板電腦、移動互聯網設備等消費類電子設備的存儲介質。
2 eMMC的構成
eMMC是一種嵌入式、非易失的存儲系統,它主要由閃存、閃存控制器和eMMC協議接口等組成,以BGA的形式封裝在一起。eMMC的構成如下圖所示:
圖1 eMMC 系統結構圖
2.1 閃存
閃存是一種非易失性存儲器,通常用來存放數據,應用和系統程序等。
eMMC內部的閃存一般都屬於Nand Flash。
2.2 閃存控制器
閃存控制器主要用來對內部的Nand Flash進行操作和管理。
由於Nand Flash自身的物理特性,需要實現壞塊管理、磨損均衡、ECC等諸多功能,這些功能就是由FTL(Flash Translation Layer)來實現。eMMC內部集成的閃存控制器則實現了FTL等功能,減少了由於不同型號Nand Flash的各種特性差異,造成的軟件開發復雜度;同時閃存控制器也提供了Cache、Memory array、interleave等多種功能,大大提高了Nand Flash讀寫操作性能。
2.3 eMMC接口
eMMC接口主要實現將eMMC接入到Host的MMC總線上,與Host進行通信,實現eMMC的協議邏輯。
eMMC接口與Host之間的連接如下圖:
圖2 eMMC 接口圖
接口中各信號線的作用如下:
CLK: 時鍾信號,用於Host與Device間的同步。
Data Strobe:數據鎖存信號,Device端的輸出信號,用於HS400模式下,頻率與CLK相同,主要用於同步從Device端輸出的數據。
CMD: 用於傳輸從Host端發出的command和Device端發出的response。
DATA0 ~ DATA7: 用於在Host和Device間傳輸數據。
Reset :復位信號線,主要用於Host對Device進行復位操作。
3 eMMC的工作模式
eMMC共有5種不同的工作模式,具體如下表:
表1 eMMC工作模式
4 eMMC的內部寄存器
eMMC內部有6個不同的寄存器,主要用來存放eMMC的相關配置和狀態或設定eMMC的工作時的配置參數,方便Host查詢和操作eMMC。
內部寄存器的具體內容如下表:
表2 eMMC內部寄存器
4.1 設備識別寄存器
這是128bits的寄存器,里面存放單個設備獨一無二的信息,它符合eMMC協議,當設備處於識別狀態的時候,信息能夠被主機訪問。具體信息見下表:
表3 設備識別寄存器
4.2 相對設備地址寄存器
這是16bits的寄存器,一旦設備被識別,設備會被主機指定相對的地址,它存在其中。當傳輸數據的時候,主機利用這些信息選擇設備,規定這個寄存器默認的值為0X0001。如果地址變成0X0000,那么只有發送CMD7指令才可讓設備處於Stand-by State才可用。
4.3 驅動等級寄存器
這是16bits的寄存器,它規定設備的等級,設備能通過主機進行設置來增強設備的性能,例如總線的長度、傳輸的速率等參數。在設備具體數據寄存器中包括了這個寄存器使用方式的內容。這個寄存器的默認值是0x404。
4.4 設備具體數據寄存器
這是128bits的寄存器,它提供了主控如何去訪問設備的信息。它規定了數據格式、錯誤類型、最大數據訪問時間、數據傳輸速率、DSR寄存器是否可用等。其具體內容如下表:
表4 設備具體數據寄存器
4.5 操作條件寄存器
這是32bits的寄存器,此寄存器包含 eMMC Device 支持的電壓模式、數據尋址模式(按 Byte 尋址 or 按 Sector 尋址)以及 Busy 標志位。
表5 操作條件寄存器
4.6 擴展設備具體數據寄存器
這是4096bits的寄存器,規定了設備的屬性和選擇的模式。其中的最高的320Bytes是屬性塊,提供了設備的能力信息,這些屬性是只讀的,不能被改寫。最低的192Bytes是模式塊,定義了設備工作時的配置信息。這些配置信息可以通過命令改寫。
5 eMMC與其他存儲器件的對比
5.1 eMMC VS Nand Flash
如前所述,eMMC是將Nand Flash和Flash Controller和eMMC接口等封裝在一起的小型的存儲系統,這樣做的好處是:
1.簡化系統存儲設計,降低開發復雜度。生產Nand Flash的廠商眾多,有samsung、hynix、micron等許多廠商,每家生產的產品的技術特性都稍有差異,需要針對這些特性做兼容開發,開發非常復雜;而eMMC則規定了統一的協議接口,我們只需要根據協議做開發,就能兼容各個廠商的eMMC產品,開發過程大大簡化。
2.更新速度快。隨着Nand Flash制程工藝的不斷升級,主控的Flash Controller和FTL也需要不停的更新,才能支持新的Nand Flash。而eMMC將Flash Controller和Nand Flash封裝在了一起,屏蔽了由於Nand Flash制程工藝而帶來的差異,主控的controller和driver不需要做過多修改就能支持。
3.讀寫性能更好。eMMC在Nand Flash的基礎上,加入了Cache、Memory array等技術,大大提高了讀寫速度。
圖3 Nand Flash VS eMMC
5.2 eMMC VS MMC
如前所述,eMMC即embedded MMC,就是從MMC拓展而來,做了小型化處理,方便嵌入到板上,且速度方面做了提升,從0 ~ 52MHz提升到了0 ~ 200MHz。
5.3 eMMC VS UFS
與eMMC 一樣,UFS也是一種將Nand Flash和Flash controller即協議接口封裝在一起的存儲系統。但是兩者還是有很大的區別。
1.協議接口不一樣。eMMC使用的是8bit的並行接口,而UFS使用的是串行接口。eMMC和主控之間只能進行半雙工通信,而UFS與主控之間可以看下全雙工通信。
2.UFS的讀寫性能比eMMC高很多。如前所述,由於eMMC使用的是並行接口,這就限制了它的最高工作頻率,目前eMMC能支持的最高工作頻率是200MHz,及它的最大傳輸帶寬為400MB/s。而UFS使用的是串行接口,則可以突破這個限制,且能進行全雙工通信,大幅提高了讀寫性能。以下就是eMMC與UFS的讀寫性能的對比圖。
圖4 eMMC/UFS性能對比圖
參考資料
[1] eMMC 原理 2 :eMMC 簡介
http://www.wowotech.net/basic_tech/emmc_intro.html
[2] eMMC 設備寄存器
https://linux.codingbelief.com/zh/storage/flash_memory/emmc/emmc_device_registers.html
[3] MultiMediaCard
https://en.wikipedia.org/wiki/MultiMediaCard#eMMC

“內核工匠”微信公眾號
Linux 內核黑科技 | 技術文章 | 精選教程