新聞中心

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

ARM9啟動(dòng)分析存儲(chǔ)器區(qū)分和啟動(dòng)流程解析

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

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

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

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

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

看到這個(gè)圖,我們是否發(fā)現(xiàn)了理解了一點(diǎn)點(diǎn)啟動(dòng)流程了啊?如果還有疑問讓我們?cè)賮矸治鲆幌耂3C2440的存儲(chǔ)控制模塊,實(shí)際就是存儲(chǔ)地圖。如下圖所示:

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

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

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



評(píng)論


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

關(guān)閉