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

1.首先應該先了解Flash ROM的種類程序員

  NOR FLASH地址線和數據線分開,來了地址和控制信號,數據就出來。
  NAND Flash地址線和數據線在一塊兒,須要用程序來控制,才能出數據。通俗的說,只給地址不行,要先命令,再給地址,才能讀到NAND的數據,在一個總線完成的。
  結論是:ARM沒法從NAND直接啓動。除非裝載完程序,才能使用NAND Flash.
   Nand Flash的命令、地址、數據都經過I/O口發送,管腳複用,這樣作作的好處是,能夠明顯減小NAND FLASH的管腳數目,未來若是設計者想將NAND FLASH更換爲更高密度、更大容量的,也沒必要改動電路板。在S3C2440中NANDFLASH的控制依靠NAND FLASH控制器。不可以執行程序,總結其緣由以下 :
(1) NAND FLASH自己是鏈接到了控制器上而不是系統總線上。CPU啓動後是要取指令執行的,若是是SROM、NOR FLASH 等之類的,CPU 發個地址就能夠取得指令並執行,NAND FLASH不行,由於NAND FLASH 是管腳複用,它有本身的一套時序,這樣CPU沒法取得能夠執行的代碼,也就不能初始化系統了。
(2)NAND FLASH是順序存取設備,不可以被隨機訪問,程序就不可以分支或跳轉,這樣你如何去設計程序。編程

 

2.在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中運行。spa


3.啓動方式:操作系統

Samsung S3C2440支持Nor Flash和Nand Flash啓動,主要由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會經過引腳的電平來判斷。
(1)當引腳OM0跟OM1有一個是高電平時,這時地址0會映射到外部nGCS0片選的空間(Bank0),也就是Norflash,程序就會從Norflash中啓動,ARM直接取Norflash中的指令運行。
(2) 當OM0跟OM1都爲低電平,則0地址內部bootbuf(一段4k的SRAM)開始。系統上電,ARM會自動把NANDflash中的前4K內容考到 bootbuf(也就是0地址),而後從0地址運行。這時NANDFlash中的前4K就是啓動代碼(他的功能就是初始化硬件而後在把NANDFlash 中的代碼複製到RAM中,再把相應的指針指向該運行的地方)調試

 

4.啓動代碼應該作什麼?
  因爲Nand Flash控制器從Nand Flash中搬移到內部RAM的代碼是有限的,因此在啓動代碼的前4K裏,咱們必須完成S3C2440的核心配置以及把啓動代碼(U-BOOT)剩餘部分 搬到RAM中運行。至於將2440當作單片機玩裸跑程序的時候,就不要作這樣的事情,當代碼小於4K的時候,只要下到nand flash中就會被搬運到內部RAM中執行了。bootloader在某種意義上來講便是一個啓動代碼,種類有不少(vivi,uboot 等),可是功能上無非就是完成一些初始化。bootloader是芯片復位後進入操做系統以前執行的一段代碼,完成由硬件啓動到操做系統啓動的過渡,爲運 行操做系統提供基本的運行環境,如初始化CPU、堆棧、初始化存儲器系統等,其功能相似於PC機的BIOS。code

  在實際的開發中,通常能夠把bootloader燒入到Norflash,程序運行能夠經過串口交互,進行必定的操做,好比下載,調試。這樣就很能夠很方便的調試你的一些代碼。Norflash中的Bootloader還能夠燒錄內核到Norflash等等功能。

5.存儲控制器的做用:
  在2440中分了8個bank,每一個bank的基地址由nCGSx來選擇,每一個bank都接外設以後,就能夠經過存儲控制器來進行地址上的選擇了。每一個bank與外設的鏈接方式不同,主要看外設是每次進行多少位的數據傳輸,若是是8位,這樣CPU的地址線A0就能夠直接接外設的A0,若是是16位,那麼CPU的A1就該接到外設的A0,以此類推。nor flash接在bank0,數據線爲16位。存儲控制器的特性以下:
  大小端設置;
  地址空間:每一個bank爲128MB (總共1GB);
  除了bank0其他全部banks的數據位寬是可編程的(8/16/32-bit);(bank0是16/32位)
   總共8個memory banks,其中6個bank是接ROM,SRAM等,其他2個bank是接ROM,SRAM,SDRAM等;
  7個memory bank的起始地址是固定的;(發現size也是固定的,128MB)
  1個memory bank的起始地址和大小是可靈活可變的;
  全部banks的訪問週期數是可編程的;
  支持片外等待信號以擴充總線週期;
  SDRAM在Power down模式下支持自動刷新。blog

  這裏看到有8個BANK,而後他們地址怎麼就能夠肯定呢?理解:外面一共就使用了27根地址線,還有5根地址線沒有被使用,5根地址線就有16個選擇了,初步估計其中的3根又被用來選擇這8個bank了,因此纔有那樣的地址~~至於那個可變地址,暫時還想不出什麼解釋,好像是叫部分譯碼~呵呵。。OK接口

6.Nand Flash控制器:
   自動啓動: 系統復位後,boot code搬運到4KB Steppingstone,而後在其內部執行;
   Nand Flash存儲接口: 支持256Words,512Bytes,1KWords和2KBytes Page;
  軟件模式: 用戶能直接訪問nand flash;
  接口: 支持8/16-bit Nand flash存儲接口;
  支持大小端模式;
  硬件ECC發生器;
  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模塊是不發揮做用的。

相關文章
相關標籤/搜索