首先C6678是一个多核处理器(8个C66XX核),每个核都有自己独立32KB的LIP、32KB的L1D以及512KB的L2,此外8个核还有4M的共享的MSM,接口资源包括,SRIO,PCIe,Hyperlink,Gigabit Ethernet (GbE),EMIF,TSIP,UART,I2C,SPI接口。其中SRIO、Hyperlink、PCIe为常用的高速接口可以满足片间(两个C6678之间)、板件(两个C6678板卡之间)高速的数据交换需求。而UART、I2C、SPI则为常用典型的低速接口,以满足某些典型的低速芯片访问需求,例如SPI-norflash、I2C-eeprom等。
一、加载模式,加载模式是DSP针对芯片启动首先需要考虑的问题,因为实际应用当中不可能总是使用仿真器来完成程序的加载工作,作为成熟的方案,程序总是通过上电后用某个实现设定好的接口完成程序的加载工作。而 针对这些接口,RBL(ROM bootloader)确实支持多种程序加载模式,包括,EMIF bootmode,SRIO bootmode,Ethernet bootmode ,PCIe bootmode,I2C bootmode,SPI bootmode,Hyperlink bootmode,UART bootmode。这些启动方式的选择是由RBL启动时读取配置引脚(C6678EVM板是由拨动开关控制的)电平来决定的。针对各种加载方式以下为简单描述。
(1)SPI加载方式,可以通过SPI外挂一个NorFlash,将待加载的程序通过TI官方提供的转化工具将需要加载的.out程序转化成.h文件,然后通过仿真器将数据烧写到norFlash中,最后将6678配置成SPI启动方式,重新上电即可。
(2)PCIE加载模式,由于目前版本的C6678存在PLL频率锁不住的问题,所以需将C6678配置成二次加载模式,具体而言就是先用SPI加载,然后通过SPI加载的程序初始化好PLL始终以及PCIE接口,然后通过PCIE接口来加载程序,PCIE加载模式是由上位机通过PCIE直接写DSP内存来实现加载功能的。首先通过TI官方提供的工具将需要加载的.out程序转化成.bin文件,然后读取bin文件通过PCIE接口直接写到DSP内存,然后触发运行即可。
(3)以太网口加载模式(EMAC boot),该加载模式是通过网口发送udp包来完成的,首先是文件的处理,将需要加载.out文件用TI官网提供的工具转化成.eth文件,然后将DSP配置成以太网加载模式,DSP会通过网口想外界广播BOOTP的广播包,通过抓包工具抓包,并分析DSP的MAC地址,再通过ARP命令将该MAC地址映射到与上位机同一网段的IP地址上,最后用TI提供的pcsendpkt工具将.eth文件发送给DSP,DSP受到上位机发送的UDP的数据包后,会自动凭借数据,最后自动触发运行程序。
二、3种加载方式的优缺点比较。
这三种加载模式各有优缺点,第一种加载方式-SPI加载方式,适合在程序已经开发得很成熟的时候,此时将程序固化到FLASH中,将芯片配置成以SPI加载模式以后,重新上电后芯片便会从FLASH中读取程序启动。但是这种加载模式由于需要将程序固化到FLASH中,增在了程序加载的稳定性,但是同时也不利于更改和调试。第二种加载模式-PCIE加载模式,适合用于上位机对DSP的测试,因为这种加载模式加载非常灵活,而且调试起来也很容易,因为上位机可以通过PCIE直接读写DSP内存,很多时候甚至可以做到仿真器可以做到的事情。第三种方式-以太网加载,以太网加载的好处是可以更加方便、快捷的实现加载功能,尤其是实现远程加载功能,而这正好弥补了第一种和第二种加载方式的不足,缺点是上位机无法像PCIE、SRIO那样直接将DSP内存直接映射过来从而完成对DSP内存的直接读写,所以不利于调试。