存儲【2】 eMMC分區詳解

轉載請註明出處,謝謝:http://blog.sina.com.cn/s/blog_5c401a150101jcos.html

最近總結了一下關於eMMC分區的一些資料,在此分享給大家,希望對大家在這方面的工作有所幫助:

     大家一般所熟悉的分區的概念是在邏輯上將一個磁盤或存儲設備分爲幾個區,每個區當做獨立磁盤,以方便使用和管理。例如第一個磁盤的第一個分區叫做sda1,第二個磁盤的第二個分區叫做sda2;第二個磁盤的第一個分區叫做sdb1,第二個磁盤的第二個分區叫做sdb2。

     大家所最爲熟知的分區方式同時也是最主流的主要有兩種:MBR(MasterBoot Record)和GPT(GUID PartitionTable)。前者應用於絕大多數使用BIOS引導的PC設備(蘋果使用EFI的方式),而後者主要是針對MBR的一些缺點進行了改進同時還可以兼容MBR並且支持2TB以上的存儲(MBR不支持2TB以上的存儲設備)。

     Android 2.x.x 版本上使用的是MBR,4.0版本以後就是使用的GPT分區方式。

 

     注意,不管是MBR還是GPT,他們的分區都是指“邏輯上”的!!!即通過軟件實現的,文件系統級別的。而我現在要說明的是eMMC本身自己的分區,即物理上的,不是通過軟件就能實現的分區。

     EMMC的分區有一些是AP不能修改的(如BOOT1、BOOT2和RPMB分區),有一些是可以通過特定的命令和寄存器就可以修改的(如EnhancedPartition和GPAP)。下面就來集體說明一下:

     通常,從廠家出來的eMMC主要由這幾個部分組成:

1.   BOOT Area Partition 1

2.   BOOT Area Partition 2

3.   RPMB

4.   User Data Area

5.   Vender private area

[轉載]eMMC分區詳解

上面這5個部分中前4項是AP可以通過配置寄存器進行讀寫並且User DataArea還可以進行分區配置的,如上圖所示;下面來對上面的5個部分做一個詳細說明:

1.   Boot 1 & Boot 2

這兩個分區是由廠家在生產過程中配置好了的,並且其大小是不能由AP進行配置的,當然,如果你的公司夠牛,量足夠大,並且也有這個需求的時候可以去要求廠家重新配置此區域大小,給你專門供貨。

Boot 1 和Boot2這兩個區域在存儲的穩定性、可靠性及擦除次數上都遠比UDA要好(至於原因請往後看),所以很多chipset上都會使用這兩個區域來存放一下關鍵數據,如bootimage,default配置參數等等。當然不同的chipset的配置方法也不盡相同。這個可以找chipset的工程師詢問。據筆者所知:以大陸市佔最大的兩家chipset爲例,MTK使用UDA來存放bootdata,而使用bootarea來存放配置參數;Qualcomm則使用Boot 1 來存放boot data,boot 2 來存放配置參數。

另外,不同的eMMC版本一般對Boot area和RPMB的容量大小需求也不同,如下作一個簡單的參考:

[轉載]eMMC分區詳解

 

2.   RPMB

RPMB是ReplayProtected Memory Block的縮寫,他的存在目的是用來給系統存放一些特殊的、需要進行訪問授權的數據;他的請求及迴應類型如下所:

[轉載]eMMC分區詳解

     據筆者所知,目前大陸的手機及平板廠商還沒有一家使用到此區域的。

3.   UDA

User Data Area就是AP及用戶可以進行讀寫存儲的區域,通常其大小爲整塊EMMC表示大小的93%左右,即4GB的eMMCUDA的區域只有4GB*93%=3809MB。

[轉載]eMMC分區詳解

     之前說的BOOT1&2、RPMB和UDA區域我們都可以認爲他們在物理上是獨立的(當然都是存在於同一塊die上)。即他們各自的物理起始地址都是0x0。這個在出廠的時候就會設置完成。下面我們就來說兩種可以在物理上進行獨立分區的方式:

a)        GPAP

GPAP即GeneralPurpose Area Partitions,eMMC 的spec上定義每個eMMC 最多可以通過配置寄存器來定義4個GPAP:

[轉載]eMMC分區詳解

[轉載]eMMC分區詳解

     GPAP配置定義完成之後每一個GPAP的起始地址都爲0x0;即可以相應地將其認爲是獨立的一塊區域。只是在存放數據的時候會需要從新根據他的起始地址進行計算然後再存儲數據。這樣必然會增加一定的工作量;據筆者所知,目前大陸的手機及平板幾乎沒有用到這個功能。都是使用一整塊的UDA,然後通過文件系統去進行邏輯上的分區使用。

     我想肯定會有讀者想問那這個功能到底有什麼用呢?我想說eMMC是一個通過的存儲設備,並不止是爲手機和平板使用。當一個設備有多個CPU的時候並且他們的功能還不同時,這個時候使用GPAP這個功能就非常方便了。

b)       Enhanced Partition

EnhancedPartition這也是一個在手機及平板上使用較少的功能。爲什麼通過配置原本的UDA就可以變成“Enhanced”的呢?既然這麼有用,爲什麼不將整個UDA配置成爲”Enhanced”的呢?彆着急,我來一一作答。

我們知道eMMC只是指他的接口標準,而他真正的存儲介質還是NAND Flash,而NAND又分爲SLC、MLC和TLC(詳細區別請參考我之前的文章),他們的穩定性、可靠性和擦除次數又有很大區別,當然中國廠商最關心的成本也相差很大;目前市場上主流的eMMC還是以MLC的NAND存儲介質爲主,而TLC的eMMC也在逐漸的增加。其中以Samsung的TLC 的emmc最爲成熟市佔率也最高。我們這裏先以MLC的EMMC來進行介紹:

     以現在市面上最先進的NAND製程20nm的MLC爲例,擦除次數大概在3000~5000cycle。而SLC的擦除次數則在25000~40000cycle。很明顯SLC要比MLC性能更好,數據存儲更穩定。

[轉載]eMMC分區詳解

[轉載]eMMC分區詳解

     而我們這裏介紹的EnhancedPartition的主要功能就是將MLC配置成爲SLC。現在大家明白他爲什麼被稱之爲“Enhanced”的了!是相對於MLC(也就是defaultstorage media)來說的。

     當然,從MLC配置爲SLC不是沒有代價的,這個代價自然就是容量變小,會變多小呢?容量只有原來的一半!!!原本1GB的MLC通過配置成SLC就只剩下512MB了,你說誰會願意這樣去大容量地轉換呢?

     據筆者所知,目前使用過這個功能的就只有臺灣的HTC,他們是用來存儲bootdata。另外,大陸也有一家大廠正在嘗試使用EnhancedPartition來做爲swap 虛擬內存使用。

4.   Vender Private Area

在eMMC裏面除了AP能操作(即可識別並且可以通過地址進行訪問)的boot1&2、RPMB和UDA之外,其實還有一小部分區域是AP看不見也不能進行操作的。這部分區域是由生產廠家預留的,他主要是用來存放這樣一些內容:eMMC的FW(想知道是什麼請參考我之前的文章),eMMC在boot的時候的code,FTL(FlashTransilation Layer)以及在廠家生產過程中產生的壞塊等等。

 

PS: 不是所有廠家的eMMC都支持EnhancedPartition這個功能,但是隻要這個eMMC是支持這個功能的那麼他的BOOTArea和RPMB就必須就Enhanced storagemedia。

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