专家好:
我在试网口启动的时候,按MCSDK开发包里的说明,一步一步操作,小点的程序可以正常启动,但是大的程序就不行了。仔细看大小程序的差别,怀疑是没有初始化DDR的原因,因为小程序没有使用DDR,而大程序要将程序加到DDR里。
于是想问,用网口启动,怎么在加载程序前初始化DDR呢?网口启动好像没有专用的boot config table吧。
还有一个问题,之前在论坛上看到过,说网口启动跟IBL有关系,但是经过调试,我认为是没有关系:1、我把eeprom里的IBL擦除后,设为网口启动,网口仍然能发bootp包,仍然能启动小程序,但是设为I2C主启动时,(6分频的)sysclkout为16.5M多的频率(未擦除前是165M左右,也就是说IBL擦除了,影响了I2C启动)。不过这个地方也有一个问题,就是设为网口启动,(6分频的)sysclkout为135M左右,为什么呢?
希望能尽快得到解答,非常感谢!
Feipng Li:
回复 Andy Yin1:
如果中间还要加一级引导程序来初始化DDR,然后在加载应用程序,感觉麻烦了一点。C6678的datasheet上不是也提供了网口的boot parameter table嘛,那能不能像SPI启动那样,先给boot parameter table参数,接着传送boot configuration table参数,进行配置,然后在传boot table参数??
谢谢!
Andy Yin1:
回复 Feipng Li:
DDR初始化是有一定的时序要求,使用你这种方式很难保证时序,并且也不简单,先加载一个小程序初始化ddr挺方便的.
Feipng Li:
回复 Andy Yin1:
我试了一下加boot parameter table的方式,对于网口好像不行。
我看了你发的这个链接:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/10240.aspx;里的二级启动程序,不过有点没明白的是,在reboot.c里main函数最后是跳转到到了romtBootReentry();这个函数是只要这样指明了,程序就会自动重新执行RBL然后就会重新发BOOTP包吗?还是说这个函数要另写它的实习?因为这个函数只在tiboot.h里有声明。
谢谢。
Feipng Li:
回复 Andy Yin1:
现在我的问题是,在你发的那个Secondaryboot_eth_source那个文件家里的文件,romtBootReentry,是在.cmd里定义了它的地址,那个地址是0x20b00008还是0x20b00000,这个还要在看以下。但是我想知道,程序里进行了相关的初始化,然后重新进入RBL执行,难道不会把刚刚写进去的都覆盖掉吗?就像每一次重新boot一样?
Wu Feng:
回复 Andy Yin1:
如果不用网口启动,用EMIF16 接nand 启动,这样可以用 boot table 初始化DDR3么 ?
ziye:
回复 Feipng Li:
请问你这个问题解决了吗?查不到0x20b00000这个地址的具体信息啊,求指教,谢谢!