學習嵌入式Linux之前,這些概念要搞清~ 全網發布
來自專欄韋東山嵌入式Linux5 人贊了文章
ROM(Read Only Memory)和RAM(Random Access
Memory)指的都是半導體存儲器,ROM在系統停止供電的時候仍然可以保持數據,而RAM通常是在掉電之後就丟失數據,典型的RAM就是計算機的內存。ROM有很多種,PROM是可編程的ROM,它和EPROM(可擦除可編程ROM)的區別是,PROM是一次性的,也就是軟體灌入後,就無法修改了,這是早期的產品,現在已經不再使用,而EPROM是通過紫外光的照射擦出原先的程序的一種通用存儲器。另外一種EEPROM是通過電子擦除,價格很高,寫入時間很長,寫入慢。
舉個例子,手機軟體一般放在EEPROM中,我們打電話,有些最後撥打的號碼,暫時存在SRAM中,不是馬上寫入通話記錄(通話記錄保存在EEPROM中),因為當時有很重要工作(通話)要做,如果寫入,漫長的等待用戶無法忍受。
RAM有兩大類,一種稱為靜態RAM(Static RAM/SRAM),SRAM速度非常快,是目前讀寫最快的存儲設備了,它也非常昂貴,所以只在要求很苛刻的地方使用,譬如CPU的一級緩衝,二級緩衝。
另一種稱為動態RAM(Dynamic RAM/DRAM),DRAM保留數據的時間很短,速度也比SRAM慢,不過它還是比任何的ROM都要快,但從價格上來說DRAM相比SRAM要便宜很多,計算機內存就是DRAM的。
DRAM分為很多種,常見的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,這裡介紹其中的一種DDR RAM。
DDR RAM(Date-Rate RAM)也稱作DDR SDRAM,這種改進型的RAM和SDRAM是基本一樣的,不同之處在於它可以在一個時鐘讀寫兩次數據,這樣就使得數據傳輸速度加倍了。這是目前電腦中用得最多的內存,而且它有著成本優勢,擊敗了Intel的另外一種內存標準-Rambus DRAM。在很多高端的顯卡上,也配備了高速DDR RAM來提高帶寬,這可以大幅度提高3D加速卡的像素渲染能力。
內存工作原理簡析
內存是用來存放當前正在使用的(即執行中)的數據和程序,我們平常所提到的計算機的內存指的是動態內存(即DRAM),動態內存中所謂的「動態」,指的是當我們將數據寫入DRAM後,經過一段時間,數據會丟失,因此需要一個額外設電路進行內存刷新操作。
具體的工作過程是這樣的:一個DRAM的存儲單元存儲的是0還是1取決於電容是否有電荷,有電荷代表1,無電荷代表0。但時間一長,代表1的電容會放電,代表0的電容會吸收電荷,這就是數據丟失的原因; 刷新操作定期對電容進行檢查,若電量大於滿電量的1/2,則認為其代表1,並把電容充滿電; 若電量小於1/2,則認為其代表0,並把電容放電,藉此來保持數據的連續性。
NAND Flash和NOR Flash的比較
常用的Flash類型有:NOR Flash和NAND Flash兩種。NOR Flash由Intel公司在1988年發明,以替代當時在市場上佔據主要地位的EPROM和EEPROM。NANDFlash由Toshiba公司在1989年發明。兩者的主要差別如下表所示。
NOR Flash支持XIP,即代碼可以直接在NOR Flash上執行,無需拷貝到內存中。這是由於NOR Flash的介面與RAM完全相同,可以隨機訪問任意地址的數據。在NOR Flash上進行讀操作的效率非常高,但是擦除和寫操作的效率很低;另外,NOR Flash的容量一般比較小。NAND Flash進行擦除和寫操作的效率更高,並且容量更大。一般而言,NOR Flash用於存儲程序,NAND Flash用於存儲數據。基於NAND Flash的設備通常也要搭配NOR Flash以存儲程序。
Flash存儲器件由擦除單元(也稱為塊)組成,當要寫某個塊時,需要確保這個塊已經被擦除。NOR Flash的塊大小範圍為64KB~128KB;NAND Flash的塊大小範圍為8KB~64KB,擦/寫一個NOR Flash塊需4S,而擦/寫一個NAND Flash塊僅需2ms。NORFlash的塊太大,不僅增加了擦寫時間,對於給定的寫操作,NOR Flash也需要更多的擦除操作——特別是小文件,比如一個文件只有1KB,但是為了保存它卻需要擦除大小為64KB~128KB的NOR Flash塊。
NOR Flash的介面與RAM完全相同,可以隨意訪問任意地址的數據。而NAND Flash的介面僅僅包含幾個I/O引腳,需要串列地訪問。NAND Flash一般以512位元組為單位進行讀寫。這使得NOR Flash適合於運行程序,而NAND Flash更適合於存儲數據。
容量相同的情況下,NAND Flash的體積更小,對於空間有嚴格要求的系統,NAND Flash可以節省更多空間。市場上NOR Flash的容量通常為1~4MB(也有32MB的NOR Flash),NANDFlash的容量為8~512MB。容量的差別也使得NOR Flash多用於存儲程序,NAND Flash多用於存儲數據。
對於Flash存儲器件的可靠性需要考慮3點:位反轉、壞塊和可擦除次數。所有Flash器件都遭遇位反轉的問題:由於FLASH固有的電器特性,在讀寫數據過程中,偶然會產生一位或幾位數據錯誤——這種概率很低,而NAND Flash出現的概率遠大於NOR Flash。當位反轉發生在關鍵的代碼、數據上時,有可能導致系統崩潰。
當僅僅是報告位反轉,重新讀取即可;如果確實發生了位反轉,則必須有相應的錯誤檢測/恢復措施。在NAND Flash上發生位反轉的概率更高,推薦使用EDC/ECC進行錯誤檢測和恢復。NAND Flash上面會有壞塊隨機分布,在使用前需要將壞塊掃描出來,確保不再使用它們,否則會使產品含有嚴重的故障。NAND Flash每塊的可擦除次數通常在100000次左右,是NOR Flash的10倍。另外,因為NAND Flash的塊大小通常是NOR Flash的1/8,所以NAND Flash的壽命遠遠超過NOR Flash。
linux對NOR、NAND Flash的軟體支持都很成熟。在NOR Flash上常用jffs2文件系統,而在NAND Flash上常用yaffs文件系統。在更底層,有MTD驅動程序實現對它們的讀、寫、擦除操作,它也實現了EDC/ECC校驗。
http://weixin.qq.com/r/M0hvd2-EwjK9rSsU9x0h (二維碼自動識別)
推薦閱讀:
※gcc&arm-linux-gcc編譯過程詳解
※作為一個新人,怎樣學好嵌入式Linux
※嵌入式開發,沒有串口如何看日誌?
※嵌入式開發ARM處理器的技術特點
※細說國嵌的幾宗罪——國嵌視頻