新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > s3c2440存儲(chǔ)控制器和地址以及啟動(dòng)的理解

s3c2440存儲(chǔ)控制器和地址以及啟動(dòng)的理解

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
1.首先應(yīng)該先了解Flash ROM的種類
NOR FLASH地址線和數(shù)據(jù)線分開(kāi),來(lái)了地址和控制信號(hào),數(shù)據(jù)就出來(lái)。
NAND Flash地址線和數(shù)據(jù)線在一起,需要用程序來(lái)控制,才能出數(shù)據(jù)。
通俗的說(shuō),只給地址不行,要先命令,再給地址,才能讀到NAND的數(shù)據(jù),在一個(gè)總線完成的。
結(jié)論是:ARM無(wú)法從NAND直接啟動(dòng)。除非裝載完程序,才能使用NAND Flash.
2.Nand Flash的命令、地址、數(shù)據(jù)都通過(guò)I/O口發(fā)送,管腳復(fù)用,這樣做做的好處是,可以明顯減少NAND FLASH的管腳數(shù)目,將來(lái)如果設(shè)計(jì)者想將NAND FLASH更換為更高密度、更大容量的,也不必改動(dòng)電路板。在S3C2440中NANDFLASH的控制依靠NAND FLASH控制器。不能夠執(zhí)行程序,本人總結(jié)其原因如下 :
a. NAND FLASH本身是連接到了控制器上而不是系統(tǒng)總線上。CPU啟動(dòng)后是要取指令執(zhí)行的,如果是SROM、NOR FLASH 等之類的,CPU 發(fā)個(gè)地址就可以取得指令并執(zhí)行,NAND FLASH不行,因?yàn)镹AND FLASH 是管腳復(fù)用,它有自己的一套時(shí)序,這樣CPU無(wú)法取得可以執(zhí)行的代碼,也就不能初始化系統(tǒng)了。
b. NAND FLASH是順序存取設(shè)備,不能夠被隨機(jī)訪問(wèn),程序就不能夠分支或跳轉(zhuǎn),這樣你如何去設(shè)計(jì)程序。
3.在2440中為什么可以配置成從Nand Flash中啟動(dòng)程序?
如果S3C2440被配置成從Nand Flash啟動(dòng), S3C2440的Nand Flash控制器有一個(gè)特殊的功能,在S3C2440上電后,Nand Flash控制器會(huì)自動(dòng)的把Nand Flash上的前4K數(shù)據(jù)搬移到4K內(nèi)部SRAM中,(此內(nèi)部RAM被稱為Steppingstone)并把0x00000000設(shè)置內(nèi)部RAM的起始地址,CPU從內(nèi)部RAM的0x00000000位置開(kāi)始啟動(dòng)。這個(gè)過(guò)程不需要程序干涉。程序員需要完成的工作,是把最核心的啟動(dòng)程序放在Nand Flash的前4K中,也就是說(shuō),你需要編寫(xiě)一個(gè)長(zhǎng)度小于4K的引導(dǎo)程序,作用是將主程序拷貝到SDRAM中運(yùn)行(NF地址不是線性的,程序不能直接運(yùn)行,必須拷貝到線性RAM中???)。
4.Samsung S3C2440支持Nor Flash和Nand Flash啟動(dòng),在TQ2440上可以通過(guò)跳線設(shè)置啟動(dòng)方式。主要由OM[1:0]這兩位來(lái)決定從何處啟動(dòng)。具體含義如下:

OM[1:0]所決定的啟動(dòng)方式

本文引用地址:http://m.butianyuan.cn/article/201611/320148.htm

OM[1:0]=00時(shí),處理器從NAND Flash啟動(dòng)

OM[1:0]=01時(shí),處理器從16位寬度的ROM啟動(dòng)

OM[1:0]=10時(shí),處理器從32位寬度的ROM啟動(dòng)。

OM[1:0]=11時(shí),處理器從Test Mode啟動(dòng)。

Arm的啟動(dòng)都是從0地址開(kāi)始,所不同的是地址的映射不一樣。在arm開(kāi)電的時(shí)候,要想讓arm知道以某種方式(地址映射方式)運(yùn)行,不可能通過(guò)你寫(xiě)的某段程序控制,因?yàn)檫@時(shí)候你的程序還沒(méi)啟動(dòng),這時(shí)候arm會(huì)通過(guò)引腳的電平來(lái)判斷。
a.當(dāng)引腳OM0跟OM1有一個(gè)是高電平時(shí),這時(shí)地址0會(huì)映射到外部nGCS0片選的空間(Bank0),也就是Norflash,程序就會(huì)從Norflash中啟動(dòng),arm直接取Norflash中的指令運(yùn)行。
b.當(dāng)OM0跟OM1都為低電平,則0地址內(nèi)部bootbuf(一段4k的SRAM)開(kāi)始。系統(tǒng)上電,arm會(huì)自動(dòng)把NANDflash中的前4K內(nèi)容考到bootbuf(也就是0地址),然后從0地址運(yùn)行。

這時(shí)NANDFlash中的前4K就是啟動(dòng)代碼(他的功能就是初始化硬件然后在把NANDFlash中的代碼復(fù)制到RAM中,再把相應(yīng)的指針指向該運(yùn)行的地方)


5.啟動(dòng)代碼應(yīng)該做什么?
由于Nand Flash控制器從Nand Flash中搬移到內(nèi)部RAM的代碼是有限的,所以在啟動(dòng)代碼的前4K里,我們必須完成S3C2440的核心配置以及把啟動(dòng)代碼(U-BOOT)剩余部分搬到RAM中運(yùn)行,至于將2440當(dāng)做單片機(jī)玩裸跑程序的時(shí)候,就不要做這樣的事情,當(dāng)代碼小于4K的時(shí)候,只要下到nand flash中就會(huì)被搬運(yùn)到內(nèi)部RAM中執(zhí)行了。

bootloader在某種意義上來(lái)說(shuō)即是一個(gè)啟動(dòng)代碼,種類有很多(vivi uboot 等),但是功能上無(wú)非就是完成一些初始化。bootloader是芯片復(fù)位后進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,完成由硬件啟動(dòng)到操作系統(tǒng)啟動(dòng)的過(guò)渡,為運(yùn)行操作系統(tǒng)提供基本的運(yùn)行環(huán)境,如初始化CPU、堆棧、初始化存儲(chǔ)器系統(tǒng)等,其功能類似于PC機(jī)的BIOS.

在實(shí)際的開(kāi)發(fā)中,一般可以把bootloader燒入到Norflash,程序運(yùn)行可以通過(guò)串口交互,進(jìn)行一定的操作,比如下載,調(diào)試。這樣就很可以很方便的調(diào)試你的一些代碼。Norflash中的Bootloader還可以燒錄內(nèi)核到Norflash等等功能。
6.存儲(chǔ)控制器的作用
在2440中分了8個(gè)bank,每個(gè)bank的基地址由nCGSx來(lái)選擇,每個(gè)bank都接外設(shè)之后,就可以通過(guò)存儲(chǔ)控制器來(lái)進(jìn)行地址上的選擇了。每個(gè)bank與外設(shè)的連接方式不一樣,主要看外設(shè)是每次進(jìn)行多少位的數(shù)據(jù)傳輸,如果是8位,這樣CPU的地址線A0就可以直接接外設(shè)的A0,如果是16位,那么CPU的A1就該接到外設(shè)的A0,一次類推往后移位,具體原因見(jiàn)錯(cuò)位原因。nor flash接在bank0,數(shù)據(jù)線為16位。存儲(chǔ)控制器的特性如下:
1. 大小端設(shè)置;
2. 地址空間:每個(gè)bank為128MB (總共1GB);
3. 除了bank0其余所有banks的數(shù)據(jù)位寬是可編程的(8/16/32-bit);(bank0是16/32位)
4. 總共8個(gè)memory banks,其中6個(gè)bank是接ROM,SRAM等,其余2個(gè)bank是接ROM,SRAM,SDRAM等;
5. 7個(gè)memory bank的起始地址是固定的;(發(fā)現(xiàn)size也是固定的,128MB)
6. 1個(gè)memory bank的起始地址和大小是可靈活可變的;
7. 所有banks的訪問(wèn)周期數(shù)是可編程的;
8. 支持片外等待信號(hào)以擴(kuò)充總線周期;
9. SDRAM在Power down模式下支持自動(dòng)刷新.
2010.5.2補(bǔ)充:這里看到有8個(gè)BANK,然后他們地址怎么就可以確定呢?理解:外面一共就使用了27根地址線,還有5根地址線沒(méi)有被使用,5根地址線就有16個(gè)選擇了,初步估計(jì)其中的3根又被用來(lái)選擇這8個(gè)bank了,所以才有那樣的地址~~至于那個(gè)可變地址,暫時(shí)還想不出什么解釋,好像是叫部分譯碼~呵呵。。OK
7.Nand Flash控制器
1. 自動(dòng)啟動(dòng): 系統(tǒng)復(fù)位后,boot code搬運(yùn)到4KB Steppingstone,然后在其內(nèi)部執(zhí)行;
2. Nand Flash存儲(chǔ)接口: 支持256Words,512Bytes,1KWords和2KBytes Page;
3. 軟件模式: 用戶能直接訪問(wèn)nand flash;
4. 接口: 支持8/16-bit Nand flash存儲(chǔ)接口;
5. 支持大小端模式;
6. 硬件ECC發(fā)生器:檢測(cè)和指示(軟件糾正)(此處不怎么理解);
7. Steppingstone: 4KB SRAM Buffer,在nand flash啟動(dòng)過(guò)后可以用作它處.
當(dāng)系統(tǒng)處在復(fù)位狀態(tài)時(shí),Nand flash控制器從管腳NCON,GPG13,GPG14,GPG15得到nand flash的一些信息(如page size,bus width等,見(jiàn)下圖).在上電或系統(tǒng)復(fù)位之后,則nand flash控制器將自動(dòng)加載4KB boot loader代碼,之后就是在steppingstone里執(zhí)行.
注意:在自動(dòng)啟動(dòng)這個(gè)過(guò)程中,ECC模塊是不發(fā)揮作用的,所以前4KB nand flash應(yīng)當(dāng)不含bit error.


評(píng)論


技術(shù)專區(qū)

關(guān)閉