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.

EVM6678LE I2C-Nor flash boot 与 SPI flash boot 的具体操作问题

SPI NOR boot

【6678/6670 SPI Nor flash  多核boot原理总结和demo 请参考12L 13L帖子的附件】

示例包括:

  • 单多核6670/6678 SPI boot 示例
  • cmd/cfg 部署在DDR的boot示例
  • 多核相同/不同 代码的boot 示例
  • 制作多核镜像工具及部分工具链源码
  • LED测试示例工程
  • C66x SPI Boot原理的文档和说明

----------------------------------------------------------------------------------------------------------------------------------------------------

I2C-SPI IBL 二级  BOOT

     1.  将IBL烧入EEPROM中(如果事先已经烧写过,可以不用做)

       1、将i2crom_0x51_c6678_le.bin文件从"mcsdk_2_00_05_17\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. 应用程序生成ELF 的 app.out,直接更名为app.bin.

       使用mcsdk_2_00_05_17\tools\writer\nor\evmc6678l\bin\norwriter_evm6678l.out 对app.bin进行烧写

       其中nor_writer_input.txt文件的内容为

       file_name  = app.bin

       start_addr = 0x80000000

 

       烧写步骤工程readme.txt有介绍

     3. 配置IBL

      1、运行程序mcsdk_2_00_05_17\tools\boot_loader\ibl\src\make\bin\i2cparam_0x51_c6678_le_0x500.out

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

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

     1 2 3步骤时候的启动模式

      (pin1, pin2, pin3, pin4) 
      SW3(off, on, on, on), 
      SW4(on, on, on, on), 
      SW5(on, on, on, off),
      SW6(on, on, on, on)

      步骤3完成之后断电重启的启动模式

      (pin1, pin2, pin3, pin4) 
      SW3(off, off, on, off), 
      SW4(on, on, on, on), 
      SW5(on, on, on, off),
      SW6(on, on, on, on)

      此时实现核0的加载。

  

  • zhonghong zhang,

    不客气,我们互相交流,共同进步!

    striker

  • zhonghong zhang,您好,

    我现在也在跑一些keystone的例程,同样SPI加载无法成功,不知道您是否有找到问题所在?

    我在striker提供的Led点灯例程的基础上,将UART例程的代码搬移进来,但在main程序中并不执行这些代码,依旧只是跑led点灯程序。其他没有做任何变化,包括.cmd文件。no boot加载可以正常执行,但SPI boot不行。查看Magic Address为全0。用工具生成.dat文件时的.map文件如下:

    ********************************************************************************
    TMS320C6x Hex Converter                                                   v7.2.1
    ********************************************************************************
    
    INPUT FILE NAME: <simple0.out>
    OUTPUT FORMAT:   ASCII-Hex
    
    PHYSICAL MEMORY PARAMETERS
       Default data width   :   8
       Default memory width :  32
       Default output width :   8
    
    BOOT LOADER PARAMETERS
       Table Address: 0x0880, PAGE 0
       Entry Point  : 0x10800000  (_c_int00)
    
    
    OUTPUT TRANSLATION MAP
    --------------------------------------------------------------------------------
    00000880..0200087f  Page=0  Memory Width=32  ROM Width=32  "ROM1"
    --------------------------------------------------------------------------------
       OUTPUT FILES: simple0.btbl [b0..b31]
    
       CONTENTS: 00000880..0001676f   BOOT TABLE
                                .text : btad=00000880  dest=108000c0 size=00013700
                             .DDRText : btad=00013f8c  dest=108147c0 size=000001c0
                               .const : btad=00014154  dest=80000000 size=00002194
                              .switch : btad=000162f0  dest=80004ae0 size=0000001c
                               .cinit : btad=00016314  dest=80004b0c size=000003c8
                              .myboot : btad=000166e4  dest=10800000 size=00000080

    不知道该.map文件有没有问题?

  • 请问的ddr做了boot table了吗?如果没有,或者不适合自己的板卡,建议您把cmd的各个段映射到L2中。可以先做单核加载。
  • striker,

    谢谢您的答复。

    cmd文件指定地址是用的全局地址。我现在尝试在您提供的Led点灯例程的基础上,将UART例程的代码搬移进来,但在main程序中并不执行这些代码,依旧只是跑led点灯程序。其他没有做任何变化,包括.cmd文件。no boot加载可以正常执行,但SPI boot不行。查看Magic Address为全0。按照之前帖子的内容,有说道可能是.dat文件制作过程出错,但是我在制作过程中没有发现报错,如下图:

    如我楼上回帖所述,我爬楼看了下讨论,发现和 zhonghong zhang 之前提到的一个问题类似,

    连上调试器看了下PC指在boot rom中的某个地址。不知道您能否帮我解决这个问题。我的qq:578587463.

  • zhonghong zhang,

    我现在是在EVM上进行单核SPI启动。

    我将cmd的各段都映射到L2中,现象依旧,magic address为全0,PC指向boot rom中的某个地址。

    您之前有过这个尝试,并也有过类似的问题,不知道您后来解决了么?

  • hi, 多谢您的回复

    现在好像找到原因了,我是现在另一篇文档里找到了parameter table的具体说明:

    其中第三行,用您的工具生成出来的参数是0x02005140,当我把这行改成0x02055140之后,就成功boot起来了

    现在比较奇怪的就是文档里说SPI Boot的时候是不需要配置PLL的,但是这里看来配置错误的话是起不来的

    另外我之前在置顶的资源帖里还找到另一个生成镜像的压缩包,里面有一个nysh.spi.map的文件,里面内容如下:

    section {
    boot_mode = 50
    param_index = 0
    options = 1
    core_freq_mhz = 800
    exe_file = "simple.i2c.ccs"
    next_dev_addr_ext = 0x0
    sw_pll_prediv = 5
    sw_pll_mult = 32
    sw_pll_postdiv = 2
    sw_pll_flags = 1
    addr_width = 24
    n_pins = 4
    csel = 0
    mode = 0
    c2t_delay = 0
    bus_freq_mhz = 0
    bus_freq_khz = 500
    }

    看内容是有对PLL的配置的,这个配置实际有没有意义先不管,但是最后生成的镜像里面,针对PLL参数这一行是0x02002040,第三个字节也是00

    按照上面图片里的的公式在最后生成的dat里直接改掉这三个参数(这是经过大小端转换的,和上面图里对应的话需要调转一下)

    目前只试了这两个:0x03056240(对应频率是800)和0x02055140(对应频率1000)就能boot起来

    试了一次改成了0x03016240就起不来了,我理解的是至少需要保证频率在一个适当的范围内(几百MHz),才能boot起来

    现在就是不太明白为什么生成的dat文件里这个第三个字节会是0...或者是PLL的模式设置的不对?

    .

    多谢多谢~

  • 您好 我当时是hex6x工具的输入文件rmd里面有一个length太小,导致生成的map文件没有boot段,看你的现象应该不是这个问题吧。
  • Anqi liu:

    • 你的理解都没有问题。
    • 00 的出现 应该是 romparse.exe 的bug,手工修改即可,不用在意。
    • 按照文档“The main PLL stays in bypass mode for no-boot, SPI, and I2C boot” 来理解,怎么配置PLL应该是无所谓。但是没有人知道随着TI release新的revision 芯片 文档有没有及时更新。
    • 唯一有趣的是在你未修改PLL配置的时候,LED程序可以加载成功,加上不调用的UART代码之后便会失败。这个有点说不通。
    striker
  • striker ,

     我的问题应该不是Anqi liu所指出的PLL问题,因为我在按照他的描述进行修改后,现象依旧。

    问题还是不明朗,我会继续研究。

  • zhonghong zhang,

    嗯,我的问题应该不是length太小导致。问题还在定位。

  • 我之前跑起来的是在demo板上的,感觉应该是由于demo板上一直是用i2c boot,在这个过程里面会把pll初始化起来,所以就没有使用dat里的配置

    总之现在问题应该是解决了,不知道后期跑我们自己的工程会不会遇到问题,到时候可能还要请教您啦

    再次感谢!

  • Hi striker,

    我终究还是没有找到问题所在。我只是在LED点灯程序中将Keystone_common.c/.h文件加入,其他再无变化,依旧不能spi引导成功。去掉就可以成功。

    我将我的工程附上,不知道您能否帮我看下是否有问题,告诉我您能否将它SPI引导成功。如果您可以,那应该就不是工程问题,而是.dat文件的制作过程有误或别的原因。不知道您能否帮看下?

  • kloud,

    我这边没有任何问题。唯一的修改是

    sFlags.pll  = 1;

    striker

  • Anqi Liu

    您好  我现在也遇到了您的问题  我的是6678的芯片  也是改PLL配置参数这一行之后就不能boot了,改成1G  935M这两个值都不行,但是用帖子里面默认的配置 100*19/2 = 950就可以,但是我自己的板卡参考时钟是156.25MHz,这样PLL主时钟经测试为1400M多?

    我应该如何修改这个PLL配置参数值啊?

  • striker striker

    您好  

    我现在也遇到了Anqi liu类似的问题,我的是6678的芯片,也是改PLL配置参数这一行之后就不能boot了,但是用帖子里面默认的配置 100*19 / 2 = 950就可以,但是我自己的板卡参考时钟是156.25MHz,这样PLL主时钟应该为156.25*19 / 2   ,由于板卡有个六分之分频,我利用它可以测得时钟确实是在1400多MHz,这已经超出了芯片的最高时钟,但是板卡能够正常boot,并且运行程序。我修改参数multipiler  divider使时钟为1G  935M这两个值都不行,不能boot ?

    我应该如何修改这个PLL配置参数值啊?还是有哪些地方没修改正确?

  • striker ,

    谢谢您耐心的回复,我的问题已经找到并解决。

    我出错的原因在于没有将需要烧写的.dat文件放到指定的目录下,因此烧写过程有误,引导不成功。

    仔细看了你的指导说明才发现这个问题。

  • striker,

    EVM单核SPI引导已经成功,涉及到DDR的引导也成功了。

    在用自己设计的板子做SPI引导,不涉及DDR的也同样成功,涉及DDR的会失败。

    上述问题很明显是DDR cofig table的配置不正确导致,因此我尝试修改AddDdrTable工具的配置。我按照DDR3 Register Calc v4工具,得出sdram config,sdram timing等寄存器值,并修改对应表中内容,生成新的工具并最终得到.dat文件。SPI引导后,BootMagic Address正确,但程序不能执行。

    一些疑问:

    1、ddrtable中

    00 00 00 00 //pll Prediv
    00 00 00 1C //pll Mul
    00 00 00 02 //pll post div

    这里对DDR PLL的配置我是否需要修改?DDR相关工程在线调试是可以的,用的gel文件是6678evm.gel,但是硬件上输入的DDR时钟我修改成50MHz,对应1066速率(66.67MHz的情形对应1333速率,DDR工作不正常,因此才选择降低输入频率)。此外,我通过这些PLL配置值,无法计算出1333/2=666.7的EVM默认时钟速率,不知道公式是什么?

    2、ddr calc中的另一个工具DDR3 PHY Calc v10得到的leveling相关寄存器参数并没有在ddrtable中有体现,不知道这些寄存器的配置对DDR正常运行是否必要?我看到gel文件中对这些寄存器是有相关配置的。但EVM做SPI引导没有配置这些寄存器也能成功,又貌似说明不需要对它们进行配置。

    3、我目前就修改了sd ram config, sdram timing 1, sdram timing 2, sdram timing 3, sdram fresh cntrl 这5个配置,不知道是否还有其他需要配置的地方?

    kloud

    ----------

    另板子可以通过Memory_test,DDR工作在1066速率。DDR型号与EVM一致。

  • 您好 我现在在做自己设计的板卡加载时,6678的八个核都能跑起来程序,但是重新上电复位之后,可能某些核,如core3 core4  core5没有boot起来,或者有时候程序跑着跑着就飞了,再次上电可能又能8核全部boot运行。不知道是什么原因啊?

  • 你好 多核的bios工程的bootloard,能不能上一个demo啊

  • 你好,请问一下DDR的时钟是BTLB文件中的第四个数据吗?我的这个数据是   0C 1A 92 A0 00 00 00 70 00 87 35 00 02 42 80 F5 00 00 00 00 00 00 00 1C但是DDR初始化有问题,使用GEL文件可以正常初始化,我把gel文件初始化后的值全根据文档修改了,DDR的时钟没有找到修改的地方,请问下是不是这个数据?

    这个说明文档有没有呢?

  • 您好!

          我想问一下这个启动代码是指RBL吗?另外,为什么IBL二级启动可以直接将.out文件重命名为.bin文件就可以启动,但是SPI启动却需要将.out文件经过一系列工具转换为.dat文件才可以启动?

    期待您的回复,谢谢!

  • 你好 striker striker,

    请问下SPI多核启动之后,发现程序经常会出现异常,请问您有发现过这种情况吗?

  • striker 您好:

    我最近在弄SPI BOOT ,我用的是6657EVM,我想问一下:

    1、这例子适用于6657吗?

    2、我把MulticoreBoot.c拷贝到我的工程里,编译出出如下错误:

    我已经包括了platform.h 头文件 与 添加了头文件的路径了

  • 你好striker

           我们的代码中有4个核共用了代码区,数据区使用的是相对地址0x00800000,用JTAG下载可以正常运行

    但是制作spiboot文件后下载进去发现只有第一个核正常运行,其他的核都没有正常运行。

           在第一个核启动之后,我将0x10800000 复制到 0x11800000 0x12800000 0x13800000   中,发现仍然无法正常启动,

    请问我在boot的时候还应该注意什么?

    谢谢

  • striker

    您好,

    请问我们使用的H264的压缩程序,用4个核来运行该程序,代码段是共用的,数据段用的是0x00800000相对地址,

    用仿真器下载运行没有问题,但是在制作SPI启动的时候发现只有一个任务管理的核起来了,压缩的4个核代码运行异常

    在下载之前填充每个核的L2SRAM,下载之后又读出来发现仿真器下载的时候并没有操作L2SRAM的内存空间。

    请问你有没有遇到过这种问题?

  • 你好striker:

    非常感谢你的帖,我可以成功在C6657EVM上分别完成了单核,双核心和带BIOS双核的SPI BOOT了,在此提醒一下用这帖做C6657 SPI BOOT 的朋友,有一个细节要特别注意,不然照搬这帖的方法,在C6657上是实现不了双核BOOT 的, 要将MulticoreBoot.c 中的 pBootMagicAddCore0 = (int*)0x1087FFFC; 改成 pBootMagicAddCore0 = (int*)0x108FFFFC;

    另外我有两个问题想请教一下striker:

    1、我用了RTSC工具定义了Menory,每定rebluid .cmd 文件都会根据.cfg文件和RTSC工具重新生成一个.cmd,这时候

    .myboot
    {
    boot.ae66< boot.oe66>(.text)
    } > BOOT_CORE0

    这一小段定义就被删除了,所以每一次编译我都要手动添加这一小段定义,感觉方法比较落后,想问问striker有什么方法可以让它自动在.cmd文件里生成这一小段定义?

    2、第二个问题比较头疼,虽然我可以做到双核SPI BOOT了,可是我将帖里的.cmd文件中定义的

    .cio > DDR3
    .bss > DDR3
    .const > DDR3
    .far > DDR3
    .fardata > DDR3
    .neardata > DDR3
    .switch > DDR3
    .sysmem > DDR3
    platform_lib > DDR3
    .cinit > DDR3

    改成了

    .cio > L2
    .bss > L2
    .const > L2
    .far > L2
    .fardata > L2
    .neardata > L2
    .switch > L2
    .sysmem > L2
    platform_lib > L2
    .cinit > L2

    才可以成功的,用原来的指向DDR3 无法正常启动,这是因为DDR3没有初始化的原因吗?


  • Jimmy,

    很高兴你能boot 成功,6657 应该是 1M 的 L2SRAM,所以bootmagic address 是 1M 差一个字节。

    1.  首先确认一下.myboot段为什么会被删除? 如果你有一个自定义的cmd文件,理论上该cmd文件是可以和.cfg 及RTSC工具自动生成的cmd文件共存

    2.  应该原因就是没有初始化DDR,检查下DDR boottable,如果你使用的是带DDR boottable的工具链脚本,那就有可能是初始化失败造成的;否则就是没有初始化DDR。如果对DDR table不太了解但是有兴趣可以看下附件里面的文档,参照下6670的部分,应该可以帮助到您。

    striker

  • le wang,

    你的boot 流程很奇怪,可否参照下附件的boot 流程和案例。多核Boot 过程有点繁琐,可能需要你自己看完文档后再深入了解下。另外直接复制L2SRAM不是一个好的多核boot的方法。附件中提供的方法应该可以解决你的需求。

    striker

  • 你好striker :

    感谢您的回复

    我由于我的工程是由CCS例子中的IPC工程创建的,我发再.cmd文件都是build后自动生成的,生成在Debug==>configPkg目录下,根据你的提示,我尝试过将.cmd文件复制出来,再重新rebluid,编译会报错。

  • striker 

            感谢你的回复,原因已经找到了,是因为cfg文件中cache的问题,关闭cache,并将L2SRAM中的初始值放在共享代码区就好了!

    wangle

  • 有哪位用6657大虾用striker 大神的这个方法成功在BOOT的时候DDR3初始化的?我弄了两天都没有头绪,总是初始化不了,请大虾们不吝赐教!

  • striker 你好:

    我在弄6657EVM的DDR3初始化的参数设置,怎么好像关于PCB线长的参数(如下)没有在DDR初始化的数组里体现出来呢?

  • zhonghong zhang ,您好,我看到您跟我遇见相同的问题了,重新生成DDR table的exe应用程序,但是用C++软件打开后,debug不成功,生成不了正确的exe,,请问您是怎么解决的呢?我卡了好久。。。。

  • Dan Jia,

    生成ddr table的代码很简单,就是将一段固定的二进制数据插入到镜像文件中。如果大小不够修改max_line_size 宏定义。fopen 错了是不是你在debug时没有指定正确的input 文件路径?

    如果实在不符合实际应用要求你可以重写此工具。

    striker

     

     

  • 您真是热心 谢谢您 !但是我还是不清楚怎么添加路径,找了软件的人来他们说缺少文件,请您再详细告知下 谢谢 卡了好久了了。。。

  • 没看明白你这句话的意思,请指点一下,谢谢

  • Dan Jia

    原来你说的是这个,在工具里的任意一个spiboot_multi_xcores .bat 脚本文件里可以看出 输入文件是simple.btbl

  • 大神:

        您好,首先感谢您之前给予的帮助!我最近在做毕设,需要在vxworks5.5下使用rtl8111e网卡进行通信,但苦于没有参考代码,只能用8139网卡的代码进行移植,几周了进展不大,请问您是否熟悉这方面呢?谢谢!

  • Michael,

    我没有在vxworks下做过。我只是最近有移植过keystone2 系列 arago linux  的phy,kernel用的是88e1512,我使用的是88e1543。说是移植但是改动并不大。改了mdio read的一些代码后就ok了。

    不知道你遇到了什么样的问题。

    striker

  • striker你好:

    现在自己用的板子使用RBL  SPI NOR FLASH启动,但是由于工程中除了.text和.stack都需要放在DDR3,所以一直跑不起来。

    之前一直在开发板上进行实验,直接用你提供的提供的工具链,可以成功运行。现在在自己的板子上无法使用了,应该是DDR初始化失败了。

    按照帖子里提供的DDR table 计算常用工具:8713.ddr_cal_tool.zip开发板上的芯片是K4B2G1646C (1333),自己板子上应该是K4B1G1646G (1333),你所提供的AddDDrTable工具插入的内容:

    #ifdef TMS320C6678
    const unsigned char ddrtable[120]={
    0x00, 0x00, 0x00, 0x70, 0x00, 0x87, 0x35, 0x00, 0x02, 0x42, 0x80, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x02,
    0x63, 0x06, 0x2A, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x50, 0x11, 0x13, 0x78, 0x3C, 0x30, 0x71, 0x7F, 0xE3, 0x55, 0x9F, 0x86, 0xAF,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x32, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05
    };
    #endif

    因为计算出来只有参数,不明白该如何对应,以及ddrtable[120]中各参数的含义,所以不知道该怎样根据ddr_cal_tool计算结果修改ddrtable[120]中各参数,请问该如何修改或者该参考哪个相应的例程和文档。

  • GuoFei,

    TI 没有提供非常直接的官方文档,sprugy5a 可以参考,不过你也可以尝试参考我附件里的SPI_boot原理.pdf,上面已经标明了一些含义。

    striker

  • striker你好

    1.最近接触到flash boot相关的任务,下载了您提供的例程,通过仿真器可以允许,但是烧写4核程序后改为SPIboot后没有任何现象

    仅仅烧写单核也无法运行,部分结果如下

    2.本人目前刚刚接触DSP,目前任务是要实现pc间tcp传输移植到dsp-pc传输,目前通过仿真器可以实现功能,但是参考的工程基于SYS/BIOS,看到楼层中您提出根据cmd文件修改cfg文件,但依然一点头绪都没有,请问有没有什么参考资料供我学习相关知识

    3.看到很多相关的帖子都有提到将ccs文件第九行0x01f40051的51改为00,这个动作有什么意义呢?然而工具链中的bat文件似乎没有涉及这项操作,这是为什么呢?

    谢谢指点~

  • Shihao Li ,

    1. 现象看确实没有boot起来,请你确保首先测试不带bios,程序中不使用DDR的单核程序做boot。 如果有6678evm板卡的话,应该能很快成功启动。如果是自己的板卡却依然boot不起来,就需要参考附件中的文档检查boot parameter table 各项是否正确。主要是PLL相关部分。

    2. 一个带BIOS 可boot工程和不带bios工程的区别就是:

    • 原cmd文件中的Memory分配不再使用,改为在RTSC platform 中定义 (可在中英文论坛上搜索怎么样为BIOS工程构建一个自定义的RTSC platform,或者阅读BIOS6.0 手册 SPRUEX3J)
    • 原cmd文件中的Section部分不再完全使用,绝大部分段在cfg文件中进行段映射(CCS5+ 新建一个SYSBIOS 工程样例,查看其cfg文件,或者阅读BIOS6.0 手册 SPRUEX3J)
    • cmd文件中只保留对 c_int00 地址的锁定(参考本帖前面几页相关部分对boot端的讨论,cmd语法格式可参考C6000 Assembly Language tools  SPRU180P)
    3.  附件中的SPI boot原理文档中提到 0x51 对应着 readaddrMsw ,后四位原来是 0x0051,因为 boot paramter table 不全所以偏移量改为了 0000。你可以理解为是TI留下来的一个小bug。
    综上所述你现在需要做的事情就是 首先成功实现一个最”简单“的 boot 案例。然后由单核至多核,由不使用DDR至使用DDR,由不带BIOS至使用BIOS。

    祝你成功

    striker

  • striker你好

    1.我将你的附件里例程  的core0的cmd文件中   DDR3全部改为L2,烧入6678EVM板中仍然不能成功boot,详细的步骤如下

    http://www.tudou.com/programs/view/7QNHgCLY23E/

    附件中的图是板子各时间的状态

    问题还是没有解决,很困惑



    另外还有两个问题:

    2.板子的no-boot模式SW3-6配置在 牛金海 编著的 《TMS320C66x KEYSTONE 架构多核DSP入门与实例精解》中为1000 0000 0000 0000,与附件中给出的1000  0000  0000  1100不一样...

    3.续上贴我第三个问题,对于镜像转换的工具链,附件中提到双击双击spiboot_multi_4cores.bat批处理文件即可实现,但用notepad++打开bat文件发现其中并没有涉及到将51改为00的部分

    4.将core0的LED闪烁程序main函数中的multicore_boot()注释掉后单独从仿真器载入,本应闪烁的LED变为常亮,不太清楚为什么

    多谢指点

    20151102.zip
  • Shihao,

    • bootmode 最后几位对no boot 来说无所谓,起作用的就是前4个pin
    • 0x51在ParaTable.map 文件中已经被改写过,不确定可以检查最终生成的.dat 文件
    • LED正常闪烁的前提是因为主PLL被正确配置,注释掉multicoreboot 同时也注释掉platform_init所以导致不正常
    另外要提到一点的是 LED 闪烁不正常 并不意味着 没有boot 起来 。只有在板子boot后用仿真器 连上板子,取消自动load program ,load symbol 观察 pc 指针(不熟悉此过程可以翻看之前帖子或者在论坛上搜) 位置才知道 boot 失败与否。
    一般来说,PC地址在0x20B 开头的位置就是boot 失败,如果位于正常L2SRAM/DDR/MSMCSRAM 的范围内就可以认为boot 成功。
    如果仍有问题,你可以贴上你的.dat 文件,我手头上目前正好也有evm6678 板子。
    striker
  • striker你好

    这是我把附件里LED core0的cmd文件中DDR3全部改为L2后编译生成的,依然无法成功boot,另外附件中的四核和单核LED例程都无法boot成功(指针指在0x20BCCD2)

    最后确认一下顺序:先连接仿真器,修改bootmode,再上电,launch selected configuration,connect target 后再load symbol

    多谢指点

  • Shihao Li,

    首先你的镜像没有问题,在我这边可以成功boot    :(     我的evm 是Rev 3A

    我又仔细看了你操作的视频,没有找出任何问题。

    那么这就奇怪了,3A 和 3B 在boot pin 和 boot parameter table 的设置上应该没有什么区别。

    我唯一想到的可能就是你的EEPROM 被重新烧写过,因为EVM板卡的boot依赖于上面的镜像去绕过一个PLL bug。

    (mcsdk/tools/program_evm/binaries/evm6678l 可以找到eeprom_writer 以及 eeprom51.bin)

    striker

  • striker你好

    终于成功了- -,之前确实在尝试i2c boot的时候修改过eeprom

    当时用的是C:\ti\mcsdk_2_01_02_06\tools\writer\eeprom\evmc6678l\bin\eepromwriter_evm6678l.out和i2crom_0x51_c6678_le.bin

    上面是参考...虽然最后也没有成功

    谢谢指点

  • Shiliao,

    很高兴看到你能boot 了。要做多核带bios,带ddr的boot 还需要花一点时间。

    祝你成功!

    striker

  • striker 你好

    最近我尝试在NDK helloworld例程的基础上进行修改,遇到了一些问题,看到前面的楼层中您也研究过相关内容,所以想请教一下以下问题

    1.工程的目的是在两个核上同时对一台PC进行数据的收发。于是在两个核上建立两个socket,但发现在core0连通后,core1总是无法成功connect

    在e2e论坛上发现了(wiki)中写到There is no solution for running simultaneous NDK stacks on multiple cores。意思是多核网络通信是无法实现的么?

    2.在例程的helloworld.c中我看到包含了对DDR的初始化,cfg文件中也包含了内存的分配,如果改写为多核程序,是不是只需添加

    .myboot段(到.cmd)和boot magic address段和写IPC中断(到.c)即可?

    多谢指点