學(xué)習(xí)嵌入式Linux之前,這些概念要搞清
來(lái)源:百問(wèn)科技
ROM(Read Only Memory)和RAM(Random Access Memory)指的都是半導(dǎo)體存儲(chǔ)器,ROM在系統(tǒng)停止供電的時(shí)候仍然可以保持?jǐn)?shù)據(jù),而RAM通常是在掉電之后就丟失數(shù)據(jù),典型的RAM就是計(jì)算機(jī)的內(nèi)存。
ROM有很多種,PROM是可編程的ROM,它和EPROM(可擦除可編程ROM)的區(qū)別是,PROM是一次性的,也就是軟件灌入后,就無(wú)法修改了,這是早期的產(chǎn)品,現(xiàn)在已經(jīng)不再使用,而EPROM是通過(guò)紫外光的照射擦出原先的程序的一種通用存儲(chǔ)器。另外一種EEPROM是通過(guò)電子擦除,價(jià)格很高,寫(xiě)入時(shí)間很長(zhǎng),寫(xiě)入慢。
舉個(gè)例子,手機(jī)軟件一般放在EEPROM中,我們打電話(huà),有些最后撥打的號(hào)碼,暫時(shí)存在SRAM中,不是馬上寫(xiě)入通話(huà)記錄(通話(huà)記錄保存在EEPROM中),因?yàn)楫?dāng)時(shí)有很重要工作(通話(huà))要做,如果寫(xiě)入,漫長(zhǎng)的等待用戶(hù)無(wú)法忍受。
RAM有兩大類(lèi),一種稱(chēng)為靜態(tài)RAM(Static RAM/SRAM),SRAM速度非??欤悄壳白x寫(xiě)最快的存儲(chǔ)設(shè)備了,它也非常昂貴,所以只在要求很苛刻的地方使用,譬如CPU的一級(jí)緩沖,二級(jí)緩沖。
另一種稱(chēng)為動(dòng)態(tài)RAM(Dynamic RAM/DRAM),DRAM保留數(shù)據(jù)的時(shí)間很短,速度也比SRAM慢,不過(guò)它還是比任何的ROM都要快,但從價(jià)格上來(lái)說(shuō)DRAM相比SRAM要便宜很多,計(jì)算機(jī)內(nèi)存就是DRAM的。
DRAM分為很多種,常見(jiàn)的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,這里介紹其中的一種DDR RAM。
DDR RAM(Date-Rate RAM)也稱(chēng)作DDR SDRAM,這種改進(jìn)型的RAM和SDRAM是基本一樣的,不同之處在于它可以在一個(gè)時(shí)鐘讀寫(xiě)兩次數(shù)據(jù),這樣就使得數(shù)據(jù)傳輸速度加倍了。
這是目前電腦中用得最多的內(nèi)存,而且它有著成本優(yōu)勢(shì),擊敗了Intel的另外一種內(nèi)存標(biāo)準(zhǔn)-Rambus DRAM。在很多高端的顯卡上,也配備了高速DDR RAM來(lái)提高帶寬,這可以大幅度提高3D加速卡的像素渲染能力。
內(nèi)存工作原理簡(jiǎn)析
內(nèi)存是用來(lái)存放當(dāng)前正在使用的(即執(zhí)行中)的數(shù)據(jù)和程序,我們平常所提到的計(jì)算機(jī)的內(nèi)存指的是動(dòng)態(tài)內(nèi)存(即DRAM),動(dòng)態(tài)內(nèi)存中所謂的“動(dòng)態(tài)”,指的是當(dāng)我們將數(shù)據(jù)寫(xiě)入DRAM后,經(jīng)過(guò)一段時(shí)間,數(shù)據(jù)會(huì)丟失,因此需要一個(gè)額外設(shè)電路進(jìn)行內(nèi)存刷新操作。
具體的工作過(guò)程是這樣的:一個(gè)DRAM的存儲(chǔ)單元存儲(chǔ)的是0還是1取決于電容是否有電荷,有電荷代表1,無(wú)電荷代表0。但時(shí)間一長(zhǎng),代表1的電容會(huì)放電,代表0的電容會(huì)吸收電荷,這就是數(shù)據(jù)丟失的原因;?
刷新操作定期對(duì)電容進(jìn)行檢查,若電量大于滿(mǎn)電量的1/2,則認(rèn)為其代表1,并把電容充滿(mǎn)電; 若電量小于1/2,則認(rèn)為其代表0,并把電容放電,藉此來(lái)保持?jǐn)?shù)據(jù)的連續(xù)性。
NAND Flash和NOR Flash的比較
常用的Flash類(lèi)型有:NOR Flash和NAND Flash兩種。NOR Flash由Intel公司在1988年發(fā)明,以替代當(dāng)時(shí)在市場(chǎng)上占據(jù)主要地位的EPROM和EEPROM。NANDFlash由Toshiba公司在1989年發(fā)明。兩者的主要差別如下表所示。
? ? ? ? ? ? ? ? ? ? ? ?
NOR | NAND | ||
容量 | 1~32MB | 16~512MB | |
XIP | Yes | No | |
性能 | 擦除 | 非常慢(5s) | 快(3ms) |
寫(xiě) | 慢 | 快 | |
讀 | 快 | 快 | |
可靠性 | 比較高,位反轉(zhuǎn)的比例小于NAND Flash 的10% | 比較低:,位反轉(zhuǎn)比較常見(jiàn),必需有校驗(yàn)措施,比如“1-4 bit EDC/ECC”;必須有壞塊管理措施 | |
可擦除次數(shù) | 10000~100000 | 100000~1000000 | |
生命周期 | 低于NAND Flash的10% | 是NOR Flash的10倍以上 | |
接口 | 與RAM接口相同 | I/O接口 | |
訪(fǎng)問(wèn)方法 | 隨機(jī)訪(fǎng)問(wèn) | 順序訪(fǎng)問(wèn) | |
易用性 | 容易 | 復(fù)雜 | |
主要用途 | 常用于保存代碼和關(guān)鍵數(shù)據(jù) | 用于保存數(shù)據(jù) | |
價(jià)格 | 高 | 低 |
NOR/NAND Flash的差別
NOR Flash支持XIP,即代碼可以直接在NOR Flash上執(zhí)行,無(wú)需拷貝到內(nèi)存中。這是由于NOR Flash的接口與RAM完全相同,可以隨機(jī)訪(fǎng)問(wèn)任意地址的數(shù)據(jù)。在NOR Flash上進(jìn)行讀操作的效率非常高,但是擦除和寫(xiě)操作的效率很低;另外,NOR Flash的容量一般比較小。
NAND Flash進(jìn)行擦除和寫(xiě)操作的效率更高,并且容量更大。一般而言,NOR Flash用于存儲(chǔ)程序,NAND Flash用于存儲(chǔ)數(shù)據(jù)?;贜AND Flash的設(shè)備通常也要搭配N(xiāo)OR Flash以存儲(chǔ)程序。
Flash存儲(chǔ)器件由擦除單元(也稱(chēng)為塊)組成,當(dāng)要寫(xiě)某個(gè)塊時(shí),需要確保這個(gè)塊已經(jīng)被擦除。NOR Flash的塊大小范圍為64KB~128KB;NAND Flash的塊大小范圍為8KB~64KB,擦/寫(xiě)一個(gè)NOR Flash塊需4S,而擦/寫(xiě)一個(gè)NAND Flash塊僅需2ms。
NOR Flash的塊太大,不僅增加了擦寫(xiě)時(shí)間,對(duì)于給定的寫(xiě)操作,NOR Flash也需要更多的擦除操作——特別是小文件,比如一個(gè)文件只有1KB,但是為了保存它卻需要擦除大小為64KB~128KB的NOR Flash塊。
NOR Flash的接口與RAM完全相同,可以隨意訪(fǎng)問(wèn)任意地址的數(shù)據(jù)。而NAND Flash的接口僅僅包含幾個(gè)I/O引腳,需要串行地訪(fǎng)問(wèn)。NAND Flash一般以512字節(jié)為單位進(jìn)行讀寫(xiě)。這使得NOR Flash適合于運(yùn)行程序,而NAND Flash更適合于存儲(chǔ)數(shù)據(jù)。
容量相同的情況下,NAND Flash的體積更小,對(duì)于空間有嚴(yán)格要求的系統(tǒng),NAND Flash可以節(jié)省更多空間。市場(chǎng)上NOR Flash的容量通常為1~4MB(也有32MB的NOR Flash),NANDFlash的容量為8~512MB。容量的差別也使得NOR Flash多用于存儲(chǔ)程序,NAND Flash多用于存儲(chǔ)數(shù)據(jù)。
對(duì)于Flash存儲(chǔ)器件的可靠性需要考慮3點(diǎn):位反轉(zhuǎn)、壞塊和可擦除次數(shù)。所有Flash器件都遭遇位反轉(zhuǎn)的問(wèn)題:由于FLASH固有的電器特性,在讀寫(xiě)數(shù)據(jù)過(guò)程中,偶然會(huì)產(chǎn)生一位或幾位數(shù)據(jù)錯(cuò)誤——這種概率很低,而NAND Flash出現(xiàn)的概率遠(yuǎn)大于NOR Flash。當(dāng)位反轉(zhuǎn)發(fā)生在關(guān)鍵的代碼、數(shù)據(jù)上時(shí),有可能導(dǎo)致系統(tǒng)崩潰。
當(dāng)僅僅是報(bào)告位反轉(zhuǎn),重新讀取即可;如果確實(shí)發(fā)生了位反轉(zhuǎn),則必須有相應(yīng)的錯(cuò)誤檢測(cè)/恢復(fù)措施。在NAND Flash上發(fā)生位反轉(zhuǎn)的概率更高,推薦使用EDC/ECC進(jìn)行錯(cuò)誤檢測(cè)和恢復(fù)。
NAND Flash上面會(huì)有壞塊隨機(jī)分布,在使用前需要將壞塊掃描出來(lái),確保不再使用它們,否則會(huì)使產(chǎn)品含有嚴(yán)重的故障。NAND Flash每塊的可擦除次數(shù)通常在100000次左右,是NOR Flash的10倍。另外,因?yàn)镹AND Flash的塊大小通常是NOR Flash的1/8,所以NAND Flash的壽命遠(yuǎn)遠(yuǎn)超過(guò)NOR Flash。
linux對(duì)NOR、NAND Flash的軟件支持都很成熟。在NOR Flash上常用jffs2文件系統(tǒng),而在NAND Flash上常用yaffs文件系統(tǒng)。在更底層,有MTD驅(qū)動(dòng)程序?qū)崿F(xiàn)對(duì)它們的讀、寫(xiě)、擦除操作,它也實(shí)現(xiàn)了EDC/ECC校驗(yàn)。
-END-