EMMC和Nand是不是還傻傻分不清楚
推薦語(yǔ)
本次推薦的是朱老師寫的關(guān)于EMMC和Nand的科普性區(qū)分的文章,通過文章我們可以通俗易懂地理解Nand與EMMC的一些關(guān)聯(lián)及不同之處。下轉(zhuǎn)原文:
1.背景
今天偶然在一個(gè)群里看到有人聊EMMC和Nand,相信很多嵌入式er都用過或者至少聽說過這2種板載存儲(chǔ)芯片,但是很多人不清楚這2種的差異,也不明白什么時(shí)候應(yīng)該用EMMC什么時(shí)候用Nand,如何選擇?今天我們就來聊聊這個(gè)問題。
2.Nand是這樣的
上圖中左側(cè)是一個(gè)NandFlash實(shí)物圖,大家可以看到有很多引腳。右側(cè)是NandFlash和STM32單片機(jī)的連接接線圖。
這些芯片上的引腳就是Nand和外界進(jìn)行數(shù)據(jù)交流的通道。其中IO0-IO15是數(shù)據(jù)通道,通信時(shí)的地址和數(shù)據(jù)就是從這些引腳傳輸?shù)?。而CLE、ALE等剩余引腳就是時(shí)序控制線,用來做通信控制和同步。當(dāng)然Nand工作時(shí)還需要供電的,圖中并沒有畫出電源引腳但是實(shí)際是有的。
這就是NandFlash,通過很多個(gè)引腳(圖中可見至少二三十個(gè))和外界通信,很大的一個(gè)薄片狀芯片。能存儲(chǔ)數(shù)據(jù)。
常見Nand的容量一般幾十Mb到幾個(gè)Gb(注意存儲(chǔ)設(shè)備的容量都是b而不是B),應(yīng)該說容量不算大。
Nand內(nèi)部的存儲(chǔ)單元有兩大類,MLC和SLC。具體的細(xì)節(jié)暫不去管,大家只需要知道SLC Nand容量小價(jià)格高,但是質(zhì)量好不容易壞。而MLC Nand容量大價(jià)格便宜,但是質(zhì)量不好容易出現(xiàn)壞塊。其實(shí)不能說是質(zhì)量好壞,而是工藝本身特性決定的,咱們反正是科普,就簡(jiǎn)單粗暴給他歸個(gè)類吧。
3.Nand的優(yōu)勢(shì)和劣勢(shì)
Nand的優(yōu)勢(shì)都是相對(duì)于它的前代產(chǎn)品來說的。在Nand之前,人類使用的大容量存儲(chǔ)主要是磁性存儲(chǔ)(軟盤、硬盤)和光存儲(chǔ)(DVD光盤),這些東西都不太完美。譬如光盤不能反復(fù)擦寫而且讀盤設(shè)備和盤片都經(jīng)常壞(大家你想想家里老式光碟機(jī)是不是經(jīng)常讀不出盤),硬盤雖然今天也還在大量用,但是速度有極限并且體積太大,所以今天的高端筆記本電腦都不用機(jī)械硬盤改用SSD了(SSD其實(shí)也是Flash)。
我們主要講講Nand的劣勢(shì)。
Nand的第1大劣勢(shì)就是接口和時(shí)序不標(biāo)準(zhǔn)。大家可能沒意識(shí)到,NandFlash其實(shí)是一個(gè)品類而不是一個(gè)固定產(chǎn)品,你去看全世界有多家公司都在生產(chǎn)Nand,但是他們的產(chǎn)品并不能直接通用,也就是說你不能把一款Nand直接替換另一款而不需改動(dòng)軟硬件。這就頭痛了,麻煩的要死。
Nand的第2大劣勢(shì)就是引腳太多,體積大。所以Nand芯片不能用在對(duì)體積要求很高的小型產(chǎn)品上,這極大限制了Nand的直接使用。
Nand的第3大劣勢(shì)就是容量不能靈活控制。就算你用同一家廠商的Nand芯片,但是不同容量的芯片引腳接口和封裝等也可能不同,這樣你如果做產(chǎn)品時(shí)有不同容量版本的產(chǎn)品,還得分開設(shè)計(jì),分開生產(chǎn),很麻煩。
Nand的第4大劣勢(shì)就是壞塊的管理。存儲(chǔ)設(shè)備其實(shí)就相當(dāng)于有很多小房間的一個(gè)大倉(cāng)庫(kù),而這個(gè)倉(cāng)庫(kù)的每個(gè)小房間都是獨(dú)立的。因?yàn)榧夹g(shù)原因有時(shí)候一些小房間就會(huì)壞掉,沒法使用,那我們不可能因?yàn)橐粋€(gè)小房間壞掉了就把整個(gè)倉(cāng)庫(kù)都丟掉吧?
于是乎人們就發(fā)明了壞塊管理技術(shù)。也就是說我們?nèi)?biāo)記上每個(gè)房間是好的還是壞的,如果發(fā)現(xiàn)某個(gè)房間壞了那就標(biāo)記成壞塊,就不再使用這個(gè)房間了,而其他的好塊還是可以繼續(xù)用的。這種壞塊管理技術(shù)可以很大程度延長(zhǎng)Nand的整體壽命。
和壞塊相似的還有個(gè)ECC(錯(cuò)誤校驗(yàn))問題。正常情況下Nand中每個(gè)好塊中存儲(chǔ)的數(shù)據(jù)都會(huì)一直保持正確,即使過了幾年時(shí)間你去讀他還是原來的數(shù)據(jù)。但是事實(shí)往往沒有這么理想,有時(shí)候一些塊中的某些特定位就是會(huì)在隔了一段時(shí)間去讀取時(shí)發(fā)生了翻轉(zhuǎn),這里原來存進(jìn)去是1結(jié)果讀出來是0了。
這就難受了啊,最痛苦的是你也不知道原來存進(jìn)去到底是1還是0,也不確定讀出來的還是不是原來的數(shù),所以搞得你沒法相信任何一個(gè)數(shù)據(jù),因?yàn)槿魏我粋€(gè)數(shù)據(jù)都有可能會(huì)翻轉(zhuǎn)啊,那豈不是整個(gè)數(shù)據(jù)都不可信了。
解決辦法就是ECC,我們寫入時(shí)先用算法計(jì)算得到數(shù)據(jù)的ECC值,把ECC值和塊內(nèi)數(shù)據(jù)一起存入Nand中。待讀出時(shí)也是把塊內(nèi)數(shù)據(jù)和ECC一起讀出,然后再用相同的算法計(jì)算塊內(nèi)數(shù)據(jù)的ECC,和讀出的ECC進(jìn)行比較,如果相同就認(rèn)為數(shù)據(jù)未發(fā)生任何反轉(zhuǎn),如果不同就認(rèn)為數(shù)據(jù)已經(jīng)發(fā)生變質(zhì),沒法相信了。
本來有壞塊標(biāo)記和ECC技術(shù),Nand已經(jīng)挺好用了,也確實(shí)可以用了。但是麻煩的是Nand的ECC和壞塊標(biāo)記都需要主控CPU來做,Nand自己是不管的。所以使用Nand很麻煩,你得編程解決很多細(xì)節(jié)問題(時(shí)序、ECC、壞塊管理)。
所以Nand最大的問題,其實(shí)就是不夠好用。那怎么辦呢?進(jìn)化。
4.EMMC其實(shí)是從Nand進(jìn)化而來
EMMC其實(shí)就是Nand包了一層后形成的。
EMMC內(nèi)部真正用來存儲(chǔ)的倉(cāng)庫(kù)就是Nand,而且EMMC基本都是MLC Nand,因?yàn)楸阋税?。那EMMC解決了Nand的什么問題呢?
首先,EMMC是封裝和引腳都是標(biāo)準(zhǔn)的。什么標(biāo)準(zhǔn)?就叫EMMC標(biāo)準(zhǔn)。所以EMMC這個(gè)詞其實(shí)本來就是個(gè)接口標(biāo)準(zhǔn)名,符合EMMC接口的存儲(chǔ)芯片就叫EMMC芯片。
這個(gè)標(biāo)準(zhǔn)體現(xiàn)在至少三個(gè)方面:物理封裝、硬件電平和腳位、軟件時(shí)序。所以所有的EMMC芯片,不管是哪家廠家的,不管是多大容量的,都可以直接替換使用。因?yàn)槿思以O(shè)計(jì)EMMC標(biāo)準(zhǔn)的時(shí)候就已經(jīng)考慮到這種兼容和替換了(當(dāng)然了,實(shí)際上EMMC也有好幾種封裝,但是一般硬件工程師做封裝時(shí)都會(huì)考慮幾種兼容的)。
所以EMMC解決了Nand的一個(gè)大問題,就是不同廠家和容量的存儲(chǔ)芯片之間的替換問題,這個(gè)非常厲害。因?yàn)榧嫒菘梢苑奖銈湄洠奖悴少?gòu),方便替換,所以極大降低了產(chǎn)品設(shè)計(jì)和備貨上的難度,極大降低了成本。
舉個(gè)栗子,大家買手機(jī)都會(huì)發(fā)現(xiàn)現(xiàn)在的手機(jī)發(fā)布都有不同容量版本選擇,什么256G、128G、64G版。你想想廠商和經(jīng)銷商要備貨這么多種,多難受?但是如果用EMMC呢?所有的手機(jī)主板其實(shí)都是完全一樣的,只是實(shí)際生產(chǎn)時(shí)貼上了不同容量的EMMC芯片而已。而且最重要的是軟件上不用做任何改動(dòng),軟件可以自適應(yīng)不同容量的EMMC芯片。這樣手機(jī)廠商就不用給不同容量的手機(jī)適配不同的操作系統(tǒng)鏡像了啊,多省心。所以你明白為什么手機(jī)都用EMMC而不用Nand了吧
EMMC的引腳比Nand也更少,體積也更小。當(dāng)然了EMMC體積小也有很重要原因是因?yàn)樗捎昧烁冗M(jìn)的BGA封裝方式。所以體積的優(yōu)勢(shì)也不算根本優(yōu)勢(shì),如果Nand也用BGA封裝也可以做的小,只是說Nand沒這個(gè)必要性了。
最后,EMMC也解決了Nand的時(shí)序、壞塊和ECC問題。本質(zhì)上因?yàn)镋MMC內(nèi)部也是用Nand存儲(chǔ)顆粒(而且是MLC Nand更容易壞)的所以也逃不過Nand的這些麻煩。但是EMMC芯片在內(nèi)部?jī)?nèi)置了一個(gè)控制器(你可以理解為內(nèi)部有個(gè)CPU且跑了一段固件代碼),這個(gè)控制器解決了這幾個(gè)問題,尤其是壞塊管理和ECC的問題。
所以你做產(chǎn)品用Nand就麻煩,得自己操這些心。而你做產(chǎn)品用EMMC就省心了,自己不用管這些破事,EMMC全部幫你搞定了,何樂而不為呢?從這個(gè)角度講EMMC好像自動(dòng)擋汽車,而Nand好像手動(dòng)擋汽車。(我發(fā)現(xiàn)我好喜歡用自動(dòng)擋和手動(dòng)擋的對(duì)比·····)
5.EMMC和Nand的性價(jià)比
有人說不對(duì)呀,看你說的EMMC明顯比Nand好啊,為什么我發(fā)現(xiàn)EMMC好像還比Nand便宜呢?
EMMC從技術(shù)上確實(shí)比Nand好,但是也確實(shí)比Nand便宜。主要原因是成本并不只是由硬性成本決定的,還和市場(chǎng)、規(guī)模等因素有關(guān)。
EMMC便宜的一大原因就是因?yàn)闃?biāo)準(zhǔn)化。標(biāo)準(zhǔn)就可以大規(guī)模生產(chǎn),大規(guī)模流通,大規(guī)模壓貨,大規(guī)模使用。而用的多了產(chǎn)量大了,自然成本就低了。所以EMMC的大規(guī)模性就決定了他的成本很有優(yōu)勢(shì)。
EMMC便宜的另一大原因是內(nèi)部使用MLC而不是SLC。實(shí)際上SLC的成本要遠(yuǎn)高于MLC的,但是市場(chǎng)上流通的Nand很多還是SLC,為什么?因?yàn)镸LC“質(zhì)量”太差了,太容量出現(xiàn)壞塊和翻轉(zhuǎn)等,所以廣泛使用的Nand還都是SLC的。你如果直接用MLC Nand,那你的管理成本又很高,太麻煩了。而EMMC解決了這個(gè)問題,他內(nèi)置的控制器很好的管理了MLC Nand,因此可以做到容量很大、使用簡(jiǎn)單,還便宜。
所以說,能干臟活就是生產(chǎn)力啊。
6.如何選擇用哪個(gè)
實(shí)際項(xiàng)目中我們是用EMMC還是Nand呢?
實(shí)際上如果你的產(chǎn)品需要大容量(譬如超過8Gb也就是1GB或更大),那一定是EMMC更合適。性價(jià)比更高,且軟件上更簡(jiǎn)單。
那什么時(shí)候用Nand呢?需要容量在幾十MB(譬如64MB)到幾百個(gè)MB(譬如512MB)之間的存儲(chǔ),且不在意體積,且對(duì)穩(wěn)定性要求高的情況下,可以用SLC Nand。
那工業(yè)級(jí)和抗干擾方面呢?我并沒有專業(yè)研究過,但是簡(jiǎn)單分析也知道,Nand在這方面肯定比EMMC好一些。畢竟EMMC是串行的要保證高速肯定總線速度高,而Nand是并行的總線速度肯定低。所以Nand應(yīng)該要比EMMC皮實(shí)一些吧?
但是EMMC也是有工業(yè)級(jí)和消費(fèi)級(jí)之分的,你做的產(chǎn)品真的是工業(yè)環(huán)境使用完全是可以用EMMC的,所以也不要鼓吹什么消費(fèi)電子用EMMC,軍工用Nand這種說法。
7.最后
實(shí)際上存儲(chǔ)市場(chǎng)除了Nand和EMMC之外還有很多其他角色也都很厲害。
譬如Norflash、譬如近年來很火的spiflash(常見的是spinor,但是現(xiàn)在也有大容量的spinand了),譬如這兩年創(chuàng)新設(shè)計(jì)的SDnand(相當(dāng)于是貼片芯片樣式的SD卡)。
技術(shù)其實(shí)一直都在創(chuàng)新。
最后,本文完全是從我的經(jīng)驗(yàn)和積累來寫,并沒有嚴(yán)格查閱資料。限于水平和專業(yè)性,里面如果有錯(cuò)漏或者表達(dá)不當(dāng)?shù)牡胤?,希望大家指正,共同進(jìn)步。
end
往期筆記:
【Linux筆記】嵌入式Linux驅(qū)動(dòng)基礎(chǔ)
【Linux筆記】掛載網(wǎng)絡(luò)文件系統(tǒng)
《C語(yǔ)言、嵌入式重點(diǎn)知識(shí):回調(diào)函數(shù)》
長(zhǎng)按關(guān)注我們,不錯(cuò)過每一篇好文
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!