新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > s3c2440存儲控制器和地址以及啟動的理解

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

        作者: 時間:2016-11-23 來源:網絡 收藏
        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]所決定的啟動方式

        本文引用地址:http://www.104case.com/article/201611/320148.htm

        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.

        在實際的開發中,一般可以把bootloader燒入到Norflash,程序運行可以通過串口交互,進行一定的操作,比如下載,調試。這樣就很可以很方便的調試你的一些代碼。Norflash中的Bootloader還可以燒錄內核到Norflash等等功能。
        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模式下支持自動刷新.
        2010.5.2補充:這里看到有8個BANK,然后他們地址怎么就可以確定呢?理解:外面一共就使用了27根地址線,還有5根地址線沒有被使用,5根地址線就有16個選擇了,初步估計其中的3根又被用來選擇這8個bank了,所以才有那樣的地址~~至于那個可變地址,暫時還想不出什么解釋,好像是叫部分譯碼~呵呵。。OK
        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啟動過后可以用作它處.
        當系統處在復位狀態時,Nand flash控制器從管腳NCON,GPG13,GPG14,GPG15得到nand flash的一些信息(如page size,bus width等,見下圖).在上電或系統復位之后,則nand flash控制器將自動加載4KB boot loader代碼,之后就是在steppingstone里執行.
        注意:在自動啟動這個過程中,ECC模塊是不發揮作用的,所以前4KB nand flash應當不含bit error.


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阿克陶县| 凯里市| 潼南县| 巴中市| 蓬安县| 遂川县| 万全县| 大埔县| 贺兰县| 西乌珠穆沁旗| 津市市| 永修县| 古丈县| 江达县| 什邡市| 弥勒县| 渭南市| 都江堰市| 遂宁市| 西乡县| 罗平县| 吉安市| 柳林县| 彰化县| 达孜县| 上犹县| 崇礼县| 富源县| 讷河市| 娱乐| 彭泽县| 山东| 任丘市| 汝南县| 普洱| 白山市| 江油市| 萨嘎县| 屏边| 双城市| 黄梅县|