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.

iblinit.c中代码的问题?



在iblinit.c中有这么一段代码:

switch (bootDevice) {

#ifndef EXCLUDE_I2C
        case BOOT_DEVICE_I2C: bFxnTbl = iblInitI2c ();
                  break;
#endif

#ifndef EXCLUDE_NOR_SPI
        case BOOT_DEVICE_SPI_NOR: bFxnTbl = iblInitSpiNor ();
        break;
#endif

        default: iblStatus.iblFail = ibl_FAIL_CODE_INVALID_INIT_DEVICE;
                      for (;;);

}

   当用nor(40)、或spi(50)时程序可继续运行,但当用PCIE时(把拨码开关设为pcie方式),不就进入死循环了吗?pcie方式时是不是要把for(;;)去掉,再重新编译IBL?

              谢谢!

  • ibl只能从i2c和spi nor上进行二次boot,不能从其它 的设备上启动;

    你需要pcie boot的话,直接从芯片RBL启动PCIE boot就可以了

  •    Allen:  您好!也许我没太说清楚关于这点,还有几个问题请教:

    1、参数表中bootmode值是怎样确定的?

            在spi nor启动时,是在要启动的文件前加了参数表,里面把bootmode值已写成0x32(50),但i2c-nor或i2c-nand启动时启动文件前并没加参数表,bootmode=0x28(40)是咋确定的?

    2、在pcie中有一readme文件,IBL运行流程里面讲到:pcie启动是要运行IBL的,并调用iblEnterRom ()以及PCIE BUG规避程序iblPCIeWorkaround()等函   数。

         这又回到开始那个问题,把开发板通过转接板链接的PC机时,要把开关拨成PCIE方式,pc机才能发现硬件并分配资源,不太明白的是此时参数表的bootmode值是多少?如不是40或50,上面的函数是运行不到的,PCIE启动就不会成功?

    3、不太确定是PG2.0可直接从RBL启动PCIE,而PG1.0不能直接启动?

              感谢!

  • 1 bootmode应该是根据boot strap pin决定的;

    2 在EVM上烧写了一个IBL,对所有的bootmode都会强制进入I2C EEPROM中的IBL,包括PCIe boot,是为了重配PLL解决PG1.0 RBL中PLL unlock的问题。所有使用EVM时,直接拨成PCIe ROM boot即可;

    3 PG1.0, PG2.0均支持直接RBL启动,只是PG1.0存在PLL Unlock的隐患,所以对于I2C 及SPI 以外的boot mode,建议添加I2C EEPROM重配PLL。