
一次加载的过程如图1所示。开发板在上电之后,首先开发板上的FPGA采样boot模式的拨码开关,然后FPGA强制DSP从I2C总线的0x51地址启动拷贝IBL到L2SRAM,执行IBL,配置好锁相环,IBL从FPGA寄存器中读bootmode的值,如果不是二次加载,IBL把读到的bootmode值写入到DEVSTAT寄存器,如果是PCIE一次加载还需要配置PCIE工作环境,然后就在IBL中等待PCIE boot完成,如果不是PCIE boot而是从I2C的0x50 boot,IBL会直接从0X50 boot,否则IBL会直接跳入到RBL的起始位置并根据DEVSTAT寄存器的值进行相应的boot。
在一次加载中,想要boot的代码首先要先进行格式转换,转换成RBL可以识别的代码,同时要满足外部存储器件烧写格式的需求。使用TI提供的工具自己制作一个工具链就能完成[11-12],如图2所示。tms320c6678


rmd文件里面包含一些对Hex.6x操作的指令,首先用hex.6x把程序中有效数据按照指令剥离出来得到btbl文件,然后经过两个小工具得到ccs文件只包含各个段的内容,并不包含boot参数的任何内容,因此要给其配置参数头,由于RBL只识别大端模式,还要进行一次大小段的转换。最后把生成的文件烧写到外部存储器后断电,把boot开关拨到相应的位置,上电boot。tms320c6678
2 二次加载
查看IBL的源代码可以知道IBL主要被设计为两段Bootloader,即iblinit.c和iblmain.c,两个文件都有main函数,其中iblinit.c主要用来初始化锁相环,iblmain.c主要处理二次加载启动。TMS320C6678在上电boot时在IBL中读出bootmode是二次加载后会直接把该加载模式中对应的外部存储器中的代码搬移到L2SRAM并运行这段代码,完成boot。TMS320C6678提供的二次加载有I2C NOR Flash加载、I2C NAND Flash加载、I2C TFTP加载3种模式。
因为二次加载时是使用IBL进行代码搬移,所以二级加载时不需要格式转换,只需要把调试的.out文件后缀名改成.bin,使用MCSDK提供的烧写工具烧写到Flash中即可,IBL搬移代码时能自动识别。对比一次加载,二次加载不需要自己编写工具链,操作简便,虽然相比一级加载,ELF格式文件里面有一些无用信息会使得占用存储空间稍大一些,但是现在Flash存储空间足够大,价格便宜,因此二级加载相对更方便。
二次加载中的IBL代码其实就是一次加载中的放在外部存储器中的程序代码,所以使用二次加载前,要先把IBL代码按照一次加载的要求转换文件格式烧写到外部存储器件中。
3 结论
DSP TMS320C6678有一次加载和二次加载之分,最主要区别就是是否使用IBL中的搬移代码的功能,如果没有使用,则要对代码进行格式转换。如果外部存储器空间小对存储空间要求较高,建议使用一次加载;如果外部存储空间较大,推荐使用二次加载,过程简单。
参考文献
[1] Texas Instruments Corp. TMS320C6678 multicore fixed and floating-point digital processor user guide[EB/OL]. [2012-02-XX](2015-08-02). http://.ti.com/lit/ds/symlink/tms320c6678.pdf.

[2] Texas Instruments Corp. TMS320C66x DSP corepac user guide[EB/OL]. [2013-06-XX](2015-08-02). http://.ti.com/lit/ug/sprugw0c/sprugw0c.pdf.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-36967-2.html
美国的最终目的就是把世界上所有的大国分割成小国
范围不定