【ARM基礎】s3c2440啓動過程分析——韋東山

2440啓動過程分析

摘自:博客園/韋東山/鏈接:https://www.cnblogs.com/weidongshan/p/6689728.html

2440啓動過程算是一個難點,不太容易理解,而對於2440啓動過程的理解,影響了後面裸機代碼執行流程的分析,從而看出2440啓動過程的重要性。

 

2440啓動方式和啓動方式選擇

在S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中搜索map,可以在第5章中搜索到下圖。

 

從此圖中,可以得知

OM[1:0] = 01,10,Not using NAND flash for boot ROM

OM[1:0] = 00,  Using NAND flash for boot ROM

而OM[1:0]又是什麼呢?

從S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中搜索OM,

可以在第50頁“S3C2440A Signal Descriptions”(芯片信號描述)得到下面的表格。

Signal

Input/

Output

Descriptions

OM[1:0]

I

OM[1:0] sets S3C2440A in the TEST mode, which is used only at fabrication.

Also, it determines the bus width of nGCS0. The pull-up/down resistor

determines the logic level during RESET cycle.

00: Nand-boot         01: 16-bit      10: 32-bit     11: Test mode

只能在生產中才能將OM[1:0]設置成S3C2440A的測試模式;

此外,OM[1:0]還決定了nGCS0的總線寬度(後面可以知道:nGCS0對應bank0)。

在芯片RESET復位週期間,OM[1:0]上的上拉/下拉電阻確定其邏輯電平

00:Nand啓動   01:16 位    10:32 位   11:測試模式

 

後面可以知道:

OM[1:0]=01,代表的是nor flash的數據寬度爲16位。

OM[1:0]=10,代表的是nor flash的數據寬度爲32位。

 

從而,可以得出結論

2440啓動方式有兩種啓動方式:NOR FLASH啓動或NAND FLASH啓動。

如何選擇從那種方式啓動呢?

答案是:通過2440啓動方式OM0和OM1引腳來選擇。

 

 

 

在S3C2440的datasheet《S3C2440A_UserManual_Rev13.pdf》中第5章還可以得到:

BANK0(nGCS0)的數據總線應當配置爲16位或32位的寬度。因爲BANK0是作爲引導ROM的bank(映射到0x0000_0000),應當在第一個ROM訪問前決定BANK0的總線寬度,其依賴於復位時OM[1:0]的邏輯電平。

OM1(操作模式1)

OM0(操作模式0)

引導ROM數據寬度

0

0

Nand Flash模式

0

1

16位

1

0

32位

1

1

測試模式

從JZ2440原理圖NOR FLASH電路可以得知,使用的NOR FLASH的數據總線寬度爲16位。

(NOR FLASH使用了LDATA0到LDATA15,共16根,即NOR FLASH的數據總線寬度爲16位)

從而,我們只會使用到OM1=0,OM0=0或1這兩種情況。

從而,可以得出下面的結論:

OM1OM0說明
01nor flash啓動
00nand flash啓動

 

從JZ2440原理圖中,啓動引腳配置OM0和OM1的原理圖如下:

(下圖爲開發板的啓動選擇的撥碼開關)

 

在開發板的PCB中,如圖:

 

 

 

 

補充:

一般芯片有多種啓動方式,而這些啓動方式都可以由配置引腳來選擇。芯片在啓動時讀取這些配置引腳的電平,就可以判斷從那種方式啓動。通常在研發階段的實驗板或者很多學習板(如:JZ2440)通常採用開關或跳線帽等方式來將配置引腳的電平置爲高電平或置爲低電平。在出廠時, 配置引腳一般通過上下拉電阻來設置電平。

 

1 .從NOR FLASH啓動

         從NOR FLASH啓動時,由前面的圖1,由nGCS0控制的bank0直接連接了nor flash,而bank0能訪問的地址範圍爲:256M(0X00000000----0X08000000),JZ2440開發板使用的nor flash大小爲2M(0X00000000----0X00200000),從而S3C2440芯片的物理地址(0X00000000----0X00200000)就由nor flash來佔據。

選擇從NOR FLASH啓動,上電,S3C2440芯片就會去運行nor flash上地址爲0x0處的指令。從後面的實驗中,可以清楚的知道,讀nor flash可以像讀內存那樣讀,但是要用額外的命令向nor flash寫入數據。如果nor flash像內存那樣讀和那樣寫,那nor flash完全可以被內存所替代。

 

 

2. 從NAND FLASH啓動

     在看本節內容之前,建議仔細看S3C2440A的datasheet《S3C2440A_UserManual_Rev13.pdf》的第6章,對S3C2440芯片對nand flash的支持有一個大概的認識。

 

使用nand flash的理由

目前的NOR Flash存儲器價格較高,相對而言SDRAM和NAND Flash存儲器更經濟,這樣促使了一些用戶在NAND Flash中執行引導代碼,在SDRAM中執行主代碼。

可以得到一點:NAND Flash存儲器更經濟。

 

從NAND FLASH原理圖來分析數據總線

         可以在網上搜索nand  flash的特點,其實我們從原理圖或者nand flash的引腳數目,也可以分析出:nand flash無法像訪問內存SDRAM那樣直接訪問。

JZ2440開發板使用的NAND FLASH大小爲256M。如果像內存SDRAM那樣,一次將地址全部發出,至少需要28根地址線才能完成256M的尋址。由JZ2440開發板使用的NAND FLASH

芯片手冊可知,該芯片實際使用了29根地址線。多一根地址線訪問範圍更大一些。

而nand flash只有8根數據線和其他控制線,那怎麼辦?

通過查詢NAND FLASH芯片手冊知道,只能將地址分成多個字節,按照某種規則,分批傳遞給8根數據線。nand flash內部再按照某種規則,將幾個批次的8根數據線上的數據合併成29根地址線的數據。從而,可以得出讀寫NAND FLASH都需要特定命令規則來控制傳送的數據。

如何識別nand flash的類型

nand flash的頁容量有大頁(2k)/小頁(512字節),總線寬度有8位/16位,如何區分開發板使用的哪一類型的NAND FLASH呢?

從S3C2440A的datasheet《S3C2440A_UserManual_Rev13.pdf》的第6章,可以得到NAND FLASH啓動時的引腳配置:

引腳

說明

OM[1:0] = 00

使能NAND Flash存儲器引導啓動

NCON

NAND Flash存儲器選擇(普通/先進)

0:普通NAND Flash(256字或512字節頁大小, 3或4個地址週期)

1:先進NAND Flash(1K  字或2K  字節頁大小,4或5個地址週期)

GPG13

NAND Flash存儲器頁容量選擇

0:頁=256字  (NCON=0)或頁=1K字  (NCON=1)

1:頁=512字節(NCON=0)或頁=2K字節(NCON=1)

GPG14

NAND Flash存儲器地址週期選擇

0:3個地址週期(NCON=0)或4個地址週期(NCON=1)

1:4個地址週期(NCON=0)或5個地址週期(NCON=1)

GPG15

NAND Flash存儲器總線寬度選擇

0:8位寬度

1:16位寬度

當復位時,芯片的NAND Flash控制器通過讀取引腳NCON、GPG13、GPG14、GPG15的電平來得到外接的NAND FLASH的頁大小,地址週期,總線寬度等信息。

在JZ2440V2開發板上實際使用的是大頁(一頁有2K字節),5個地址週期,8位寬度的NAND FLASH。在JZ2440原理圖中,關於NAND FLASH的啓動引腳配置的原理圖如下:

 

其中,R15,R16,R17,R14標記爲NC,即這些電阻沒有焊接。

從而NCON爲高電平,EINT21爲高電平,EINT22爲高電平,EINT23爲低電平。

 

從上圖可以知道:

GPG13和 EINT21是同一信號。

GPG14和EINT22是同一信號。

GPG15和EINT23是同一信號。

從而NCON爲高電平,GPG13爲高電平,GPG14爲高電平,GPG15爲低電平。

從而S3C2440A芯片從nand flash啓動時,讓S3C2440A芯片確定外部掛接的是一個大頁(一頁有2K字節),5個地址週期,8位寬度的NAND FLASH。

 

第四小節   從nand flash啓動流程

現在已經知道S3C2440A外部掛接的哪一類nand flash,那麼就要準備去複製nand中的代碼,然後去執行該代碼。問題又來了,複製大小是多少?複製到哪裏去?複製完接着做什麼?並且這個複製過程也只能由S3C2440A的硬件來完成。

         從S3C2440A的datasheet《S3C2440A_UserManual_Rev13.pdf》的第6章中:

S3C2440A boot code can be executed on an external NAND flash memory. In order to support NAND flash boot loader, the S3C2440A is equipped with an internal SRAM buffer called ‘Steppingstone’. When booting, the first 4 KBytes of the NAND flash memory will be loaded into Steppingstone and the boot code loaded into Steppingstone will be executed.

 S3C2440A引導代碼可以在外部NAND Flash存儲器上存儲。爲了支持從NAND Flash啓動,S3C2440A配備了一個內置的SRAM緩衝器,叫做“Steppingstone(墊腳石)”。從nand flash啓動時,NAND Flash存儲器的前4K字節將被加載到Steppingstone中並且執行加載到Steppingstone的引導代碼。

複製大小爲多少:4K。

複製到哪裏去:Steppingstone(墊腳石)。

複製完接着做什麼:執行加載到Steppingstone的引導代碼。

 

從圖1,OM[1:0]=00時,選擇從nand flash啓動,S3C2440A的前4K(0X00000000----0X00001000)就被BootSRAM(即:Steppingstone(墊腳石))所佔據。

 

總結:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章