傳統(tǒng)的C6000 DSP軟件是通過CCS在WINDOWS PC上進(jìn)行編譯調(diào)試,測試完畢把編譯好的可執(zhí)行文件燒錄到FLASH中。通過設(shè)置DSP啟動模式從FLASH啟動,上電即可實現(xiàn)DSP正常運轉(zhuǎn)。當(dāng)前ARM處理器性能日益增強(qiáng),在很多應(yīng)用中系統(tǒng)中會有ARM+DSP的方案。本文提出一種新思路,通過ARM來在線編譯DSP的代碼,在線下載DSP的程序,并啟動DSP運行。這種方法可以帶來以下好處:
1、可以動態(tài)更新DSP的代碼。通過集成不同的DSP庫文件可以實現(xiàn)DSP應(yīng)用和支持庫分離,在DSP運行時才進(jìn)行庫和應(yīng)用連接,極大的提高DSP軟件的靈活性。
2、DSP可以不需要FLASH,有利于節(jié)省BOM成本。
本文以AM5728 EVM+C6678 EVM為例實現(xiàn)了DSP程序板級在線編譯和下載。C6678是目前TI主推的多核高性能DSP,此芯片有8個C66 DSP CORE,支持多種啟動模式SRIO/Ethernet/PCIe/I2C/SPI/Hyperlink。本文使用AM5728 A15 ARM來進(jìn)行DSP代碼的編譯連接,通過網(wǎng)口下載到C6678板上,并啟動6678的8個DSP CORE運行。
一、安裝AM5728 EVM運行環(huán)境
本步會在AM5728 EVM上安裝ARM LINUX系統(tǒng)和C6000 DSP的編譯器。步驟如下:
1、使用最新的AM5728 LINUX SDK,本文測試的版本是ti-processor-sdk-linux-am57xx-evm-05.02.00.10。先制作一張啟動SD卡,具體操作方法可以參考SDK USER GUIDE。
2、AM5728 EVM可以順利啟動后,下載DSP的編譯器到EVM上,這是在ARM下運行的DSP編譯器。
3、把下載的文件放到AM5728 EVM上面運行安裝。安裝完畢可以在文件系統(tǒng)/user/bin/下面找到cg6x、hex6x等編譯工具。注意:編譯器的頭文件和庫文件默認(rèn)安裝路徑在/usr/share/ti/cgt-c6x/include和/usr/share/ti/cgt-c6x/lib
4、 至此,AM5728 EVM的環(huán)境準(zhǔn)備好了,可以編寫makefile通過command line的方式來編譯C66 DSP的代碼,具體實現(xiàn)方法見步驟三。
二、準(zhǔn)備C6678 EVM
本步會把C6678 DSP配置成ETHERNET BOOT的模式:
1、C6678 EVM DIP撥碼開關(guān)配置如下:
SW3(pin1, pin2, pin3, pin4): off, on, off, on
SW4(pin1, pin2, pin3, pin4): on, on, on, off
SW5(pin1, pin2, pin3, pin4): on, on, off, off
SW6(pin1, pin2, pin3, pin4): off, on, on, on
2、上述步驟1即可實現(xiàn)DSP ETHERNET BOOT,我們也可以用如下的方法來驗證是否成功。EVM和PC直連,上電,通過wireshark工具應(yīng)該可以抓到bootp數(shù)據(jù)包,如下:
大概3秒一次。(如果收不到這個數(shù)據(jù)包,可能需要更新EVM的FPGA程序,請聯(lián)系TI技術(shù)支持索取FPGA更新軟件。)
至此6678已經(jīng)處在ETHERNET BOOT的啟動方式下。
三、在AM5728 EVM上編譯C6678程序
1、在如下地址下載本文用到的DEMO:https://e2echina.ti.com/question_answer/dsp_arm/c6000_multicore/f/53/t/170590可以通過TFTP工具把這個DEMO放到AM5728文件系統(tǒng)中。
2、在AM5728 EVM上解壓縮后可以看到emac_boot_mc.zip,這是本文用到的測試代碼,可以把它解壓縮。由于軟件編譯需要CSL庫的支持,可以把最新的CSL庫復(fù)制到AM5728的文件系統(tǒng)。
CSL庫下載地址:http://software-dl.ti.com/processor-sdk-rtos/esd/C667x/latest/index_FDS.htmlPC上安裝后把pdk_C6678_xxxx這個目錄復(fù)制到AM5728文件系統(tǒng)。本文把pdk_C6678_1_1_2_6目錄復(fù)制到文件系統(tǒng)。
3、在AM5728 EVM上通過控制臺使用如下命令進(jìn)行編譯:
cl6x -mv6600 --include_path="/home/root/boot/emac_boot_mc/pdk_C6678_1_1_2_6/packages/" --include_path="/home/root/boot/emac_boot_mc/pdk_C6678_1_1_2_6/packages/ti/csl" --include_path="/usr/share/ti/cgt-c6x/include" --abi=eabi --preproc_with_compile "./core0_start_others.c"
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core0.out" "./core0_start_others.obj" "./core0_start_other.cmd" -llibc.a
cl6x -mv6600 --include_path="/home/root/boot/emac_boot_mc/pdk_C6678_1_1_2_6/packages/" --include_path="/home/root/boot/emac_boot_mc/pdk_C6678_1_1_2_6/packages/ti/csl" --include_path="/usr/share/ti/cgt-c6x/include" --abi=eabi --preproc_with_compile "./simple.asm"
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core1.out" "./simple.obj" "./core1.cmd" -llibc.a
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core2.out" "./simple.obj" "./core2.cmd" -llibc.a
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core3.out" "./simple.obj" "./core3.cmd" -llibc.a
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core4.out" "./simple.obj" "./core4.cmd" -llibc.a
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core5.out" "./simple.obj" "./core5.cmd" -llibc.a
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core6.out" "./simple.obj" "./core6.cmd" -llibc.a
cl6x -mv6600 -z --abi=eabi -i"/usr/share/ti/cgt-c6x/include" -i"/usr/share/ti/cgt-c6x/lib" --reread_libs --xml_link_info="emac_boot_mc_linkInfo.xml" --rom_model -o "core7.out" "./simple.obj" "./core7.cmd" -llibc.a
4、把8個.out文件復(fù)制到boot目錄。
四、使用AM5728 EVM制作并下載6678的程序
本 步驟可以把8個.out文件通過工具合成一個用于網(wǎng)絡(luò)發(fā)送的文件,并發(fā)送到6678EVM上運行。
1、AM5728 EVM控制臺執(zhí)行EMACboot_8core.sh腳本,這個腳本可以把8個.out文件合成一個用于網(wǎng)絡(luò)發(fā)送的multi_core.eth文件。腳本如下:
hex6x core0.rmd
hex6x core1.rmd
hex6x core2.rmd
hex6x core3.rmd
hex6x core4.rmd
hex6x core5.rmd
hex6x core6.rmd
hex6x core7.rmd
./mergebtbl core0.btbl core1.btbl core2.btbl core3.btbl core4.btbl core5.btbl core6.btbl core7.btbl multi_core.btbl
./bootpacket multi_core.btbl multi_core.eth FF-FF-FF-FF-FF-FF FF-FF-FF-FF-FF-FF
2、注意,mergebtbl和bootpacket源碼都在boot目錄,可以通過編譯器交叉編譯后放到AM5728 EVM上運行。
../ti-processor-sdk-linux-am57xx-evm-05.02.00.10/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-gcc -o mergebtbl mergebtbl.c
../ti-processor-sdk-linux-am57xx-evm-05.02.00.10/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-gcc -o bootpacket bootpacket.c
3、通過交叉編譯器編譯工具pcsendpkt,這是網(wǎng)絡(luò)數(shù)據(jù)包發(fā)送工具。
../ti-processor-sdk-linux-am57xx-evm-05.02.00.10/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-gcc -o pcsendpkt pcsendpkt.c
4、6678EVM上電,并通過網(wǎng)口直連AM5728 EVM。在AM5728 EVM控制臺輸入如下命令:
ifconfig eth1 192.168.1.10
arp -s 192.168.1.12 ff:ff:ff:ff:ff:ff
這兩個命令分別配置AM5728和6678的IP地址。
./pcsendpkt multi_core.eth 192.168.1.12
如下圖,表示發(fā)送完成。
五、通過CCS JTAG查看6678運行結(jié)果。
通過仿真器連接6678 CORE1~CORE7任意一個核,可以看到A1寄存器是0x11223344表示啟動成功。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
19349瀏覽量
230297 -
dsp
+關(guān)注
關(guān)注
554文章
8031瀏覽量
349386 -
ARM
+關(guān)注
關(guān)注
134文章
9111瀏覽量
368042
發(fā)布評論請先 登錄
相關(guān)推薦
評論