新聞中心

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

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

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

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

本文引用地址:http://2s4d.com/article/201611/318242.htm

我們開(kāi)始討論代碼存放的地方了,注意的是我在這里給代碼加一個(gè)限制,(是固化的程序,區(qū)別開(kāi)linux系統(tǒng)文件和bootlooder,我在這里定義bootlooder為程序而linux文件系統(tǒng)為數(shù)據(jù))。代碼有很多存放的方式,一、存儲(chǔ)在單片機(jī)的flash上,像ARM7一類(lèi)的單片機(jī)(LPC2478就帶有512k的flash)。二、存放在NOR flash中,就是是SDRAM中(如果是SDRAM的芯片就沒(méi)法存儲(chǔ)了如有的開(kāi)發(fā)板用的是HY57V641620 SDRAM芯片,代碼是沒(méi)法存儲(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)流程了???如果還有疑問(wèn)讓我們?cè)賮?lái)分析一下S3C2440的存儲(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)的流程。

大家看到的是通過(guò)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”然后開(kāi)始執(zhí)行起動(dòng)代碼。通常起動(dòng)代碼會(huì)把NAND flash中的內(nèi)容拷到SDRAM中以便執(zhí)行主代碼。注意boot過(guò)程是要設(shè)置成autoboot的,是通過(guò)硬件來(lái)設(shè)置的。在復(fù)位和上電啟動(dòng)過(guò)程都要經(jīng)過(guò)這樣的一個(gè)啟動(dòng)過(guò)程,這是最初一步的啟動(dòng)過(guò)程。下面就是在通過(guò)bootlooder的代碼設(shè)置系統(tǒng)時(shí)鐘和初始化寄存器等一系列的工作,在完成后通過(guò)跳轉(zhuǎn)指令跳轉(zhuǎn)到系統(tǒng)引導(dǎo)階段。完成啟動(dòng)。最近還移植了一個(gè)最新的u-boot,支持的東西還是挺多的。對(duì)這個(gè)整體了解也有了一些加深。

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



評(píng)論


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

關(guān)閉