TI中文支持网
TI专业的中文技术问题搜集分享网站

no boot和spi boot模式下的区别

各位专家们,请教个问题:

硬件平台:6670,软件平台:CCS5.5

板子是自制的6670板子,硬件采用nor flash的spi启动加载方式,DDR为2GB

CORE外部参考时钟:96MHZ,DDR外部参考时钟:96MHZ,EVM的DDR为2GB,所以针对这个,gel文件中的DDR初始化代码有改写过。

1、在no boot模式下,加载gel文件,DDR初始化和测试可以通过,text段放在DDR上,程序能正常运行,说明gel文件的DDR初始化和DDR相关的硬件没有问题

2、在spi boot模式下,加载gel文件,DDR初始化和测试失败

问题:同一个gel文件,同一个板子,为什么在no boot模式下,一切都正常,但是在spi boot模式下,DDR初始化失败?这个问题困扰很久了,希望大牛们能帮忙指导下。

谢谢了

noaming:

你好,如果spi boot模式下启动,而没有正确的boot代码运行到用户程序的话,是会出现连不上仿真器的情况。一般使用仿真器调试代码,都建议使用no boot模式的。

atower geng:

回复 noaming:

谢谢您的回复,现在的情况是可以connect上,但是gel加载的时候,DDR初始化和测试通不过。

我在spi boot模式下加载gel,是想验证spi boot下,DDR是否可以正确初始化,因为我把带RBL程序中DDR初始化的用户程序下载到nor flash(text段定义到DDR中),启动后,程序起不来,但是所以段都定义在L2上时,程序是可以正常从nor flash 通过spi 加载起来的

Andy Yin1:

回复 atower geng:

gel中会根据boot mode进行初始化,应该是只在no boot mode下才会执行DDR初始化,你可以查看gel文件获知。

在使用CCS JTAG load程序测试时,建议你不使用gel,通过将DDR初始化代码load到DSP运行进行DDR的初始化及测试,看DDR测试能否通过,如果DDR测试还是有问题,建议可以参考STK例程中的memory test程序更新DDR的初始化进行测试。

另外你说的将DDR初始化程序text段定义到DDR下载到nor flash进行加载测试,这肯定是起不来的,因为DDR都没有初始化;注意在使用DDR之前需要先对DDR初始化。

STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

atower geng:

回复 Andy Yin1:

Andy Yin1,你好:

        现在的应用场景是:

1、代码段和数据段定义在DDR上

2、上电后需要通过spi从nor flash 加载程序

在no boot模式下,将工具生产的dat文件通过nor write程序烧写到nor flash,然后断电转换到spi boot模式下,连接仿真器,通过memory browser查看0x80000000地址区域的数据,发现数据确实是代码段的数据了,但是不稳定,每在地址窗口按一次回车键,0x80000000后面的某些数据就变成红色,值也跟着变换,我推测是不是RBL中的DDR初始化没有完全成功,起先以为是在配置DDR的PLL时,配置的时钟过高,我在ddr configuration table中,降低pll Mul值,可这样还是没有作用。

同样的程序和流程,在EVM板上是正常启动的,通过对比自制板和EVM板,发现spi boot模式下上电启动后,EVM板的DDR3PLLCTL0寄存器的bit23为1,而自制板的DDR3PLLCTL0寄存器的bit23为0。此bit位表示Enable bypass mode ,0 = Bypass disabled, 1 = Bypass enabled,会不会是这个导致自制板的DDR初始化不成功?还望高手们指导指导,谢谢了

Andy Yin1:

回复 atower geng:

在加载程序到DDR之前,你的DDR初始化是在哪一步做的,具体是怎么做的?感觉你在加载程序到DDR之前没有初始化DDR。

上电后默认情况下RBL不会对DDR进行初始化,如果要将程序下载到DDR,在spi boot mode下,可以分两级加载,先加载第一个程序到LL2或SL2进行DDR的初始化,然后重新进入RBL加载另一组spi boot parameter及image到DDR运行。推荐参考如下流程进行DDR初始化及程序加载:

1、首先是处理2段程序的boot参数表,将第1个程序的boot参数表放在NOR FLASH的0x00~0x7f,第2个程序的boot参数表放在NOR FLASH的0x80~0xff,2个参数表中需要定义好各自应用程序在FLASH中放置的入口地址。

       2、按照第1步中的各段地址空间的设置,将boot参数表和应用程序烧写到对应的FLASH空间上。

       3、DSP硬件复位时,设置GPIO为0001 0100 0000 1101,这样可以让RBL首先加载第1个程序的boot参数表,且正确启动第1个应用程序。

       4、第一个应用程完成的功能是初始化DDR控制器、设置DEVSTAT寄存器、清零boot magic地址以及跳转到RBL入口,这个过程注意的是设置DEVSTAT寄存器时,必须正确设置 DEVSTAT[7:6],使得RBL能正确加载到第2个boot参数表,由于我的第2个boot参数表是放置在 0x80~0xff上的,因此对 DEVSTAT[7:6]设置为01,boot参数表的地址与 DEVSTAT[7:6]的关系式   address =   DEVSTAT[7:6] x 128。

       通过以上几点,就能可以让第2个应用程序,也就是我们真正要运行的应用程序可以放在DDR中运行了。 

其他SPI boot例程:

SPI boot例程:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/46608.aspx

SPI DDR boot:http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/229915/839499.aspx#839499

atower geng:

回复 Andy Yin1:

 Andy Yin1 ,你好,谢谢的回复。

hex6x simple.rmdAddDdrTable6670 simple.btblb2i2c_ex simple.btbl simple.btbl.i2cb2ccs_ex simple.btbl.i2c simple.i2c.ccsromparse nysh.spi.mapmodify i2crom.ccs spirom_le.dat

这是我的bat批处理文件,AddDdrTable6670 simple.btbl,这一步,是将ddr configuration table写到Boot Table文件里,也就是用ddr configuration table的参数来对DDR做初始化,AddDdrTable6670 这个exe文件,是我在网上找的,根据我们板子上DDR的情况,更改源码后,重新生成的exe文件。

对于 Andy Yin1你上面讲的那种方法,有些地方不是很明白,是否有类似的例程可做参考。

谢谢了

atower geng:

回复 Andy Yin1:

有些不理解的地方:

1、首先是处理2段程序的boot参数表,将第1个程序的boot参数表放在NOR FLASH的0x00~0x7f,第2个程序的boot参数表放在NOR FLASH的0x80~0xff,2个参数表中需要定义好各自应用程序在FLASH中放置的入口地址。

疑问:怎么将第1个程序的boot参数表放在NOR FLASH的0x00~0x7f,第2个程序的boot参数表放在NOR FLASH的0x80~0xff?是否需要将两个程序合并成一个文件再烧写到flash中去?

4、第一个应用程完成的功能是初始化DDR控制器、设置DEVSTAT寄存器、清零boot magic地址以及跳转到RBL入口,这个过程注意的是设置DEVSTAT寄存器时,必须正确设置 DEVSTAT[7:6],使得RBL能正确加载到第2个boot参数表,由于我的第2个boot参数表是放置在 0x80~0xff上的,因此对 DEVSTAT[7:6]设置为01,boot参数表的地址与 DEVSTAT[7:6]的关系式 address = DEVSTAT[7:6] x 128。

疑问:必须正确设置 DEVSTAT[7:6],这是需要在第一个程序中,用代码来设置吗?我查看了文档,DEVSTAT[7:6],这个域是干嘛用的,文档中的描述如下:

指的是Parameter Table Index这个字段吗?

希望Andy Yin1或其他专家们多多指导,谢谢

Andy Yin1:

回复 atower geng:

1. 在烧写flash时,可以指定flash地址,两个boot parameter table可以合在一起,也可以单独烧写;

2 DEVSTAT[7:6]是parameter table index,用来指定计算spi 读取boot parameter table的地址=parameter table index * 128B,这是参考RBL源码得到的,与user guide不匹配,以RBL源码为准,RBL源码:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/6352.aspx

赞(0)
未经允许不得转载:TI中文支持网 » no boot和spi boot模式下的区别
分享到: 更多 (0)