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.

KeyStone C66xx 大端多核启动



不知各位有没有试过C66xx大端模式的多核启动,我这里在做C6670和C6618的大端多核启动时失败,用的是TI mcsdk中mad-utils里的example。

小端模式作过试验是可以的,但是大端就不行。具体描述如下:

mad工具:mcsdk_2_00_05_17/tools/boot_loader/mad-util/

平台:windows

步骤:

1.在MinGW环境mcsdk_2_00_05_17\tools\boot_loader\mad-utils\mad-loade目录下执行 "build_loader_msys.sh C6670 big" 的脚本参数编译生成大端模式的mad工具,然后在mcsdk_2_00_05_17\tools\boot_loader\mad-utils\mad-loader\bin\C6670\be 目录下得到mal_app.exe、nml.exe两个工具。

2.在mcsdk_2_00_05_17\tools\boot_loader\mad-utils\mad-loader\examples目录下执行"build_examples_msys.sh C6670 big static"的脚本参数编译生成app_1.exe和app_2.exe的两个应用程序。

3.在mcsdk_2_00_05_17\tools\boot_loader\mad-utils\map-tool\下执行"python maptool.py maptoolCfg_C6670_bypass_prelink.json bypass-prelink"的命令生成c6670-be.bin的程序。其中maptoolCfg_C6670_bypass_prelink.json 脚本已经作过修改,让其mapApp和nmlLoader两个域指向第一步生成的mal_app.exe、nml.exe两个工具,确定路径没有问题。

4.然后将C6670的开发板设置为大端启动,且事先已将烧写好大端模式的IBL程序,IBL程序上电后可以从tftp顺利下载c6670-be.bin程序。IBL的启动参数loadaddress和branchadress已经作过修改,分别为9e000000和9e001040。

5.连接仿真器后观察启动结果,发现core0和core1的PC指针指在0x9e00xxxx的空间,而core2和core3继续停在0x20b002C8的地址,不知是何原因,结果可以见附件。

问一下TI的专家及各位同仁有否作过类似的尝试?

  • 1)从截图来看,core2和core3还处于BOOTROM运行中,而core0和core1 已经跳到DDR中了。此时,Core0和Core1是否正常运行?即Core0和Core1是否boot成功了?

    2)MAD Loader负责解析MAD image,并将其copy到运行地址,最后run。
    建议首先检查core2和core3 MAD image是否已经copy到了运行地址

    3) 为什么采用MADTOOL来生成*.bin?你是想用其中的share code和动态加载功能吗?
    若不是。建议采用通用生成.bin的方法来bootloader,以避免MAD TOOL有可能引入的问题,通用生成*.bin的方法可以在bootloader userguide中2.5节找到具体步骤

    4)
    检查MAD TOOL生成包中core2和core3的二进制信息是否完整,尤其是entry point等。

    5)
    从描述来看小端IBL加载成功,小端IBL的烧写是否用的IBL自带的out和BIN
    C:\ti\mcsdk_2_00_09_21\tools\boot_loader\ibl\src\make\bin
    而大端的IBL的烧写需要用户自己按照如下步骤完成,请检查以确认是否一致


    附录:big endian IBL 烧写方法:

    假定采用大端编译生成的文件是i2crom_0x51_c6670_le(be).bin(烧写到EEPROM中的文件)和i2cparam_0x51_c6670_le(be)_0x500.out(更新EEPROM IBL BOOT参数表的文件)
    For big endian IBL:
    1     
    Set the EVM to little endian and no boot mode;Copy your i2crom_0x51_c6670_be.bin to the MCSDK_INSTALL_PATH\tools\writer\eeprom\evmc6670l\bin;

    2     
    Modify the MCSDK_INSTALL_PATH\tools\writer\eeprom\evmc6670l\bin\ eepromwriter_input.txt as below.
    file_name  = i2crom_0x51_c6670_be.bin
    bus_addr   = 0x51
    start_addr = 0
    swap_data  = 0


    Connected the CCS with EVM;


    Load the MCSDK_INSTALL_PATH\tools\writer\eeprom\evmc6670l\bin\eepromwriter_evm6670l.out (still using the little endian *.out file for EEPROM writer)


    Load memory 0x80000000 with your own i2crom_0x51_c6670_be.bin;
     

    Run the project, and when the “EEPROM programming completed successfully” is printed in the console it means the i2crom_0x51_c6670_be.bin has been burned into EEPROM successfully;


    Power off and Set the EVM as big endian and no boot mode, then power on EVM;


    Connect the CCS with EVM, and load the i2cparam_0x51_c6670_be_0x500.out into the EVM;


    Load the MCSDK_INSTALL_PATH\tools\boot_loader\ibl\src\make\bin\ i2cConfig.gel;

    10 
    Run the project, and then execute “setConfig_c6670_main” in the script tools;

    11 
    Press enter in the console, and then “I2c table write complete” is printed in the console.