問(wèn):現(xiàn)在做609的bootloader程序和應(yīng)用程序的分區(qū)!上電時(shí)加載bootloader程序,通過(guò)bootloader來(lái)加載應(yīng)用程序!主要問(wèn)題:上電時(shí)加載bootloader程序,這個(gè)已經(jīng)實(shí)現(xiàn)了,bootloader可以正常加載和運(yùn)行! 1. 應(yīng)用程序編譯時(shí)要應(yīng)該怎么配置編譯后,放置到Flash的某個(gè)地方加載,才能夠運(yùn)行起來(lái)? 2. 編譯后生產(chǎn)的 .ldr 和 dxe 有什么區(qū)別,怎么生成類似bin和hex的來(lái)放置到flash中? 以上兩個(gè)問(wèn)題,希望專家解答下,有沒(méi)有實(shí)例。!
答:1. 需要在bootloader程序里面加入rom_boot(Address, 0, 0, 0, 0x20210002,0),第一個(gè)參數(shù)為應(yīng)用程序燒寫(xiě)在flash中的地址 2. ldr文件為燒寫(xiě)到flash中的文件格式,dxe為連接仿真器時(shí)聲稱的文件格式
問(wèn):謝謝回復(fù),我將問(wèn)題分段有幾點(diǎn)不明白: 1. rom_boot應(yīng)該為系統(tǒng)函數(shù),實(shí)現(xiàn)函數(shù)跳轉(zhuǎn)功能,將Address處的LDR文件加載到DSP中運(yùn)行,加載后,DSP是不是類似重新配置了所有的初始化的東西? 2. 在生產(chǎn)應(yīng)用程序的LDR文件時(shí),是否需要特別設(shè)置(例如arm芯片需要設(shè)置中斷向量表地址等設(shè)置)?這個(gè)LDR是不是類似bin文件,只要見(jiàn)LDR文件寫(xiě)入從Address開(kāi)始的地址即可?
答:1. 是的,root_boot是將ADDRESS處的ldr加載運(yùn)行,這要看具體需求,如果bootloader中已經(jīng)做過(guò)了初始化的工作,自己的升級(jí)程序可以不再初始化,初始化的工作需要initialization file 2. ldr不需要特殊配置,中斷向量表等都有默認(rèn)配置值,也可以根據(jù)需要在程序中修改。只不過(guò)生成ldr時(shí)需要加入初始化外部ddr的dxe,和你的工程dxe一起組成ldr。是的,ldr是從你address指定的位置開(kāi)始執(zhí)行
問(wèn):雙核跑的時(shí)候,怎么燒程序到spi flash呢?有沒(méi)有雙核跑時(shí),bootloader 和 app應(yīng)用程序雙區(qū)分區(qū),通過(guò)bootloder升級(jí)app程序的方法和實(shí)例?
答:對(duì)于雙核工程使用elfloader把兩個(gè)核的dxe合成為一個(gè)ldr,然后再使用cldp把ldr文件燒寫(xiě)到flash中。另外請(qǐng)確認(rèn)你所用的nor flash是不是32bit的,-bcode 0x6適用于16bit flash,0xA適用于32bit flash。下面的例子以16bit nor flash(如為SPI flash請(qǐng)自行修改,參考elfloader -h幫助)為例。還要確認(rèn)BF609的版本,revision要與BF609_init版本對(duì)應(yīng),以下以0.0為例 把兩個(gè)dxe文件及BF609_init_v00.dxe拷到elfloader所在目錄下 在cmd窗口中輸入命令如下 elfloader.exe -proc ADSP-BF609 -si-revision 0.0 -b MEMORY -f binary -width 16 -init BF609_init_v00.dxe -bcode 0x6 Core0.dxe -NoFinalTag Core1.dxe -o core.ldr 燒寫(xiě)flash請(qǐng)使用cldp,如使用SPI flash請(qǐng)自行替換flash driver cldp -proc ADSP-BF609 -emu HPUSB -driver bf609_pc28f128p33_dpia.dxe -cmd prog -erase affected -offset 0 -format binary -file core.ldr driver文件在C:\Analog Devices\ADSP-BF609_Evaluation_Board-Rel1.0.3\BF609_EZ-Board\Blackfin\Examples\Device_Programmer\parallel
問(wèn):
非常感謝你的詳細(xì)回復(fù),有三大疑問(wèn):
1.你的回答:要確認(rèn)BF609的版本,revision要與BF609_init版本對(duì)應(yīng),以下以0.0為例,把兩個(gè)dxe文件及BF609_init_v00.dxe拷到elfloader所在目錄下;這里的BF609的版本從哪里看出來(lái),我好像沒(méi)有管它,BF609_init_v00.dxe這個(gè)dxe是哪里來(lái)?
2. 你的命令:elfloader.exe -proc ADSP-BF609 -si-revision 0.0 -bMEMORY -f binary -width 16 -init BF609_init_v00.dxe-bcode 0x6 Core0.dxe -NoFinalTag Core1.dxe -ocore.ldr 相當(dāng)于把兩個(gè)Core0.dxe,Core1.dxe合并成Core.ldr,再將Core.ldr燒寫(xiě)到FLash中;若采用bootloader和應(yīng)用程序雙區(qū)分區(qū)時(shí),應(yīng)用程序是否也可以這樣做,將兩個(gè)核的dxe鏈接后生產(chǎn)新ldr文件,放置到flash的Address處,再按照你所說(shuō)的在bootlaoder程序中加入rom_boot(Address, 0, 0, 0,0x20210002,0)來(lái)加載?
3. 我是這樣燒單核的ldr文件bootlaoder.ldr的:cldp.exe -@-proc ADSP-BF609 -emu HPUSB -driver w25q32bv_dpia.dxe-cmd prog -erase affected -offset 0 -format hex -filebootlaoder.ldr 這種可以燒寫(xiě)成功并正常從SPIflash加載運(yùn)行!試問(wèn):這種沒(méi)有用到BF609_init_v00.dxe是否有其他風(fēng)險(xiǎn)?
答:1. 在C:\Analog Devices\CrossCore Embedded Studio 1.0.3\Blackfin\ldr\init_code\BF609_init,主要是用于初始化開(kāi)發(fā)板上的ddr,如果客戶更換了自己的ddr需要作出相應(yīng)修改 2. 是的 3. BF609_init_v00.dxe主要是客戶應(yīng)用程序啟動(dòng)之前用于初始化ddr,如果客戶程序比較大,需要有一些程序從ddr執(zhí)行,只有初始化過(guò)ddr后,后續(xù)的程序才能加載到ddr上 |