这篇文章主要介绍C6678的EMIF16多核boot过程。
我们把应用程序烧写到flash,并实现dsp的自启动,包括四个部分:需要烧写的应用工程、转换工具、把转换后的文件烧写到dsp外挂的flash的烧写工程,以及BootModepins管脚的配置。
1、BootModepins管脚在EMIFboot模式下BootModepins[5]应设置为1,其他位可以都设置为0.

BootModepins
2、应用工程
在core0的应用工程中,除了完成自身的任务之外,还要作为主核去加载其他的核。就是core0需要把其他核的应用工程文件从flsah中读取到dsp的内存或者DDR中。所以在core0的应用工程中需要加上加载其他的核的程序模块。这个模块包含EMIF16接口初始化、NorFlash初始化,以及Core0从Flash中读取其他核的代码到相应地址。
这就涉及到一个问题,Core0从Flash中读数据时,应该读取哪些数据、这些数据什么含义、把这些数据读取到哪些地址去。
应该读取哪些数据包含从哪个地址开始读,数据的长度。从哪个地址开始读:我们在烧写工程中设定了应用工程文件写到flash的地址,我们就从这个地址开始读。数据的长度,数据读取后存到的目的地址及数据,都在待烧写的文件中。待烧写的文件的格式如下:

所以我们需要转换工具把应用工程程序转换为具有这个格式的文件。
3、转换工具
转换工具实现将应用工程的.out文件转换成.bin文件。core0的应用工程必须转换,为了方便,可以将core1~core7有几份不同的应用工程就转换几份。
4、烧写工程
烧写工程是将转换后的文件烧写到NorFlash的工程,只需core0运行。主要包括EMIF16接口初始化、NorFlash初始化、待烧写文件的读取、NorFlash的擦除和写入。可以程序自己读取待烧写文件的数据,也可以将待烧写文件通过CCS的loadmemory,将待烧写文件先读取到内存或者DDR中。
对于core0来说,其.bin文件是必须要烧写的,而且烧写地址固定为0x70000000。
对于其它核core1~core7,由于它们的待烧写代码的情况很多,比如有些核的代码相同,有些核的代码不同,相同代码就烧到同一块空间,不同代码烧到不同空间。
因为在启动的时候,需要知道从flash的哪个地址开始读,所以我们需要设定各个和的烧写文件写到flash中的地址。我们不妨给每一个设定一个写入的地址。为了简单方便,可以将core1~core7中相同的烧写文件(即同一个应用工程)都烧到预定义的核号最小的Flash空间。
然后断电重启,将CCS与C6678连接上之后,看PC指针的值,若PC指针的值在ROM里(0x20B00000到0x20B1FFFF),则说明加载不成功。若PC指针的值不在这个区间,则查看dsp的运行结果是否符合预期。