问题表述:
1,我使用的TI C6455芯片,最高主频是1000KHZ的,我采用的是C6455 EMIF 8位 ROM启动方式,DSP工程是带有DSP/BIOS系统的。DSP的执行文件下载到IRAM L2中的。
问题:
1,在EMIF 8位 ROM启动的时候。C6455芯片在上电的时候会从CE3中(也就是FLASH的映射地址)读取1K的数据吗?
也就是C6455是否有一段固化的bootloader代码。我在官方文档上没有发现这个部分的说明,但是在一些使用者的技术资料上说的是可以。
2,在上电的时候,C6455的C环境初始化是否创建完成,也就是说写bootloader的二次加载代码的时候是否可以用C语言来写,还是说只能用汇编?
3,由于我的程序是带有dsp/bios的,所以在二次加载代码前应该有一段代码用于启动DSP(主要是PLL1,EMIF,DDR2等),这样
二次加载代码拷贝可执行文件并执行后,bios才能启动,main函数才能执行。请问有类似的二次加载代码的例程吗?
4,如果方便的话,请给我一个C6455的EMIF 8 位 ROM启动的例程。
Shine:
1.EMIFA 8-bit ROM boot mode是一个hardwarw boot, 直接跳转到EMIFA CE3 (0xB000 0000)地址处开始,不搬移代码。
2. c语言环境的初始化是在_c_int00中完成,因为二次bootloader代码在应用程序(_c_int00)之前运行,所以二次加载代码需用汇编写。 3.4, 二次加载代码的写法,可以参考下面的应用文档。http://www.ti.com/lit/an/spra999a/spra999a.pdf
Stephen chen:
回复 Shine:
你好: 文档里提到:
”C6000 DSPs offer three types of boot configurations: no boot process, ROM boot process, and host boot process“。
“When ROM boot is selected as the boot configuration, 1K byte (on C621x/C671x/C64x) of code will automatically be copied from CE1 to address 0”。
在spruec6g中,也就是《TMS320C645x/C647x DSP Bootloader User Guide》中,提到C6454/55的boot方式有:
1、no boot,直接从地址为0x80_0000的L2启动
2、Host boot
3、EMIFA boot,从地址为0xB000_0000的CE3启动。
4、I2C EEPROM boot
5、I2C slave boot
6、SRIO boot
问题:
1、ROM boot 包含EMIFA boot和两种I2C boot吗?我理解应该是的,不知道是否正确
2、第一个文档里提到的是从CE1加载,而且只能是1K大小的代码。可是在第二个文档里CE的范围是从2~5,并没有CE0和CE1。
3、第二个文档里说的EMIFA boot时,是从CE3加载,跟第一个文档不一致,请问是什么原因?
4、在EMIFA boot时,程序不搬运到L2或者DDR吗?是在EMIFA中运行吗?
5、什么是hardware boot?还有软件boot吗?
谢谢!
Shine:
回复 Stephen chen:
1. 是的,ROM boot支持多种boot方式,包括EMIFA和I2C boot方式。2. 3,第一个文档是针对c67x, c64x老的C6000器件,C6455有专门的boot文档,以spruec6g为准。4. EMIF boot模式,没有程序搬移,直接从CE3(0xB000 0000)开始执行.5. Hardware boot是硬件搬移代码,不需要软件搬,像第一个文档里的EMIF boot, 1K搬移就是硬件EDMA搬的。
Stephen chen:
回复 Shine:
Shine你好:
还有几个问题:
1、 6455在EMIF boot模式下,程序直接从CE3开始执行。那是不是就不用自己编二次加载代码了?
2、程序运行在外部Flash,会影响速度吧?是不是最好将其搬运到L2或者DDR中呢?
3、程序运行在外部Flash,数据和变量之类的应该是存在内存里的吧?这个时候的cmd文件有什么特殊要求吗?
4、如果想把程序搬运到内存当中运行,是不是就按第一个文档编写二次加载代码?
5、烧录flash的时候,使用http://c6000.spectrumdigital.com/dsk6455/v2/例程里,flashburn程序是否可以?
6、参考c6678,6455的烧录我的理解是这样的:
a、将工程的out文件转换为bin文件
b、将boot mode改为no boot
c、运行ccs,将flashburn目录下的FBTC645x.out加载进去。然后把bin文件用load memory的方式,将CE3(0xB000 0000)的区域填充。load完毕后,运行。
d、重新上电,并在重新上电前将boot mode更改为EMIF boot
不知这样的步骤是否正确?
7、现在手上原有的工程文件的是ccs3.3生成的,并且我看dsk6455的例程也是ccs3.3下的。我用的是ccs5.4,如果直接用“import from legacy ccs3.3 project”是否可以?是不是最好用ccs3.3?这两个版本可以同时安装吗?
谢谢!
Shine:
回复 Stephen chen:
1.一般还是会用二次加载代码,因为外部flash的速度慢。2. 你的理解正确。3. 建议放在RAM中运行。4. 是的。5.6 flashburn免费版本只能烧写DSK/EVM板,如果是自己的板子,建议自己编写flash烧写程序。7. 都可以,不管是CCS3.3还是CCS5.4, 只要都能调试通过就可以。