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.

TMS570LS3137,bootloarder相关问题

Other Parts Discussed in Thread: TMS570LS3137, UNIFLASH

TMS570LS3137,bootloarder程序成功运行了,并且可以通过终端界面获取boot version,但是通过Ymodem下载文件时,就会卡死。具体配置如下所述

------------------------------------分割线---------------------------------

1、这是BootLoader的cmd配置,并且APP的start address配置为0x10100:

MEMORY
{
    VECTORS    (X)   : origin=0x00000000 length=0x00000020
    FLASH_API  (RX)  : origin=0x00000020 length=0x000014E0
    FLASH0     (RX)  : origin=0x00001500 length=0x002FEB00   //LS31x and RM48 Flash size is 0x300000
    SRAM       (RW)  : origin=0x08002000 length=0x0002D000
    STACK      (RW)  : origin=0x08000000 length=0x00002000
}
SECTIONS
{
   .intvecs : {} > VECTORS
   flashAPI :
   {
     Fapi_UserDefinedFunctions.obj (.text)
     bl_flash.obj (.text)
     --library= ..\..\..\lib\F021_API_CortexR4_BE.lib (.text)
   } load = FLASH_API, run = SRAM, LOAD_START(api_load), RUN_START(api_run), SIZE(api_size)

   .text  > FLASH0
   .const > FLASH0
   .cinit > FLASH0
   .pinit > FLASH0
   .data  > SRAM
   .bss   > SRAM
}

2、这是应用程序的cmd配置:

MEMORY
{
    VECTORS (X)  : origin=0x00010100 length=0x00000020
    FLASH0  (RX) : origin=0x00010120 length=0x0016FEE0
    FLASH1  (RX) : origin=0x00180000 length=0x00180000
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0003EB00
}

/*----------------------------------------------------------------------------*/
/* Section Configuration                                                      */

SECTIONS
{
    .intvecs : {} > VECTORS
    .text    : {} > FLASH0 | FLASH1
    .const   : {} > FLASH0 | FLASH1
    .cinit   : {} > FLASH0 | FLASH1
    .pinit   : {} > FLASH0 | FLASH1
    .bss     : {} > RAM
    .data    : {} > RAM
    .sysmem  : {} > RAM
}

3、按照网上的教程,生成了bin文件,生成方法如下:

Bulid-steps里的post-build step加入如下命令:

"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/armofd.exe" "${CG_TOOL_ROOT}/bin/armhex.exe" "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"

可以生成bin文件。

4、在终端窗口中,运行结果如下:


就会一直卡在这边,也没有任何反馈。

 

 

 

  • 请您试一下下面的bin文件(这个是可以成功的),看能否能够在您的板子上成功

    7587.TMS570LS31Blinky.bin

  • 尝试过你发的文件,还是不行,依然会卡死。

    另外,我通过将BootLoader程序在线调试,发现程序在flash操作时卡死,如下图所示:

    FMSTAT寄存器,值为0x818,查看了数据手册,表示的应该是在falsh擦除期间,内核电压低于所需的电压值,请问这可能是由什么引起的呢?

    或者是其他问题?

  • 另外,我用的TM570LS3137 HDK,官方评估板,标配的应该是12V,我用的是9V的电源适配器供电,不知是否会有影响?按评估板说明书,供电范围在+5V至+12V范围内均可。
  • 很抱歉,手边没有这个板子

    请您按照下面图片测试一下相关的电压

  • 电压都是正确的。

    我通过UniFlash工具烧录文件,如下图所示:

    烧录完毕后,在终端上输入3,可以直接跳转到应用程序执行,并且应用程序也可以正常运行。

    重新上电后,因为BootLoader里的标志位没有设置,所以还是会默认进入BootLoader程序,这点事没有问题的。

    经过如上测试,表明我的bin文件时没有问题的,所以最终问题也就是锁定在了BootLoader程序中,通过Ymodem协议接收bin文件的那一段。

    所以,也就是一开始的问题,flash erase时发生错误的具体原因我还在寻找中。

  • 我将系统频率从160MHZ改为100MHZ就可以了,经过多次试验,表明在系统频率大于100MHZ时,flash操作失败。

    是否系统频率过高时,操作flash,会导致flash的内部供电不足?

    flash控制寄存器The Flash Read Control Register (FRDCNTL),设置为0x311,即三个读取等待和一个地址等待周期,

    并且flash的供电模式也是默认的Active mode,从配置上来看应该没有问题啊。

  • 我使用的是通过UART升级的BootLoader,找到了一个说明书,有个地方看的不太明白,如下图所示:

    这里是有两种配置,第一种是默认?那第二种呢?有点不太明白。

  • 这不是两者配置,只是给出了在Bootloader执行期间的MCU初始化

    您可以看一下TMS570的Bootloader程序中是如何处理的,实际上就用到了将相关的Flash API函数拷贝到了RAM后再运行

    HDK复位后,启动代码将引导加载程序的Flash API从FLASH复制到SRAM,并在Flash中执行引导加载程序。

    首先,通过调用CheckForceUpdate()来检查GPIO_A7引脚是否被拉低。如果GPIO_A7被拉低,则强制更新应用程序代码。可以使用bl_config.h头文件中的ENABLE_UPDATE_CHECK启用GPIO引脚检查,在这种情况下,可以通过更改GPIO引脚的状态(使用HDK上的按钮S1)强制更新。

    然后,检查0x0007FC0处的更新状态标志。如果该标志 status flag是有效数字,则引导加载程序将跳转到0x00020000处的应用程序代码。如果该标志不是有效数字,它将配置外围设备,然后通过调用UpdaterCan()或UpdateSPI()或UpdateUart()开始更新应用程序代码。成功编写所有应用程序代码后,状态标志也会更新。
  • 在运行论坛上的一个flash测试工程后,再重新烧录BootLoader程序并运行,惊奇的一幕发生了,在频率180MHZ可以正常的下载app程序了。

    flash测试代码工程如下:

    Flash_API_Test.rar

    这其中会是什么原因呢?您是否遇到过类似的问题或者有相关的经验。

  •         您好!

                   看到你的cmd配置,有个问题想咨询一下您!

                   应用程序的cmd文件中,vectors地址指向了0x00010100,这样修改地址后,烧写程序仿真时能正常运行吗? 若能正常运行,请问应用程序中有其它相应的修改吗?

                   我也做了类似的修改,将vectors地址指向了0x00180000,程序仿真时直接跑飞,不能进入main函数。

                   学习一下经验,盼回复。

           

  • 我是烧的BootLoader程序仿真,然后通过终端下载应用程序的bin文件时会卡死

    你是在仿真BootLoader程序时会跑飞吗?

  • 不是的,我是仿真app程序时跑飞。
    因为app程序的vectors的复位地址不是0x00000000,所以会跑飞。
    请问你app程序有做复位地址映射的处理吗?