嵌入式設計:存儲器以及BootLoader的總結
在大學的時候很少關心單片機內部存儲器的結構及應用,只是大概的知道RAM和ROM的區(qū)別,甚至只是知道程序下載到ROM中就能運行了。其他的如何工作程序如何啟動的就不了了知了。因此在接觸嵌入式的時候就會出現(xiàn)很多盲區(qū)。在此本人將工作三個多月以來接觸到的一些關于嵌入式新的理解分享給大家,有什么錯誤的地方在所難免,希望大家給予指正。
本文引用地址:http://m.butianyuan.cn/article/221309.htmRAM和ROM在單片機中的相關應用
ROM和RAM指的都是半導體存儲器,ROM是ReadOnlyMemory的縮寫,RAM是RandomAccessMemory的縮寫。ROM在系統(tǒng)停止供電的時候仍然可以保持數(shù)據(jù),而RAM通常都是在掉電之后就丟失數(shù)據(jù),典型的RAM就是計算機的內存。
RAM有兩大類,一種稱為靜態(tài)RAM(StaticRAM/SRAM),SRAM速度非???,是目前讀寫最快的存儲設備了,但是它也非常昂貴,所以只在要求很苛刻的地方使用,譬如CPU的一級緩沖,二級緩沖。另一種稱為動態(tài)RAM(DynamicRAM/DRAM),DRAM保留數(shù)據(jù)的時間很短,速度也比SRAM慢,不過它還是比任何的ROM都要快,但從價格上來說DRAM相比SRAM要便宜很多,計算機內存就是DRAM的。
DRAM分為很多種,常見的主要有FPRAM/FastPage、EDORAM、SDRAM、DDRRAM、RDRAM、SGRAM以及WRAM等。所謂內存就是用來存放當前正在使用的(即執(zhí)行中)的數(shù)據(jù)和程序,我們平常所提到的計算機的內存指的是動態(tài)內存(即DRAM),動態(tài)內存中所謂的“動態(tài)”,指的是當我們將數(shù)據(jù)寫入DRAM后,經(jīng)過一段時間,數(shù)據(jù)會丟失,因此需要一個額外設電路進行內存刷新操作。
ROM也有很多種,PROM是可編程的ROM,PROM和EPROM(可擦除可編程ROM)兩者區(qū)別是,PROM是一次性的,也就是軟件灌入后,就無法修改了,這種是早期的產(chǎn)品,現(xiàn)在已經(jīng)不可能使用了,而EPROM是通過紫外光的照射擦出原先的程序,是一種通用的存儲器。另外一種EEPROM是通過電子擦出,價格很高,寫入時間很長,寫入很慢。
簡單來說,最原始的單片機比如at89c51,內部集成了ROM,RAM。ROM用來存儲編好的程序、常數(shù)、表格等,當單片機掉電ROM中的數(shù)據(jù)不會丟失,因此單片機掉電再上電還會繼續(xù)運行;RAM可以存放用戶的臨時變量、還有單片機內部的特殊寄存器等,單片機掉電后數(shù)據(jù)會丟失,當在上電后程序執(zhí)行,重新初始化寄存器和變量的值。
在這里簡單說一下MCS-51的程序執(zhí)行流程,MCS-51單片機的存儲器組織結構,采用典型的哈佛結構,即程序存儲器和數(shù)據(jù)存儲器完全獨立,擁有各自的尋址系統(tǒng),包括片內數(shù)據(jù)存儲器與片外數(shù)據(jù)存儲器都擁有自己獨立的尋址系統(tǒng)。所以,在地址空間上允許重疊。如:程序存儲器的地址空間中有0000H這個單元,片內數(shù)據(jù)存儲器也有0000H這個單元,片外數(shù)據(jù)存儲器中還有0000H這個單元。
89S51片內有4kB的程序存儲單元,其地址為0000H—0FFFH,單片機啟動復位后,程序計數(shù)器的內容為0000H,所以系統(tǒng)將從0000H單元開始執(zhí)行程序。在這里會跳轉到main函數(shù),但是據(jù)說在跳轉到main函數(shù)之前,還會做一些判斷的處理,具體沒有研究過。
Flash在嵌入式系統(tǒng)中的應用
現(xiàn)在很多的芯片內部都是用flash,或者是外掛Flash來存儲程序。目前的Flash主要有兩種NORFlash和NADNFlash。
NORFlash的讀取和我們常見的SDRAM的讀取是一樣,用戶可以直接運行裝載在NORFLASH里面的代碼,這樣可以減少SRAM的容量從而節(jié)約了成本。
NANDFlash沒有采取內存的隨機讀取技術,它的讀取是以一次讀取一塊的形式來進行的,通常是一次讀取512個字節(jié),采用這種技術的Flash比較廉價。用戶不能直接運行NANDFlash上的代碼,因此好多使用NANDFlash的開發(fā)板除了使用NANDFlah以外,還作上了一塊小的NORFlash來運行啟動代碼。
一般小容量的用NORFlash,因為其讀取速度快,多用來存儲操作系統(tǒng)等重要信息,而大容量的用NANDFLASH。NORFlash可以擁有SDRAM的接口,擁有更多的地址線來方便讀取內存中的每一個字節(jié);NANDflashAND結構能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。應用NAND的困難在于flash的管理和需要特殊的系統(tǒng)接口。
SerialFlash擁有spi的接口可以頁讀、任意地址讀。并且它可以有四線SPI,雙線SPI的DDR接口。它可以利用spi的外部地址總線的方式來直接在外部flash中運行程序,不過運行速度是個有待考慮的問題。
嵌入式BootLoader
在嵌入式中一些產(chǎn)品中,采用的啟動方式中,根據(jù)不同的芯片結構而不同。拿計算機的啟動來說,計算機引導加載程序由BIOS和位于硬盤MBR中的OSBootLoader組成,其實BIOS就是一段固化程序,現(xiàn)在很多嵌入式的芯片內部都會有一段類似的程序來,這段程序的用途通俗的講就是來加載BootLoader的。計算機也一樣,BIOS在完成系統(tǒng)硬件檢測和資源分配后,將硬盤MBR中的BootLoader讀到系統(tǒng)的RAM中,然后將控制權交給OSBootLoader,BootLoader的主要任務就是將內核映像從硬盤讀到RAM中,然后跳轉到內核的入口點運行,即開啟操作系統(tǒng)。
我們常說的嵌入式的BootLoader其實就是和上面提到的OSBootLoader差不多,只不過很多嵌入式的CPU沒有BIOS那樣的固化程序,他們上電復位到0x0000000地址后一般是BootLoader的開始地址。有些嵌入式的CPU會有片內的ROM,會有一段固化的程序,去加載BootLoader。
簡單來說BootLoader有兩種模式,一種叫做DownLoader,一種叫做loader;DownLoader這種模式中主要是程序員開發(fā)階段需要一種模式,這種模式主要是通過調試器將程序代碼下載到內部RAM中去,然后通過BootLoader寫到目標機的Flash或者其他存儲設備中去。這種模式只是在開發(fā)人員在項目開發(fā)階段使用的一種模式。在項目完成后的成品中,BootLoader會一直工作在loader模式中。其大概做的事情就是硬件設備初始化,為BootLoader以后的工作設定先決條件;設置堆棧、檢測系統(tǒng)內存映射,將系統(tǒng)映像或者程序代碼段從Flash上讀取到內部RAM中,有的系統(tǒng)會加載到SDRAM中,還有的會直接在外部FLASH上運行。
51單片機相關文章:51單片機教程
存儲器相關文章:存儲器原理
塵埃粒子計數(shù)器相關文章:塵埃粒子計數(shù)器原理
評論