- Linux設備驅動開發詳解:基于最新的Linux4.0內核
- 宋寶華
- 2388字
- 2018-12-31 20:25:18
2.2 存儲器
存儲器主要可分類為只讀儲存器(ROM)、閃存(Flash)、隨機存取存儲器(RAM)、光/磁介質儲存器。
ROM還可再細分為不可編程ROM、可編程ROM(PROM)、可擦除可編程ROM(EPROM)和電可擦除可編程ROM(E2PROM),E2PROM完全可以用軟件來擦寫,已經非常方便了。
NOR(或非)和NAND(與非)是市場上兩種主要的Flash閃存技術。Intel于1988年首先開發出NOR Flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND Flash結構,每位的成本被大大降低。
NOR Flash和CPU的接口屬于典型的類SRAM接口(如圖2.5所示),不需要增加額外的控制電路。NOR Flash的特點是可芯片內執行(eXecute In Place,XIP),程序可以直接在NOR內運行。而NAND Flash和CPU的接口必須由相應的控制電路進行轉換,當然也可以通過地址線或GPIO產生NAND Flash接口的信號。NAND Flash以塊方式進行訪問,不支持芯片內執行。

圖2.5 典型的類SRAM接口
公共閃存接口(Common Flash Interface,CFI)是一個從NOR Flash器件中讀取數據的公開、標準接口。它可以使系統軟件查詢已安裝的Flash器件的各種參數,包括器件陣列結構參數、電氣和時間參數以及器件支持的功能等。如果芯片不支持CFI,就需使用JEDEC(Joint Electron Device Engineering Council,電子電器設備聯合會)了。JEDEC規范的NOR則無法直接通過命令來讀出容量等信息,需要讀出制造商ID和設備ID,以確定Flash的大小。
與NOR Flash的類SRAM接口不同,一個NAND Flash的接口主要包含如下信號。
·I/O總線:地址、指令和數據通過這組總線傳輸,一般為8位或16位。
·芯片啟動(Chip Enable,CE#):如果沒有檢測到CE信號,NAND器件就保持待機模式,不對任何控制信號做出響應。
·寫使能(Write Enable,WE#):WE#負責將數據、地址或指令寫入NAND之中。
·讀使能(Read Enable,RE#):RE#允許數據輸出。
·指令鎖存使能(Command Latch Enable,CLE):當CLE為高電平時,在WE#信號的上升沿,指令將被鎖存到NAND指令寄存器中。
·地址鎖存使能(Address Latch Enable,ALE):當ALE為高電平時,在WE#信號的上升沿,地址將被鎖存到NAND地址寄存器中。
·就緒/忙(Ready/Busy,R/B#):如果NAND器件忙,R/B#信號將變為低電平。該信號是漏極開路,需要采用上拉電阻。
NAND Flash較NOR Flash容量大,價格低;NAND Flash中每個塊的最大擦寫次數是100萬次,而NOR的擦寫次數是10萬次;NAND Flash的擦除、編程速度遠超過NOR Flash。
由于Flash固有的電器特性,在讀寫數據過程中,偶然會產生1位或幾位數據錯誤,即位反轉,NAND Flash發生位反轉的概率要遠大于NOR Flash。位反轉無法避免,因此,使用NAND Flash的同時,應采用錯誤探測/錯誤更正(EDC/ECC)算法。
Flash的編程原理都是只能將1寫為0,而不能將0寫為1。因此在Flash編程之前,必須將對應的塊擦除,而擦除的過程就是把所有位都寫為1的過程,塊內的所有字節變為0xFF。另外,Flash還存在一個負載均衡的問題,不能老是在同一塊位置進行擦除和寫的動作,這樣容易導致壞塊。
值得一提的是,目前NOR Flash可以使用SPI接口進行訪問以節省引腳。相對于傳統的并行NOR Flash而言,SPI NOR Flash只需要6個引腳就能夠實現單I/O、雙I/O和4個I/O口的接口通信,有的SPI NOR Flash還支持DDR模式,能進一步提高訪問速度到80MB/s。
IDE(Integrated Drive Electronics)接口可連接硬盤控制器或光驅,IDE接口的信號與SRAM類似。人們通常也把IDE接口稱為ATA(Advanced Technology Attachment)接口,不過,從技術角度而言,這并不準確。其實,ATA接口發展至今,已經經歷了ATA-1(IDE)、ATA-2(Enhanced IDE/Fast ATA,EIDE)、ATA-3(FastATA-2)、Ultra ATA、Ultra ATA/33、Ultra ATA/66、Ultra ATA/100及Serial ATA(SATA)的發展過程。
很多SoC集成了一個eFuse電編程熔絲作為OTP(One-Time Programmable,一次性可編程)存儲器。eFuse可以通過計算機對芯片內部的參數和功能進行配置,這一般是在芯片出廠的時候已經設置好了。
以上所述的各種ROM、Flash和磁介質存儲器都屬于非易失性存儲器(NVM)的范疇,掉電時信息不會丟失,而RAM則與此相反。
RAM也可再分為靜態RAM(SRAM)和動態RAM(DRAM)。DRAM以電荷形式進行存儲,數據存儲在電容器中。由于電容器會因漏電而出現電荷丟失,所以DRAM器件需要定期刷新。SRAM是靜態的,只要供電它就會保持一個值,SRAM沒有刷新周期。每個SRAM存儲單元由6個晶體管組成,而DRAM存儲單元由1個晶體管和1個電容器組成。
通常所說的SDRAM、DDR SDRAM皆屬于DRAM的范疇,它們采用與CPU外存控制器同步的時鐘工作(注意,不是與CPU的工作頻率一致)。與SDRAM相比,DDR SDRAM同時利用了時鐘脈沖的上升沿和下降沿傳輸數據,因此在時鐘頻率不變的情況下,數據傳輸頻率加倍。此外,還存在使用RSL(Rambus Signaling Level,Rambus發信電平)技術的RDRAM(Rambus DRAM)和Direct RDRAM。
針對許多特定場合的應用,嵌入式系統中往往還使用了一些特定類型的RAM。
1.DPRAM:雙端口RAM
DPRAM的特點是可以通過兩個端口同時訪問,具有兩套完全獨立的數據總線、地址總線和讀寫控制線,通常用于兩個處理器之間交互數據,如圖2.6所示。當一端被寫入數據后,另一端可以通過輪詢或中斷獲知,并讀取其寫入的數據。由于雙CPU同時訪問DPRAM時的仲裁邏輯電路集成在DPRAM內部,所以需要硬件工程師設計的電路原理比較簡單。

圖2.6 雙端口RAM
DPRAM的優點是通信速度快、實時性強、接口簡單,而且兩邊處理器都可主動進行數據傳輸。除了雙端口RAM以外,目前IDT等芯片廠商還推出了多端口RAM,可以供3個以上的處理器互通數據。
2.CAM:內容尋址RAM
CAM是以內容進行尋址的存儲器,是一種特殊的存儲陣列RAM,它的主要工作機制就是同時將一個輸入數據項與存儲在CAM中的所有數據項自動進行比較,判別該輸入數據項與CAM中存儲的數據項是否相匹配,并輸出該數據項對應的匹配信息。
如圖2.7所示,在CAM中,輸入的是所要查詢的數據,輸出的是數據地址和匹配標志。若匹配(即搜尋到數據),則輸出數據地址。CAM用于數據檢索的優勢是軟件無法比擬的,它可以極大地提高系統性能。

圖2.7 CAM的輸入與輸出
3.FIFO:先進先出隊列
FIFO存儲器的特點是先進先出,進出有序,FIFO多用于數據緩沖。FIFO和DPRAM類似,具有兩個訪問端口,但是FIFO兩邊的端口并不對等,某一時刻只能設置為一邊作為輸入,一邊作為輸出。
如果FIFO的區域共有n個字節,我們只能通過循環n次讀取同一個地址才能將該片區域讀出,不能指定偏移地址。對于有n個數據的FIFO,當循環讀取m次之后,下一次讀時會自動讀取到第m+1個數據,這是由FIFO本身的特性決定的。
總結2.2節的內容,可得出如圖2.8所示的存儲器分類。

圖2.8 存儲器分類
- Designing Purpose:Built Drones for Ardupilot Pixhawk 2.1
- Linux運維實戰:CentOS7.6操作系統從入門到精通
- Learning Windows Server Containers
- 開源安全運維平臺OSSIM疑難解析:入門篇
- 新手易學:系統安裝與重裝
- 新手學電腦從入門到精通(Windows 10+Office 2016版)
- 嵌入式實時操作系統μC/OS原理與實踐
- 細說Linux基礎知識
- NetDevOps入門與實踐
- RHCSARHCE 紅帽Linux認證學習指南(第7版)EX200 & EX300
- Red Hat Enterprise Linux 6.4網絡操作系統詳解
- 跟老男孩學Linux運維:Shell編程實戰
- 統信UOS應用開發進階教程
- Windows Server 2008組網技術與實訓(第3版)
- bash shell腳本編程經典實例(第2版)