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.

6678 多核烧写问题



在我的工程里面的主程序是通过编程来控制LED.我的设计初衷是通过每一个核来控制每一个LED,即core0控制LED0;core1控制LED1;core2控制LED2;core3控制LED3等。这些程序都在

一个主程序中就完成了。在仿真的过程中我是把这个.out文件分别load到每一个核中,然后run,结果是正确的,每个核点亮了相应的LED.可是我把它烧写到NAND中后。把boot方式

拨到NAND的启动方式,然后上电。其结果是只有LED0被点亮了。这是怎么样回事情?

我的烧写过程如下:

(1)将IBL烧入EEPROM中

1、将i2crom_0x51_c6678_le.bin文件从"mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin"拷贝到"mcsdk_2_00_04_16\tools\writer\eeprom\evmc6678l\bin"

2、使用mcsdk_2_00_04_16\tools\writer\eeprom\evmc6678l\bin\eepromwriter_evm6678l.out进行烧写

    其中eepromwriter_input.txt的内容为:

   file_name  =  i2crom_0x51_c6678_le.bin

   bus_addr   = 0x51

   start_addr = 0

   swap_data  = 0

(2)配置IBL

1、修改mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin\i2cConfig.gel的内容,将函数setConfig_c6678_main()的语句

    ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_BBLOB;   替换为

    ibl.bootModes[1].u.nandBoot.bootFormat        = ibl_BOOT_FORMAT_ELF;    

2、运行程序mcsdk_2_00_04_16\tools\boot_loader\ibl\src\make\bin\i2cparam_0x51_c6678_le_0x500.out

3、加载文件 i2cConfig.gel然后在CCS的DEBUG界面上点击,Srcipts->EVM c6678 IBL -> setConfig_c6678_main

4、几秒钟以后,在console界面上敲击回车键

(3)最后,烧写应用程序

使用mcsdk_2_00_04_16\tools\writer\nand\evmc6678l\bin\nandwriter_evm6678l.out

    其中nand_writer_input.txt文件的内容为

?

    file_name  = main.bin

    start_addr = 16384

我想是不是我应该在(1)中重新生成自己的.btbl格式文件,然后再烧到EEPROM中?问题是我按照6488bootloader的参考合成了一个.btbl的文件,但是超过了128K烧写不进EEPROM

中,我想是不是生成.btbl文件的那个.out文件不应该是包含自己的应用程序的那个,而是从新关于boottable配置的文件?

  • 你好:

    有几个问题需要澄清一下:

    1)你编译出来几个out文件,如果代码中使用DNUM做core区分的话,执行1个out文件,否则需要3个out文件。

    2)如果是1个out文件,那么你需要注意这个out文件的代码和数据都要放到SL2或者DDR,否则你就需要加载3次,因为每次都是加载在LL2中;如果是3个out文件,那么你通过工具合成1个btbl,也要注意是否有代码和数据的冲突,否则也会存在问题。

    3)加载完成之后,core0会被boot自动触发,在core0运行后,core0需要写其他core的MAGIC_ADDRESS,并触发其他core(通过IPC中断),你的core0是否包含这步操作。

    验证问题的方法也有:

    当按照你的方式加载之后,core0能正常工作,但是其他core不行,这时你通过JTAG attach上去查看其他core的PC指针位置,如果还在0x20B00000的范围的话,那么应该就是其他core没有被触发,正在等待核间中断。

    谢谢!

  • 您好:

    谢谢您的回复!

    (1)我是用DNUM来core区分的。且out文件的代码和数据都放到SL2中。

    (2)在core0运行后,core0需要写其他core的MAGIC_ADDRESS。这个其他core的MAGIC_ADDRESS在哪里配置?请您尽量详细点,谢谢!

    (3)在烧写IBL到EEPROM时,我用的是C:\Program Files\Texas Instruments\mcsdk_2_00_05_17\tools\boot_loader\ibl\src\make\bin下面的这个i2crom_0x51_c6678_le.bin文件,这个文件应该是关于bootloader的配置是吗?且在文件中只配置了对core0的bootloader而其他core没有配置?我是不是应该重新生成一个包含有启动多核的bootloader的bin文件,然后再烧到EEPROM中。补充一下我是通过I2C启动的。

    请帮忙在看看,谢谢!

  • 1. 每个core L2的最后4个字节为MAGIC_ADDRESS对应的memory,具体地址以相应芯片手册为准;

    2. i2crom_0x51_c6678_le.bin这个文件是用于修复PG1.0的bug,主要对PLL进行重配,然后进入相应的二次加载模式。

  • 我想是不是这样的,开发板上电之后默认是core0读取EEPROM中的bootloader并加载相应的程序到core0中,而没有加载到其他core中,所以在运行过程中只识别了DNUM为core0的核,DNUM对应的其他核没有相应。这样 一来我们是不是应该重新配置一个启动多核的bootloader?如果是这样的话那怎么来配置这个bootloader?相应的main 函数该怎么样写?

    谢谢!

  • 请问在加载文件 i2cConfig.gel后,该怎么操作?菜单栏的“scripts”里没有找到”EVM c6678 IBL“啊?还是说要在console里自己敲进去这句话啊?

  • 您好 bin chen

    这段时间我一直在做NAND FLASH 自加载。但我刚刚接触6678,都不太熟悉。现在单核IBL nand boot可以成功了,如何做多核的程序自加载呢?现在out直接重命名bin之后,多个核之间的out文件怎么烧写呀,还需要合并吗?需要boot parameter table 和 DDR table之类的配置吗?

    不知道您是否有过相关方面的开发经验,如果方便能提供一些例程吗?不胜感激

  • 不知您多核nand boot的问题是否解决了?要是解决了,能否提供些参考方法,谢谢tju_wf@163.com

  • 你好:

       1) 我现在在使用NAND FLASH加载,但是我编译了8个工程,一个核一个,即8个.OUT文件,目前看到的论坛中针对NAND FLASH加载只有一种方法就是将8个核的程序编到一个工程,生成一个.OUT,我想问一下在NAND FLASH中有没有工具将8个.OUT文件融合成一个.OUT的工具?

      2) 如果将8个工程融合成一个工程,那么对于放到各个核L2存储区的全局变量怎么定义?。由于程序中每个核要使用不同的L2区存储中间数据,.CMD文件怎样编写。

    3)各个核使用的函数怎样区分使它编译到各个核L2,是通过DUNM来区分吗?

  • 您好,同问在菜单栏的“scripts”里没有找到”EVM c6678 IBL“,这个怎么解决的?

  • 你好,我们现在与遇到相同的问题,我的8个核的代码是一模一样的,现在用网上给的spi启动工具,先生成了8个.out文件,然后合成了一个.dat文件进行烧写,但是合成后的.dat文件特别大,大概在14MB左右(虽然可以实现多核启动的功能)。在我的理解里,我8个核的代码是一摸一样的,为什么要这么麻烦生成8个.out呢,最后的.dat文件也不应该是8个.out文件的线性叠加。我的代码段.text字段放在共享SL2上,大概占用了600KB的空间,不知道你们是怎么解决这个问题的。

  • 您好,Rui Fan

    请问您用的SPI启动工具是下面我截图这个吗?

    还有别的方法实现8核加载吗?我也是8个.out。

  • 是这个,你现在也遇到同样的问题了嘛,是不是加载的程序太大了

  • 您好,请问你最后是需要对BootLoader进行修改吗?多核nand烧写把各个核的.out文件融合生成.dat文件的工具链能否分享一下呢?