This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

boot问题请教



各位专家,启动的问题有些疑问希望能指点迷津。

1.首先,RBL具有初始化功能这个可以理解,当初始化结束后,是要做搬移嘛?以spi nor为例,初始化spi之后是不是就要把nor里的代码搬移到内存中了?搬移结束后调到内存入口然后开始执行,这样理解没错吧? 另外,是不是说emif norflash模式RBL是不搬移的,直接跳转到70000000开始执行?

2.为什么需要IBL,他大概完成了什么功能?为什么IBL要放在I2C eeprom中,我没有设计eeprom是不是说就完全无法通过nandflash启动了?

3.我想将代码放到DDR中执行,但是他怎么在搬移前做初始化,看到说可以通过boot configuration table来初始化,那么这个是什么原理,是说这个boot cfg table要在l2的末尾一段执行嘛? 有没有什么方便的工具可以直接生成ddr的初始化参数?

4.是不是说存在flash中的代码是以.dat文件的格式的?flash中的代码搬移到内存中,一定是经由RBL搬移的?

以上,问题比较多,希望专家能耐心解答!关于boot的资料不太多又有点散乱,阅读了就好越看越糊涂,全靠专家解惑了!谢谢,预祝中秋快乐!

  • 1. 是的,SPI NOR不支持XIP,需要搬移到内存里执行,EMIF NOR支持XIP,可以本地执行;

    2. IBL通常用于扩展RBL不能支持的一些启动方式,比如FTP启动,EABI文件格式启动等等,如果用的是6678,本身的RBL不支持EMIF NAND启动,如果需要在6678上NAND启动的话必须要做二次启动,一次启动可以放在I2C,也可以放在SPI,如果你用的是C6657,RBL是可支持EMIF NAND启动的,那么就不需要考虑这个问题了;

    3. 因为Keystone的DDR3初始化牵涉到Leveling的步骤,直观一些的方法是采用二次启动,比如先从SPI启动初始化DDR3,然后再把剩下的数据段和代码段拷贝到DDR3里再做跳转,C:\ti\pdk_c667x_2_0_0\packages\ti\boot\examples\srio\srioboot_ddrinit 里有一个例子可以供参考;

    DDR3参数表在DDR3初始化手册里有连接可以下载,DDR3初始化手册可在对应的芯片产品页面下载;

    4. 格式是TI的Boot table格式,在bootloader的文档里有描述,在论坛的帖子里亦有表述,可以搜索一下以前的帖子。

  • Hi Allen 感谢您的回复,信息量很足

    现在还剩下一个问题,srioboot_ddrinit这个工程的使用方法我是这样理解的:

    1.我的板子是6657 有spi nor 和 emif nand (和6657EVM板设计方法一样,但是没有I2C EEPROM)

    2.先将这个工程编译,然后按照spi nor的启动方法将.out转换成.dat格式然后用nor writer烧到nor flash里

    3.将我的应用工程(程序段代码段等都存放在ddr中)用nand writer烧到NAND里 

    4.将启动开关拨至spi启动,这样我理解RBL开始执行ddrinit这个工程,将DDR初始化,然后调转 


    问题来了:如果我的理解是正确的,那DDR初始化结束后跳转到了什么地方?是跳到RBL的NAND初始化方式的起始地址了吗?如果是,这个地址应该是多少…

    如果我上述有任何描述不正确的地方,希望您能给我指出,非常感谢!