由于程序比较大,所以之前方案本来是想通过HPI二次boot方式去引导DSP,其中Host为一块FPGA。但是今天又查看了很多资料,发现HPI boot方式跟ROM boot方式有些不一样:
对于C6701DSP ,ROM引导方式是自动化从ROM中前64Kd的应用程序拷贝到内部存储器中的0x0地址,然后引导完成后跳转到0x0地址执行应用程序;
在HPI boot方式情况下,CPU holding device reset状态时处于失速状态,而DSP外设处于释放状态,这时Host通过HPI接口配置PLL,EMIF等外设,然后再将程序拷贝到0x0地址,Host置位相关寄存器使得CPU运行起来并执行0x0处的代码。
查看了一下论坛上的资料,其中谈到Host可以通过HPI访问DSP外挂的SDRAM,由此觉得可以Host先利用HPI接口对DSP PLL,EMIF外设进行初始化,然后再将应用程序直接拷贝到DSP外挂的SDRAM上,然后再将DSP程序指针指向外挂的SDRAM上。
不知道上面的方法是否可行?如果是可行的,最后一步然后“将DSP程序指针指向外挂的SDRAM上”怎么实现,有没有示例代码?
Shine:
可以把程序入口地址_c_int00定义到地址0,请看下面的wiki网站。
processors.wiki.ti.com/…/Accessing_c_int00
Gangping Li:
回复 Shine:
Hi,shine,因为应用程序比较大,按照上面我的思路,是不是就不需要二次boot呢?说实话二次boot代码需要用汇编,而且目前项目比较紧,所以希望能快点解决这个问题。
Tony Tang:
Gangping Li查看了一下论坛上的资料,其中谈到Host可以通过HPI访问DSP外挂的SDRAM,由此觉得可以Host先利用HPI接口对DSP PLL,EMIF外设进行初始化,然后再将应用程序直接拷贝到DSP外挂的SDRAM上,然后再将DSP程序指针指向外挂的SDRAM上。
如果Host可以通过HPI访问到DSP PLL, EMIF寄存器,那么上面的结论是正确的,即可以直接将代码下载到SDRAM,不需要二级boot。
但不同的芯片存在些许区别,有的是可以通过HPI访问到EMIF,有的不行,你如果有条件,可以试一下通过HPI能滞访问到C6701的EMIF, PLL。
Gangping Li:
回复 Tony Tang:
谢谢Tony的解答哈,查看了很多关于HPI boot文档,在我的理解HPI 一次boot过程是这样的:DSP上电后,DSP内核进入Reset状态并一直维持着,如然后内核会低速的去采集boot 模式的引脚信号来获取是何种boot模式,然后进入HPI boot模式,这时DSP内核几乎停止工作,而这时HOST能访问所有memory space;HOST通过HPI配置DSP做初始化时钟,EMIF等等外设。在www.ti.com/…/spra512.pdf这篇文档中有详细描述:
这说明Host是理论上可以通过HPI配置DSP的PLL,EIMF等外设的,也就说明我上面那种方案在理论上是可行的。
Tony Tang:
回复 Gangping Li:
You are right!