传统的C6000 DSP软件是通过CCS在WINDOWS PC上进行编译调试,测试完毕把编译好的可执行文件烧录到FLASH中。通过设置DSP启动模式从FLASH启动,上电即可实现DSP正常运转。当前ARM处理器性能日益增强,在很多应用中系统中会有ARM+DSP的方案。本文提出一种新思路,通过ARM来在线编译DSP的代码,在线下载DSP的程序,并启动DSP运行。这种方法可以带来以下好处: 1、可以动态更新DSP的代码。通过集成不同的DSP库文件可以实现DSP应用和支持库分离,在DSP运行时才进行库和应用连接,极大的提高DSP软件的灵活性。 2、DSP可以不需要FLASH,有利于节省BOM成本。 本文以AM5728 EVM+C6678 EVM为例实现了DSP程序板级在线编译和下载。C6678是目前TI主推的多核高性能DSP,此芯片有8个C66 DSP CORE,支持多种启动模式SRIO/Ethernet/PCIe/I2C/SPI/Hyperlink。本文使用AM5728 A15 ARM来进行DSP代码的编译连接,通过网口下载到C6678板上,并启动6678的8个DSP CORE运行。 本步会在AM5728 EVM上安装ARM LINUX系统和C6000 DSP的编译器。步骤如下: 1、使用最新的AM5728 LINUX SDK,本文测试的版本是ti-processor-sdk-linux-am57xx-evm-05.02.00.10。先制作一张启动SD卡,具体操作方法可以参考SDK USER GUIDE。 3、把下载的文件放到AM5728 EVM上面运行安装。安装完毕可以在文件系统/user/bin/下面找到cg6x、hex6x等编译工具。注意:编译器的头文件和库文件默认安装路径在/usr/share/ti/cgt-c6x/include和/usr/share/ti/cgt-c6x/lib 4、 至此,AM5728 EVM的环境准备好了,可以编写makefile通过command line的方式来编译C66 DSP的代码,具体实现方法见步骤三。 二、准备C6678 EVM 本步会把C6678 DSP配置成ETHERNET BOOT的模式: 1、C6678 EVM DIP拨码开关配置如下: 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即可实现DSP ETHERNET BOOT,我们也可以用如下的方法来验证是否成功。EVM和PC直连,上电,通过wireshark工具应该可以抓到bootp数据包,如下:
大概3秒一次。(如果收不到这个数据包,可能需要更新EVM的FPGA程序,请联系TI技术支持索取FPGA更新软件。) 至此6678已经处在ETHERNET BOOT的启动方式下。 2、在AM5728 EVM上解压缩后可以看到emac_boot_mc.zip,这是本文用到的测试代码,可以把它解压缩。由于软件编译需要CSL库的支持,可以把最新的CSL库复制到AM5728的文件系统。 3、在AM5728 EVM上通过控制台使用如下命令进行编译: 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文件复制到boot目录。 本 步骤可以把8个.out文件通过工具合成一个用于网络发送的文件,并发送到6678EVM上运行。 1、AM5728 EVM控制台执行EMACboot_8core.sh脚本,这个脚本可以把8个.out文件合成一个用于网络发送的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,这是网络数据包发送工具。 ../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 ifconfig eth1 192.168.1.10 arp -s 192.168.1.12 ff:ff:ff:ff:ff:ff ./pcsendpkt multi_core.eth 192.168.1.12
如下图,表示发送完成。 五、通过CCS JTAG查看6678运行结果。 通过仿真器连接6678 CORE1~CORE7任意一个核,可以看到A1寄存器是0x11223344表示启动成功。
|