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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM9啟動分析存儲器區(qū)分和啟動流程解析

          ARM9啟動分析存儲器區(qū)分和啟動流程解析

          作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          最近遇到一個大大的問題,其實以前都一直有問題,但是我沒有去深究過!主要是我自己想來弄點新東西,打算用J-link燒寫ARM9的處理器,如果能夠?qū)-link的強大調(diào)試功能也移到arm9上,那將是一件多么美妙的事情啊。就帶著這個問題我一直看資料,最開始我是有兩塊開發(fā)板的,具體點說是三塊。但是我當(dāng)初只用了一塊的時候,我沒發(fā)現(xiàn)什么問題。我當(dāng)時就是按照別人給我的說明書上進(jìn)行操作的,也沒有去理解和分析為什么!但是最近因為有了那個打算,就發(fā)現(xiàn)問題了。我在一塊板子上用H-JTAG可以進(jìn)行燒寫,在另外一塊上也可以,但是都有一個共同點就是,兩塊板子都是arm9的(分別是S3C2410和S3C2440),同樣我在實際應(yīng)用中還用到了LPC2478.用J-link來調(diào)試和燒寫ARM7是件很簡單的事情。我想我都具備了這么多條件應(yīng)該很容易就可以用j-link來燒寫arm9了吧!實際上是我想錯了!我遇到了這個問題好多天了,一直在弄。最后才發(fā)現(xiàn)是我沒弄清楚流程,下面分享下我對這些處理器的啟動流程和代碼存儲的分析。

          首先,理清幾個概念。NOR flash:(概念最用我自己的語言概括了)是早期的flash,存儲量少,存儲速度慢,但是執(zhí)行速度快,可以在flash上執(zhí)行??梢杂脕泶鎯Υa和作為SDRAM。NAND flash :是用來做海量存儲的,一般用來存儲數(shù)據(jù),文件系統(tǒng)等,燒寫速度快。SDRAM :動態(tài)存儲器,用來進(jìn)行數(shù)據(jù)存儲,數(shù)據(jù)刷新,和代碼執(zhí)行。但是不能存儲代碼。要理解SDRAM和NOR flash的區(qū)別,NOR flash是可以用來做為SDRAM,但是不是SDRAM。

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

          我們開始討論代碼存放的地方了,注意的是我在這里給代碼加一個限制,(是固化的程序,區(qū)別開linux系統(tǒng)文件和bootlooder,我在這里定義bootlooder為程序而linux文件系統(tǒng)為數(shù)據(jù))。代碼有很多存放的方式,一、存儲在單片機的flash上,像ARM7一類的單片機(LPC2478就帶有512k的flash)。二、存放在NOR flash中,就是是SDRAM中(如果是SDRAM的芯片就沒法存儲了如有的開發(fā)板用的是HY57V641620 SDRAM芯片,代碼是沒法存儲的)三、存放在NAND flash中,一般的代碼都存放在NAND flash中在。

          還需要知道的知識就是,存儲器的地址映射,下面我們看一種方式的地址映射。代碼存放在NAND flash中,用SDRAM的芯片做為動態(tài)存儲的例子:如下圖:

          看到這個圖,我們是否發(fā)現(xiàn)了理解了一點點啟動流程了啊?如果還有疑問讓我們再來分析一下S3C2440的存儲控制模塊,實際就是存儲地圖。如下圖所示:

          解釋下上圖,有多種啟動方式的,一種是利用NAND flash啟動。一種是不用,不用的方式就是直接用SROM(S就是動態(tài)的存儲空間,其實就是NOR flash)。重點介紹利用NAND flash啟動的流程。

          大家看到的是通過M[10]=00的方式設(shè)置啟動方式為用NAND flash啟動的方式,S3C2440內(nèi)部有一個4K的SRAM。這個是芯片自帶的。為了支持NAND flash起動,S3C2410內(nèi)建了內(nèi)部的4k的SRAM緩存“Steppingstone”。當(dāng)起動時,NAND flash最初的4k字節(jié)將被讀入”Steppingstone”然后開始執(zhí)行起動代碼。通常起動代碼會把NAND flash中的內(nèi)容拷到SDRAM中以便執(zhí)行主代碼。注意boot過程是要設(shè)置成autoboot的,是通過硬件來設(shè)置的。在復(fù)位和上電啟動過程都要經(jīng)過這樣的一個啟動過程,這是最初一步的啟動過程。下面就是在通過bootlooder的代碼設(shè)置系統(tǒng)時鐘和初始化寄存器等一系列的工作,在完成后通過跳轉(zhuǎn)指令跳轉(zhuǎn)到系統(tǒng)引導(dǎo)階段。完成啟動。最近還移植了一個最新的u-boot,支持的東西還是挺多的。對這個整體了解也有了一些加深。

          在我理解了這么多了后,后來我就解決了那個問題,我的錯誤是沒認(rèn)真分析,我一直在用j-link flasher燒寫SDRAM,難怪問題一直解決不了?。∑鋵嵕褪菦]有好好的去總結(jié)自己所看到的東西!做產(chǎn)品設(shè)計還真的是要脫了幾層皮你的東西才能過關(guān)!!



          評論


          技術(shù)專區(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); })();