不知各位有没有试过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的专家及各位同仁有否作过类似的尝试?
Thomas Yang1:
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和BINC:\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.binbus_addr = 0x51start_addr = 0swap_data = 0
3 Connected the CCS with EVM;
4 Load the MCSDK_INSTALL_PATH\tools\writer\eeprom\evmc6670l\bin\eepromwriter_evm6670l.out (still using the little endian *.out file for EEPROM writer)
5 Load memory 0x80000000 with your own i2crom_0x51_c6670_be.bin; 6 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;
7 Power off and Set the EVM as big endian and no boot mode, then power on EVM;
8 Connect the CCS with EVM, and load the i2cparam_0x51_c6670_be_0x500.out into the EVM;
9 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.
TI中文支持网
