下載地址為什么是0xd0020010?
剛開始在s5pv210的開發(fā)板上學(xué)習(xí)嵌入式開發(fā)時(shí),學(xué)習(xí)教程上每次都說,利用usb方式啟動(dòng)時(shí),需要先將usb驅(qū)動(dòng)下載到0xd0020010這個(gè)地址處,每每聽到這里,我都很疑惑為什么一定要下載到此處,可以說算得上是滿臉的黑人問號(hào)吧。但是咱也不知道,只能硬著頭皮繼續(xù)學(xué)習(xí)。
????最近,當(dāng)初的那個(gè)“為什么”總是時(shí)不時(shí)地出現(xiàn)在自己的腦海中,本著讓自己心安的態(tài)度進(jìn)行了一番探索,得出了結(jié)論,分享如下,如有不足,希望大家能夠指正:

首先,且看上圖,我們可以得知s5pv210這款芯片的內(nèi)存地址的配情況,然后再結(jié)合下面這個(gè)表:

我們可以知道,0x0000_0000~0x1FFF_FFFF是一個(gè)特殊區(qū)域,他會(huì)根據(jù)boot? mood的結(jié)果來決定將某區(qū)域內(nèi)存的指令映射到本區(qū)域,供程序指針(PC)讀取執(zhí)行。210啟動(dòng)的過程可以大概總結(jié):
1、上電,執(zhí)行rom內(nèi)的廠家固化代碼,識(shí)別boot mode(norFlash/SD/NAND)完成一些簡單的初始化,保證cpu能夠具有將bl1代碼從nand讀取到sram中執(zhí)行的能力。
2、bl1代碼執(zhí)行的過程中進(jìn)一步對(duì)nand進(jìn)行初始化,以便完成將bl2代碼讀入ddr中執(zhí)行的操作
3、bl2代碼執(zhí)行,完成對(duì)ddr的初始化,并將整個(gè)uboot與內(nèi)核代碼拷貝到ddr中執(zhí)行。
在學(xué)習(xí)中,210上并沒有norFlash,為了學(xué)習(xí)方便,我們使用的是SD卡啟動(dòng)的方式,因此被映射到0x0000_0000~0x1FFF_FFFF是這個(gè)特殊區(qū)域的內(nèi)存區(qū)域0xD000_0000~0xD003_7FFF。查表我們可以知道,這個(gè)區(qū)域可以分為兩塊:0xD000_0000
~0xD000_FFFF(IROM),0xD002_0000~0xD003_7FFF(IRAM)。
眾所周知,IROM就是rom,這種內(nèi)存一般不能直接寫,只可以直接讀,因此我們并不能將我們的實(shí)驗(yàn)程序?qū)戇M(jìn)這個(gè)內(nèi)存區(qū)域里,我們的實(shí)驗(yàn)程序?qū)嶋H上是扮演了BL1與BL2的作用,運(yùn)行在IRAM中,因此BL1的加載內(nèi)存地址在不需要校驗(yàn)的情況下可以是0xD0020000,但是我們模仿的是uboot的加載原理,uboot要求必須在BL1的開頭設(shè)置校驗(yàn)位,校驗(yàn)通過的情況下才可以繼續(xù)往后執(zhí)行,因此在BL1的開頭設(shè)置了16字節(jié)的校驗(yàn)位,因此我們的程序必須從IRAM的第十七個(gè)字節(jié)開始執(zhí)行,即加載地址就編程了0xD0020010,下載地址因此就是0xD0020010。
綜上所述,使用sd卡作為啟動(dòng)介質(zhì)時(shí),下載地址為0xD0020010