<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > mini2440 nand flash和nor flash啟動(dòng)的區(qū)別

          mini2440 nand flash和nor flash啟動(dòng)的區(qū)別

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          mini2440及其他類(lèi)型的開(kāi)發(fā)板一般都有從nand flashnor flash啟動(dòng)兩種方式,那么這兩種啟動(dòng)方式有什么區(qū)別呢,初學(xué)者一般都會(huì)一頭霧水。下面就講講這兩種啟動(dòng)方式的區(qū)別。

          本文引用地址:http://www.ex-cimer.com/article/201611/322614.htm

          mini2440的nand flash128M,而nor flash只有2M,系統(tǒng)的bootloader一般很小,只有200多KB,而作為一個(gè)完整的系統(tǒng),需要bootloader(200KB),kernel(2M),rootfs(100M),這些加起來(lái)就有100多M了,這三個(gè)部分需要一直存在系統(tǒng)中,掉電非易失,當(dāng)然就不能放在內(nèi)存(SDRAM)中了,需要放在非易失存儲(chǔ)器nandflash中,norflash因?yàn)楹苄。?M)只可以容納的下bootloader,所以mini2440的nandflash中存放bootloader(200KB),kernel(2M),rootfs(100M),norflash存放bootloader。因此mini2440既可以從nandflash啟動(dòng)也可以從norflash啟動(dòng),但是運(yùn)行操作系統(tǒng)的話(huà)只能從nandflash啟動(dòng),從nand flash啟動(dòng)的時(shí)候整個(gè)操作系統(tǒng)也并不是在nand flash中運(yùn)行,而是映射到內(nèi)存SDRAM中運(yùn)行。值得注意的是,在norflash啟動(dòng)模式下進(jìn)入bootloader菜單項(xiàng),可以通過(guò)DNW下載程序或文件到nandflash中,也可以把nandflash中的東西上傳到PC機(jī),而并不是只能在norflash和PC機(jī)之間傳送文件和程序等。

          S3C2440的啟動(dòng)時(shí)讀取的第一條指令是在0x00上,分成nandflash和norflash上啟動(dòng)。

          norflash有自己的地址線(xiàn)和數(shù)據(jù)線(xiàn),可以采用類(lèi)似于memory的隨機(jī)訪問(wèn)方式,在norflash上可以直接運(yùn)行程序,所以norflash可以直接用來(lái)做boot,采用norflash啟動(dòng)的時(shí)候會(huì)把地址映射到0x00上。mini2440就是直接把vivi直接燒錄在norflash上。

          nandflash是IO設(shè)備,數(shù)據(jù)、地址、控制線(xiàn)都是共用的,需要軟件區(qū)控制讀取時(shí)序,所以不能像norflash、內(nèi)存一樣隨機(jī)訪問(wèn),不能EIP(片上運(yùn)行),因此不能直接作為boot。

          S3C2440把bootloader燒到nandflash上啟動(dòng),因?yàn)樵赟3C2440里有一個(gè)內(nèi)置的SRAM,叫做steppingstone(墊腳石,很形象…),系統(tǒng)啟動(dòng)加電后,會(huì)把nandflash上的起始4KB的內(nèi)容拷貝到SRAM里執(zhí)行,這樣就實(shí)現(xiàn)了從nandflash啟動(dòng)。如果bootloader小于4KB的話(huà)(像vboot),在SRAM里就能boot,大于4KB的話(huà)(u-boot,vivi),在SRAM里做一些基本初始化后,再把bootloader的剩余部分拷貝到SDRAM里(>0x30000000)。

          //=================================================================//注:bootloader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。通常,bootloader是嚴(yán)重地依賴(lài)于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的bootloader幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫?duì)BootLoader歸納出一些通用的概念來(lái),以指導(dǎo)用戶(hù)特定的bootloader設(shè)計(jì)與實(shí)現(xiàn)。

          //=================================================================//

          我們使用S3C2440的時(shí)候,經(jīng)常通過(guò)norflash啟動(dòng),進(jìn)入vivi的菜單(S3C2440的norflash已經(jīng)燒錄好了vivi),之后通過(guò)vivi的USB下載功能,把其他的bootloader下載到nandflash里,下載完成后,再通過(guò)nandflash啟動(dòng),測(cè)試我們的bootloader。

          norflash適合做代碼存儲(chǔ)并EIP的,nandflash適合用來(lái)作大量數(shù)據(jù)存儲(chǔ)的。

          Nandflash啟動(dòng):nandflash存儲(chǔ)器的前4K將被自動(dòng)加載到Steppingstone(內(nèi)部SRAM緩沖器),然后系統(tǒng)自動(dòng)執(zhí)行這些載入的啟動(dòng)代碼,這4K的啟動(dòng)代碼需要將nandflash中的內(nèi)容復(fù)制到SDRAM中執(zhí)行。nandflash的前4K空間放啟動(dòng)代碼,SDRAM速度較快,用來(lái)執(zhí)行主程序的代碼。

          //================================================================//

          注:SDRAM(SynchronousDynamicRandomAccessMemory),同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,同步是指Memory工作需要同步時(shí)鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動(dòng)態(tài)是指存儲(chǔ)陣列需要不斷的刷新來(lái)保證數(shù)據(jù)不丟失;隨機(jī)是指數(shù)據(jù)不是線(xiàn)性依次存儲(chǔ),而是自由指定地址進(jìn)行數(shù)據(jù)讀寫(xiě)。

          //=================================================================//




          關(guān)鍵詞: mini2440nandflashnorflash啟

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();