【朱老師IT充電站】EMMC和Nand是不是還傻傻分不清楚


【朱老師IT充電站】EMMC和Nand是不是還傻傻分不清楚

1.背景

今天偶然在一個群裡看到有人聊EMMC和Nand,相信很多嵌入式er都用過或者至少聽說過這2種板載存儲芯片,但是很多人不清楚這2種的差異,也不明白什麼時候應該用EMMC什麼時候用Nand,如何選擇?今天我們就來聊聊這個問題。


【朱老師IT充電站】EMMC和Nand是不是還傻傻分不清楚

2.Nand是這樣的

Nand是一種flash,所以又叫NandFlash。大家知道Flash叫閃存(flash這個英語單詞就有閃爍的意思),閃存這種存儲設備是用電信號來做擦除和讀寫的。也就是說你可以把Flash看成是一個二進制數據倉庫,你可以用電信號擦除它(清除掉倉庫裡的存貨),也可以用電信號讀取它(將倉庫內存儲的物品取出),也可以用電信號寫入它(將物品放入倉庫儲存)。

好,問題來了,怎麼去擦除、讀寫呢?這東西又聽不懂人話,所以必須按照它的時序規則用電平信號和他交互。


【朱老師IT充電站】EMMC和Nand是不是還傻傻分不清楚

NandFlash實物圖

【朱老師IT充電站】EMMC和Nand是不是還傻傻分不清楚

NandFlash和STM32單片機的連接接線圖

上圖中上面是一個NandFlash實物圖,大家可以看到有很多引腳。下面是NandFlash和STM32單片機的連接接線圖。

這些芯片上的引腳就是Nand和外界進行數據交流的通道。其中IO0-IO15是數據通道,通信時的地址和數據就是從這些引腳傳輸的。而CLE、ALE等剩餘引腳就是時序控制線,用來做通信控制和同步。當然Nand工作時還需要供電的,圖中並沒有畫出電源引腳但是實際是有的。

這就是NandFlash,通過很多個引腳(圖中可見至少二三十個)和外界通信,很大的一個薄片狀芯片。能存儲數據。

常見Nand的容量一般幾十Mb到幾個Gb(注意存儲設備的容量都是b而不是B),應該說容量不算大。

Nand內部的存儲單元有兩大類,MLC和SLC。具體的細節暫不去管,大家只需要知道SLC Nand容量小价格高,但是質量好不容易壞。而MLC Nand容量大價格便宜,但是質量不好容易出現壞塊。其實不能說是質量好壞,而是工藝本身特性決定的,咱們反正是科普,就簡單粗暴給他歸個類吧。


3.Nand的優勢和劣勢

Nand的優勢都是相對於它的前代產品來說的。在Nand之前,人類使用的大容量存儲主要是磁性存儲(軟盤、硬盤)和光存儲(DVD光盤),這些東西都不太完美。譬如光盤不能反覆擦寫而且讀盤設備和盤片都經常壞(大家你想想家裡老式光碟機是不是經常讀不出盤),硬盤雖然今天也還在大量用,但是速度有極限並且體積太大,所以今天的高端筆記本電腦都不用機械硬盤改用SSD了(SSD其實也是Flash)。

我們主要講講Nand的劣勢。

Nand的第1大劣勢就是接口和時序不標準。大家可能沒意識到,NandFlash其實是一個品類而不是一個固定產品,你去看全世界有多家公司都在生產Nand,但是他們的產品並不能直接通用,也就是說你不能把一款Nand直接替換另一款而不需改動軟硬件。這就頭痛了,麻煩的要死。

Nand的第2大劣勢就是引腳太多,體積大。所以Nand芯片不能用在對體積要求很高的小型產品上,這極大限制了Nand的直接使用。

Nand的第3大劣勢就是容量不能靈活控制。就算你用同一家廠商的Nand芯片,但是不同容量的芯片引腳接口和封裝等也可能不同,這樣你如果做產品時有不同容量版本的產品,還得分開設計,分開生產,很麻煩。

Nand的第4大劣勢就是壞塊的管理。存儲設備其實就相當於有很多小房間的一個大倉庫,而這個倉庫的每個小房間都是獨立的。因為技術原因有時候一些小房間就會壞掉,沒法使用,那我們不可能因為一個小房間壞掉了就把整個倉庫都丟掉吧?

於是乎人們就發明了壞塊管理技術。也就是說我們去標記上每個房間是好的還是壞的,如果發現某個房間壞了那就標記成壞塊,就不再使用這個房間了,而其他的好塊還是可以繼續用的。這種壞塊管理技術可以很大程度延長Nand的整體壽命。

和壞塊相似的還有個ECC(錯誤校驗)問題。正常情況下Nand中每個好塊中存儲的數據都會一直保持正確,即使過了幾年時間你去讀他還是原來的數據。但是事實往往沒有這麼理想,有時候一些塊中的某些特定位就是會在隔了一段時間去讀取時發生了翻轉,這裡原來存進去是1結果讀出來是0了。

這就難受了啊,最痛苦的是你也不知道原來存進去到底是1還是0,也不確定讀出來的還是不是原來的數,所以搞得你沒法相信任何一個數據,因為任何一個數據都有可能會翻轉啊,那豈不是整個數據都不可信了。

解決辦法就是ECC,我們寫入時先用算法計算得到數據的ECC值,把ECC值和塊內數據一起存入Nand中。待讀出時也是把塊內數據和ECC一起讀出,然後再用相同的算法計算塊內數據的ECC,和讀出的ECC進行比較,如果相同就認為數據未發生任何反轉,如果不同就認為數據已經發生變質,沒法相信了。

本來有壞塊標記和ECC技術,Nand已經挺好用了,也確實可以用了。但是麻煩的是Nand的ECC和壞塊標記都需要主控CPU來做,Nand自己是不管的。所以使用Nand很麻煩,你得編程解決很多細節問題(時序、ECC、壞塊管理)。

所以Nand最大的問題,其實就是不夠好用。那怎麼辦呢?進化。


4.EMMC其實是從Nand進化而來

EMMC其實就是Nand包了一層後形成的。

EMMC內部真正用來存儲的倉庫就是Nand,而且EMMC基本都是MLC Nand,因為便宜啊。那EMMC解決了Nand的什麼問題呢?

首先,EMMC是封裝和引腳都是標準的。什麼標準?就叫EMMC標準。所以EMMC這個詞其實本來就是個接口標準名,符合EMMC接口的存儲芯片就叫EMMC芯片。

這個標準體現在至少三個方面:物理封裝、硬件電平和腳位、軟件時序。所以所有的EMMC芯片,不管是哪家廠家的,不管是多大容量的,都可以直接替換使用。因為人家設計EMMC標準的時候就已經考慮到這種兼容和替換了(當然了,實際上EMMC也有好幾種封裝,但是一般硬件工程師做封裝時都會考慮幾種兼容的)。

所以EMMC解決了Nand的一個大問題,就是不同廠家和容量的存儲芯片之間的替換問題,這個非常厲害。因為兼容可以方便備貨,方便採購,方便替換,所以極大降低了產品設計和備貨上的難度,極大降低了成本。

舉個栗子,大家買手機都會發現現在的手機發布都有不同容量版本選擇,什麼256G、128G、64G版。你想想廠商和經銷商要備貨這麼多種,多難受?但是如果用EMMC呢?所有的手機主板其實都是完全一樣的,只是實際生產時貼上了不同容量的EMMC芯片而已。而且最重要的是軟件上不用做任何改動,軟件可以自適應不同容量的EMMC芯片。這樣手機廠商就不用給不同容量的手機適配不同的操作系統鏡像了啊,多省心。所以你明白為什麼手機都用EMMC而不用Nand了吧

EMMC的引腳比Nand也更少,體積也更小。當然了EMMC體積小也有很重要原因是因為他採用了更先進的BGA封裝方式。所以體積的優勢也不算根本優勢,如果Nand也用BGA封裝也可以做的小,只是說Nand沒這個必要性了。

最後,EMMC也解決了Nand的時序、壞塊和ECC問題。

本質上因為EMMC內部也是用Nand存儲顆粒(而且是MLC Nand更容易壞)的所以也逃不過Nand的這些麻煩。但是EMMC芯片在內部內置了一個控制器(你可以理解為內部有個CPU且跑了一段固件代碼),這個控制器解決了這幾個問題,尤其是壞塊管理和ECC的問題。

所以你做產品用Nand就麻煩,得自己操這些心。而你做產品用EMMC就省心了,自己不用管這些破事,EMMC全部幫你搞定了,何樂而不為呢?從這個角度講EMMC好像自動擋汽車,而Nand好像手動擋汽車。(我發現我好喜歡用自動擋和手動擋的對比·····)


5.EMMC和Nand的性價比

有人說不對呀,看你說的EMMC明顯比Nand好啊,為什麼我發現EMMC好像還比Nand便宜呢?

EMMC從技術上確實比Nand好,但是也確實比Nand便宜。主要原因是成本並不只是由硬性成本決定的,還和市場、規模等因素有關。

EMMC便宜的一大原因就是因為標準化。標準就可以大規模生產,大規模流通,大規模壓貨,大規模使用。而用的多了產量大了,自然成本就低了。所以EMMC的大規模性就決定了他的成本很有優勢。

EMMC便宜的另一大原因是內部使用MLC而不是SLC。實際上SLC的成本要遠高於MLC的,但是市場上流通的Nand很多還是SLC,為什麼?因為MLC“質量”太差了,太容量出現壞塊和翻轉等,所以廣泛使用的Nand還都是SLC的。你如果直接用MLC Nand,那你的管理成本又很高,太麻煩了。而EMMC解決了這個問題,他內置的控制器很好的管理了MLC Nand,因此可以做到容量很大、使用簡單,還便宜。

所以說,能幹髒活就是生產力啊。


6.如何選擇用哪個

實際項目中我們是用EMMC還是Nand呢?

實際上如果你的產品需要大容量(譬如超過8Gb也就是1GB或更大),那一定是EMMC更合適。性價比更高,且軟件上更簡單。

那什麼時候用Nand呢?需要容量在幾十MB(譬如64MB)到幾百個MB(譬如512MB)之間的存儲,且不在意體積,且對穩定性要求高的情況下,可以用SLC Nand。

那工業級和抗干擾方面呢?我並沒有專業研究過,但是簡單分析也知道,Nand在這方面肯定比EMMC好一些。畢竟EMMC是串行的要保證高速肯定總線速度高,而Nand是並行的總線速度肯定低。所以Nand應該要比EMMC皮實一些吧?

但是EMMC也是有工業級和消費級之分的,你做的產品真的是工業環境使用完全是可以用EMMC的,所以也不要鼓吹什麼消費電子用EMMC,軍工用Nand這種說法。


7.最後

實際上存儲市場除了Nand和EMMC之外還有很多其他角色也都很厲害。

譬如Norflash、譬如近年來很火的spiflash(常見的是spinor,但是現在也有大容量的spinand了),譬如這兩年創新設計的SDnand(相當於是貼片芯片樣式的SD卡)。

技術其實一直都在創新。

最後,本文完全是從我的經驗和積累來寫,並沒有嚴格查閱資料。限於水平和專業性,裡面如果有錯漏或者表達不當的地方,希望大家指正,共同進步。


分享到:


相關文章: