1.EMMC和NAND FLASH
- Nand flash:一種存儲數據介質;若要讀取其中的數據,需要外接的主控電路。
- Nor flash:也是一種存儲介質;它的存儲空間一般比較小,但它可以不用初始化,可以在其內部運行程序,一般在其存儲一些初始化內存的固件代碼;
- emmc:全稱為embeded MultiMedia Card,是一種嵌入式非易失性存儲器系統,由Nand flash和Nand flash控制器組成,以BGA方式封裝在一款chip上。
eMMC=NAND閃存+閃存控制芯片+標準接口封裝
這里主要重點講的是emmc 和Nand flash 之間的區別,主要區別如下:
(1)、在組成結構上:
emmc存儲芯片簡化了存儲器的設計,將NAND Flash芯片和控制芯片以MCP技術封裝在一起,省去零組件耗用電路板的面積,同時也讓手機廠商或是計算機廠商在設計新產品時的便利性大大提高。
而NAND Flash僅僅只是一塊存儲設備,若要進行數據傳輸的話,只能通過主機端的控制器來進行操作,兩者的結構圖如下:
(2)、在功能上:
eMMC則在其內部集成了 Flash Controller,包括了協議、擦寫均衡、壞塊管理、ECC校驗、電源管理、時鐘管理、數據存取等功能。相比于直接將NAND Flash接入到Host 端,eMMC屏蔽了 NAND Flash 的物理特性,可以減少 Host 端軟件的復雜度,讓 Host 端專注于上層業務,省去對 NAND Flash 進行特殊的處理。同時,eMMC通過使用Cache、Memory Array 等技術,在讀寫性能上也比 NAND Flash要好很多。
而NAND Flash 是直接接入 Host 端的,Host 端通常需要有 NAND Flash Translation Layer,即 NFTL 或者 NAND Flash 文件系統來做壞塊管理、ECC等的功能。另一方面,emmc的讀寫速度也比NAND Flash的讀寫速度快,emmc的讀寫可高達每秒50MB到100MB以上;
2.EMMC硬件接口
主要有一下接口接口
- VDDI/VCC/VCCQ/CLK/RST:通用接口,其中VCC為MMC Controller/Flash Controller的供電電壓,VCCQ為Memory和Controller之間I/O的供電。
- CMD:控制接口,發送控制命令讀寫emmc寄存器
- DATA:數據接口D0-D7
3.EMMC控制時序
MMC通過發CMD的方式來實現卡的初始化和數據訪問。
Device Identification Mode包括3個階段
- Idle State
- Ready State
- Identification State。
(1)、Idle State下
eMMC Device會進行內部初始化,Host需要持續發送CMD1命令,查詢eMMC Device是否已經完成初始化,同時進行工作電壓和尋址模式協商:eMMC Device 在接收到這些信息后,會將OCR的內容(MMC出廠就燒錄在里面的卡的操作電壓值)通過 Response 返回給 Host,其中包含了 eMMC Device 是否完成初始化的標志位、設備工作電壓范圍 Voltage Range 和存儲訪問模式 Memory Access Mode 信息。
如果 eMMC Devcie 和 Host 所支持的工作電壓和尋址模式不匹配,那么 eMMC Device 會進入Inactive State。
(2)、Ready State
MMC完成初始化后,就會進入該階段。在該 State 下,Host 會發送 CMD2命令,獲取eMMC Device 的CID。
CID,即 Device identification number,用于標識一個 eMMC Device。它包含了 eMMC Device 的制造商、OEM、設備名稱、設備序列號、生產年份等信息,每一個 eMMC Device 的 CID 都是唯一的,不會與其他的 eMMC Device 完全相同。
eMMC Device 接收到CMD2后,會將 127 Bits 的CID的內容通過 Response返回給 Host。
(3)、Identification State
發送完 CID 后,eMMC Device就會進入該階段。
Host 會發送參數包含 16 Bits RCA 的CMD3命令,為eMMC Device 分配 RCA。設定完 RCA 后,eMMC Devcie 就完成了 Devcie Identification,進入 Data Transfer Mode。
emmc、Nand flash、Nor flash之間的區別:https://blog.csdn.net/xjw1874/article/details/81505967?utm_source=copy
EMMC 基本命令:https://blog.csdn.net/shenjin_s/article/details/85242990
emmc response:http://www.caotama.com/1984047.html
4.EMMC分區
eMMC 標準中,將內部的 Flash Memory 劃分為 4 類區域,最多可以支持 8 個硬件分區,如下圖所示:
eMMC 的每一個硬件分區的存儲空間都是獨立編址的,即訪問地址為 0 - partition size。
具體的數據讀寫操作實際訪問哪一個硬件分區,是由 eMMC 的 Extended CSD register 的 PARTITION_CONFIG Field 中 的 Bit[2:0]: PARTITION_ACCESS 決定的,用戶可以通過配置 PARTITION_ACCESS 來切換硬件分區的訪問。也就是說,用戶在訪問特定的分區前,需要先發送命令,配置 PARTITION_ACCESS,然后再發送相關的數據訪問請求。
4.1 Boot Area Partitions
Boot Area 包含兩個 Boot Area Partitions,主要用于存儲 Bootloader,支持 SOC 從 eMMC 啟動系統。
4.2 RPMB Partition
RPMB 在實際應用中,通常用于存儲一些有防止非法篡改需求的數據,例如手機上指紋支付相關的公鑰、序列號等。RPMB 可以對寫入操作進行鑒權,但是讀取并不需要鑒權,任何人都可以進行讀取的操作,因此存儲到 RPMB 的數據通常會進行加密后再存儲。
4.3 General Purpose Partitions
eMMC 提供了 General Purpose Partitions (GPP),主要用于存儲系統和應用數據。在很多使用 eMMC 的產品中,GPP 都沒有被啟用,因為它在功能上與 UDA 類似,產品上直接使用 UDA 就可以滿足需求。
4.4 User Data Area
User Data Area (UDA) 通常是 eMMC 中最大的一個分區,是實際產品中,最主要的存儲區域。
Boot Data 根據 Extended CSD register 的 PARTITION_CONFIG Field 的 Bit[5:3]:BOOT_PARTITION_ENABLE 的設定,可以從 Boot Area Partition 1、Boot Area Partition 2 或者 User Data Area 讀出。
eMMC 分區管理:https://linux.codingbelief.com/zh/storage/flash_memory/emmc/emmc_partitions.html