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.

【资料共享】SPI flash boot for C66X

Other Parts Discussed in Thread: TMS320C6657

附件是单核spi flash boot例子及相关使用说明,使用过程中注意如下几点:

1. Booting from the SPI NOR on C6670中起到的image生成步骤集成在批处理文件spiboot.bat,双击该批处理文件依次会执行文档中所述各个步骤,如文档所述在完成前4步生成i2crom.ccs后需要修改该文件中对应位置51->00;

2. spi boot parameter参数在nysh.spi.map中,具体参数定义说明在tiboot.h中可以参考boot_params_spi_s;

3. 在不同板子做flash boot时,需要修改spiboot.bat处理文件中的相关输入out,其他输出文件也可以修改,另外可能nysh.spi.map中的参数也需要根据硬件板子作出调整;

4. 例程只做了单核加载,对于多核加载,如附件中spibootMulticore.bat添加了使用mergebtbl将多个boot table合成,请大家根据自己的文件名作出修改。

  • Andy,你好!
    我也是在6670EVM板上进行SPI Nor Flash加载,是通过IBL二次加载。我看了一下IBL的源码,好像加载的数据格式必须是elf格式的。我的问题是:对于多个out文件的情况,这个out文件本身是elf格式,我如何才能将多个out文件按照elf格式连接成1个文件,而且能够加载到不同的核里面。按照你的例程,是先将out文件转成table表,然后通过mergebtbl把多个table表连成一个table,但是我看table文件和本身的elf格式已经发生了变化,IBL在加载时首先判别文件格式时就通不过,无法完成加载。不知道是我理解不对,还是有其它办法?!

  • 通过重新配置IBL,使得IBL直接加载table文件,已经成功加载。到目前为止,还是不知道怎么实现elf文件的多核启动。不过至少掌握了一种方法。

  • 太好了,我正在找这个方面的资料呢。

    另外我想知道下,不知道各位大虾是否有C6678的技术参考手册呢?看官方6678页面上,没有发现这个手册,而我之前在调试OMAP L137、L138时,都是有一个专门的技术参考手册可看的,不太清楚为什么6678没有提供相关的资料呢?

    比如查看寄存器定义,或是内部集成器件的寄存器使用定义等等?

  • C66x SPI 多核启动的例程,你可以参照我的附件,也是根据工具链修改过的。

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/8065.aspx

     

  • 你好,我用andy提供的例程在6678开发板上进行试验不成功:

    我按照操作步骤生成.bat文件并下载到flash里,在引导的时候dsp不能把数据读进去,我用示波器观察引导的过程,dsp一直重复的读取flash的前4byte,读出来的值为0x00005000,也就是引导参数的第一个32bit经过byteswap后的数据,是什么原因导致它不能正常的读取整个空间的数据呢?

  • 如果你是用IBL加载,建议你确认一下加载的数据格式。

  • 我是用spi直接加载,在6678开发板上,我设置为SPI引导模式,

    上电后我立刻用JTAG连接DSP,提示为dsp为I2C引导模式。

    上电后过一段时间再用JTAG连接DSP,提示dsp为SPI引导。

    所以在开发板上,即便是我设置为SPI引导模式,在上电后它也默认用I2C进行一次引导,然后再进入SPI引导。

    (1)这时候我的数据格式是不是就按照楼主提供的转换工具进行转换就行了?

    (2)我用的开发板是TMDXEVM6678LE.,

    生成的Boot parremeter TABLE 为:

    1651 1 10000 1 19c8
    0x00500000
    0x00320000
    0x40130002
    0x00010018
    0x00040000
    0x00010000
    0x03e80000
    0x01f40051
    0x04000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    …………
    第256行
    0x0080c7f6
    0x10800000
    0x00000070
    0x00873500
    …………

    之后改变51为00后,进行bytes小大端转换的数据为:

    1651 1 80000000 1 19c8
    0x00005000
    0x00003200
    0x02001340
    0x18000100
    0x00000400
    0x00000100
    0x0000e803
    0x0000f401
    0x00000004
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    …………
    第256行
    0xf6c78000
    0x00008010
    0x70000000
    0x00358700
    …………

    我用mcsdk提供的norwrite将文件写入norflash,拨码开关设置为:sw3.1 -sw6.2:1011 0000 0010 1000 10 程序不能正常引导。

    (2)首先我证明norflash写是没有问题的,因为我用mcsdk提供的基于i2c二次引导spi引导能够正常引导,写flash没有问题,eeprom里固化的IBL也没有问题。
    (3)我观察bootaddress的值为0x20b00001,是Bootloader的初始地址?我看了其他内存,里面没有要下载的代码,说明程序没加载。
    (3)在引导过程中,我用示波器观察spi总线上的信号,dsp一直重复的从spi读取第一个32为数,读出的数据为0x00005000,这个数据与我写进去的数据一致。是说明原因导致dsp不能继续读取接下来地址的数据呢?

  • 你好,看了下你的PDF文件里面第一步就是在cmd窗口下运行hex6x.exe 文件,但是在我的电脑上运行hex6x.exe的时候,结果提示:

    fatal error: no input file provided

    请问这是什么意思?事先要做哪些准备工作??谢谢

  • 您好!

    按照帖子中第一楼的方法,第六步下载文件的时候:

    Flashing sector 0 (0 bytes of 28480)

    Reading and verifying sector 0 (0 bytes of 28480)

    NOR programming completed successfully

    应该是没有下载文件成功。.我不知道是不是这里错了,也不知道该怎么改?

    不清楚其他人按照这个帖子是怎么成功的?

    谢谢

  • 为什么我的文件比您的小,您使用的例程里的simple。out么?

    1651 1 10000 1 1bd0
    0x00005000
    0x00003200
    0x02002040
    0x18000100
    0x00000400
    0x00000000
    0x00002003
    0x5100f401
    0x00000004
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000
    0x00000000

  • 我就是完全按照一楼里的说明做的,您说的格式是什么意思?

  • 你好,请问下如何配置ibl,可以让他直接加载 boot table文件

  • 这个是正常的,你的文件比较小是28KB,只要出现NOR programming completed successfully这句话就没问题了

  • IBL现在直接加载BOOT TABLE还有一些问题不建议你用,目前ELF是常用的格式

  • Andy,你好!你有C6678的SPI boot源代码吗?我不会写SPI boot程序。有C6670的SPI boot源代码也行。你提供的附件中都是编译后的文件,想结合自己的环境改bootloader程序都不行啊!

     

  • 就用我们平常写的小程序就行,没必要特别的程序

  • 你好,我在用Nor write工具的时候也出现了同样的问题,请问你找到解决问题的办法了么?

  • 你好Andy Yin1:

    首先谢谢你提供的例程,我用的是C6657EVM,我按着你的例程操作了一次,显示是烧写进去了,可以上电却没有任何反应(我是用一个UART发送程序来测试的,上电没有任何数据输出),以下是我对该例程不解的地方,望回复!

    1、该例程可以直接用在C6657上吗?或者需要注意哪些改动?

    2、关于例程的第五步,生成的spirom_le.dat文件格式是以

    1651 1 10000 1 47c6
    0x00005000
    0x00003200
    0x02002040
    0x18000100

    ………………

    开头的,可是norwriter 工具需要把数据先加载到0x80000000里,那不是应该改成如下吗?

    1651 1 80000000 1 47c6
    0x00005000
    0x00003200
    0x02002040
    0x18000100

    ………………

    3、根据norwriter 的readme文件说(Be sure to set the boot mode dip switch to no boot/EMIF16 boot mode on the EVM.),需要把BOOT开关拨到no boot/EMIF16 boot mode,但你的例程 需要拨到SPI模式,那么应该拨到什么模式呢?

  • 作者 Allen Yin 发表于 2014-1-23 19:47 进士8725分IBL现在直接加载BOOT TABLE还有一些问题不建议你用,目前ELF是常用的格式

    Allen Yin 您好

    请问如何将多核的.out文件合并成一个ELF格式的文件,从而实现多核的IBL加载?(NAND boot 模式)谢谢

     

  •  你好,你给工程可以烧写程序代码到L2或MSMC都可以,但烧写代码放在DDR3上就启动不了,如带bios的网络程序cfg文件配置代码放在DDR3就启动不了。请问这是什么原因?急急。。。

  • 因为他的代码在初始阶段没有d d r初始化,你把程序分配到d d r程序加载不进来,CPU就会hun g,甚至有可能仿真器都连不上,如果需要把程序加载到ddr的话需要在烧写的程序前面手动添加ddr初始化参数,这样dsp内部boot rom会在上电后初始化ddr,程序就能加载至ddr中了,具体的请参见boot手册

  • 你的问题找到了吗,解决了吗,我现在在6657上spi直接加载遇到的情况和你一样

  • 请问,能把simple.out对应的源工程文件发来一下吗?

  • 在SPI启动成功后能看到LED灯有规律的闪烁,现在我想通过串口助手的方式打印相应信息来表征SPI启动成功,请问该怎么做?有没有类似的文档

  • jimmy cui 说:
    3、根据norwriter 的readme文件说(Be sure to set the boot mode dip switch to no boot/EMIF16 boot mode on the EVM.),需要把BOOT开关拨到no boot/EMIF16 boot mode,但你的例程 需要拨到SPI模式,那么应该拨到什么模式呢?

    gel文件里的onTargetConnect里检查bootmode来决定是否调用初始化函数。如果不是设为no boot,就要手动调用初始化函数,如果设为no boot就会自动调用。

    OnTargetConnect( )
    {
    i2cprog=0;

    GEL_TextOut( "\nConnecting Target...\n" );

    // Displays current DSP core info
    Core_Info();

    // Check if target is not in real-time mode. If it is in stop mode,
    // initialize everything. In real-time mode, do nothing to connect
    // unobtrusively...
    if (!GEL_IsInRealtimeMode())
    {
    // Validates if emulation boot mode
    if (DEVSTAT & 0x0000000E)
    {
    GEL_TextOut("No initialization performed since bootmode = %x \n",,,,,(DEVSTAT >> 1 ) & 0xF);
    GEL_TextOut("You can manually initialize with GlobalDefaultSetup\n");
    }
    else
    {
    // Comment the following line at production application test
    // when the application need to initialize everything, but not the
    // GEL file.
    Global_Default_Setup_Silent();
    }
    } else {
    GEL_TextOut("No initialization performed in real time mode\n");
    }

    }

    起不来的原因可能是SW5-3配置不对。要设为 SPI 24-bit address mode.

  • 1.TMS320C6657可以用这个加载吗?

    2.这个算是一级引导,直接从SPI启动的吧?

  • typson jiang 说:
    1.TMS320C6657可以用这个加载吗?

    可以。

    typson jiang 说:
    2.这个算是一级引导,直接从SPI��动的吧?

    直接从SPI启动

  • 我的NOR flash是N25Q256 地址线宽度是32位的,还可以用这个方法跑吗?

  • 并行NOR是XIP的,直接从NOR运行。

  • SPI串行的NOR flash吧(N25Q256),我看教程里跟我的有区别 ,不知道行不行。

  • 烧写NOR flash的工程运行无法打开设备,我用的是N25Q128。

    工程中的设备是:#define PLATFORM_DEVID_NORN25Q032A 0xBB16 /**< NOR Flash */

    这个我该如何修改

  • 看下面链接对你是否有所帮助:

    http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/601293

  • typson jiang 说:
    我的NOR flash是N25Q256 地址线宽度是32位的,还可以用这个方法跑吗?

    你这个是QSPI的,C665x SPI boot只支持两种地址宽度 16/24bit, 不支持32bit的。

  • SPI的NOR启动对CMD文件有什么要求吗?

  • 请问您在做SPI加载的时候有没有用到以下两个工具:qfparse,modify;如果有的话,请问能不能发给我?谢谢您^.^
  • 您好,我用6670的板子,借用您上面的工具,烧写我的LED的程序,但是发现一直都是以下的情况

    [C66xx_0] NOR Writer Utility Version 01.00.00.03

    Flashing sector 0 (0 bytes of 61428)
    Reading and verifying sector 0 (0 bytes of 61428)
    NOR programming completed successfully

    打印出这样的信息意思应该就是没有烧写成功了吧?但是我用的是评估板上能跑通的闪灯程序生成的.OUT文件,再用您附件中的单核.bat生成对应的文件。

    希望看到可以尽快回复,谢谢