s3c2440儲存控制器和位址以及啟動的理解

2021-09-30 09:13:36 字數 3421 閱讀 7036

1.首先應該先了解flash rom的種類

nor flash位址線和資料線分開,來了位址和控制訊號,資料就出來。

nand flash位址線和資料線在一起,需要用程式來控制,才能出資料。

通俗的說,只給位址不行,要先命令,再給位址,才能讀到nand的資料,在乙個匯流排完成的。

結論是:arm無法從nand直接啟動。除非裝載完程式,才能使用nand flash.

2.nand flash的命令、位址、資料都通過i/o口傳送,管腳復用,這樣做做的好處是,可以明顯減少nand flash的管腳數目,將來如果設計者想將nand flash更換為更高密度、更大容量的,也不必改動電路板。在s3c2440中nandflash的控制依靠nand flash控制器。不能夠執行程式,本人總結其原因如下 :

a. nand flash本身是連線到了控制器上而不是系統匯流排上。cpu啟動後是要取指令執行的,如果是srom、nor flash 等之類的,cpu 發個位址就可以取得指令並執行,nand flash不行,因為nand flash 是管腳復用,它有自己的一套時序,這樣cpu無法取得可以執行的**,也就不能初始化系統了。

b. nand flash是順序訪問裝置,不能夠被隨機訪問,程式就不能夠分支或跳轉,這樣你如何去設計程式。

3.在2440中為什麼可以配置成從nand flash中啟動程式?

如果s3c2440被配置成從nand flash啟動, s3c2440的nand flash控制器有乙個特殊的功能,在s3c2440上電後,nand flash控制器會自動的把nand flash上的前4k資料搬移到4k內部sram中,(此內部ram被稱為steppingstone)並把0x00000000設定內部ram的起始位址,cpu從內部ram的0x00000000位置開始啟動。這個過程不需要程式干涉。程式設計師需要完成的工作,是把最核心的啟動程式放在nand flash的前4k中,也就是說,你需要編寫乙個長度小於4k的引導程式,作用是將主程式拷貝到sdram中執行(nf位址不是線性的,程式不能直接執行,必須拷貝到線性ram中?)。

4.samsung s3c2440支援nor flash和nand flash啟動,在tq2440上可以通過跳線設定啟動方式。主要由om[1:0]這兩位來決定從何處啟動。具體含義如下:

om[1:0]所決定的啟動方式

om[1:0]=00時,處理器從nand flash啟動

om[1:0]=01時,處理器從16位寬度的rom啟動

om[1:0]=10時,處理器從32位寬度的rom啟動。

om[1:0]=11時,處理器從test mode啟動。

arm的啟動都是從0位址開始,所不同的是位址的對映不一樣。在arm開電的時候,要想讓arm知道以某種方式(位址對映方式)執行,不可能通過你寫的某段程式控制,因為這時候你的程式還沒啟動,這時候arm會通過引腳的電平來判斷。

a.當引腳om0跟om1有乙個是高電平時,這時位址0會對映到外部ngcs0片選的空間(bank0),也就是norflash,程式就會從norflash中啟動,arm直接取norflash中的指令執行。

b.當om0跟om1都為低電平,則0位址內部bootbuf(一段4k的sram)開始。系統上電,arm會自動把nandflash中的前4k內容考到bootbuf(也就是0位址),然後從0位址執行。

這時nandflash中的前4k就是啟動**(他的功能就是初始化硬體然後在把nandflash中的**複製到ram中,再把相應的指標指向該執行的地方)

5.啟動**應該做什麼?

由於nand flash控制器從nand flash中搬移到內部ram的**是有限的,所以在啟動**的前4k裡,我們必須完成s3c2440的核心配置以及把啟動**(u-boot)剩餘部分搬到ram中執行,至於將2440當做微控制器玩裸跑程式的時候,就不要做這樣的事情,當**小於4k的時候,只要下到nand flash中就會被搬運到內部ram中執行了。

bootloader在某種意義上來說即是乙個啟動**,種類有很多(vivi uboot 等),但是功能上無非就是完成一些初始化。bootloader是晶元復位後進入作業系統之前執行的一段**,完成由硬體啟動到作業系統啟動的過渡,為執行作業系統提供基本的執行環境,如初始化cpu、堆疊、初始化儲存器系統等,其功能類似於pc機的bios.

6.儲存控制器的作用

在2440中分了8個bank,每個bank的基位址由ncgsx來選擇,每個bank都接外設之後,就可以通過儲存控制器來進行位址上的選擇了。每個bank與外設的連線方式不一樣,主要看外設是每次進行多少位的資料傳輸,如果是8位,這樣cpu的位址線a0就可以直接接外設的a0,如果是16位,那麼cpu的a1就該接到外設的a0,一次類推往後移位,具體原因見錯位原因。nor flash接在bank0,資料線為16位。儲存控制器的特性如下:

1. 大小端設定;

2. 位址空間:每個bank為128mb (總共1gb);

3. 除了bank0其餘所有banks的資料位寬是可程式設計的(8/16/32-bit);(bank0是16/32位)

4. 總共8個memory banks,其中6個bank是接rom,sram等,其餘2個bank是接rom,sram,sdram等;

5. 7個memory bank的起始位址是固定的;(發現size也是固定的,128mb)

6. 1個memory bank的起始位址和大小是可靈活可變的;

7. 所有banks的訪問週期數是可程式設計的;

8. 支援片外等待訊號以擴充匯流排週期;

9. sdram在power down模式下支援自動重新整理.

7.nand flash控制器

1. 自動啟動: 系統復位後,boot code搬運到4kb steppingstone,然後在其內部執行;

2. nand flash儲存介面: 支援256words,512bytes,1kwords和2kbytes page;

3. 軟體模式: 使用者能直接訪問nand flash;

4. 介面: 支援8/16-bit nand flash儲存介面;

5. 支援大小端模式;

6. 硬體ecc發生器:檢測和指示(軟體糾正)(

此處不怎麼理解);

7. steppingstone: 4kb sram buffer,在nand flash啟動過後可以用作它處.

此控制器框圖如下:

此為bootloading過程圖:

當系統處在復位狀態時,nand flash控制器從管腳ncon,gpg13,gpg14,gpg15

得到nand flash的一些資訊(如page size,bus width等,見下圖).在上電或系統復位之後,則nand flash控制器將自動載入4kb boot loader**,之後就是在steppingstone裡執行.

注意:在自動啟動這個過程中,ecc模組是不發揮作用的,所以前4kb nand flash應當不含bit error.

s3c2440儲存控制

nandflash和norflash都是flash的一種,都是散存,都是磁碟儲存介子,但是nandflash一般比較大,而norflash都比較小,並且norflash比較貴,並且norflash寫的速度比較慢,但讀的速度比較快 而nandflash讀的速度比較慢,寫的速度比較快。nor flash...

S3C2440 儲存控制器 與 啟動方式

2440不支援ddr sram 使用非常簡單 只要發位址,讀寫即可,訪問快,高 網絡卡和norflash 與sram介面是一樣的,術語上稱ram like sdram 訪問比較複雜,需要 bank位址,列位址,行位址,才能讀寫,並且需要不斷的重新整理 2440總共8個bank,每個128m,總共1g...

S3C2440的SPI控制器

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!s3c2440包含有兩個序列外圍裝置介面 spi口 每個spi口都有兩個分別用於傳送和接收的8位移位暫存器,在一次spi通訊當中資料被同步傳送 序列移出 和接收 序列移入 8位序列資料的速率由相關的控制暫存器的內容決定。如果只想傳送,接收到的是一些...