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