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=0x00000020FLASH_API (RX) : origin=0x00000020 length=0x000014E0FLASH0(RX) : origin=0x00001500 length=0x002FEB00//LS31x and RM48 Flash size is 0x300000SRAM(RW) : origin=0x08002000 length=0x0002D000STACK(RW) : origin=0x08000000 length=0x00002000 } SECTIONS {.intvecs : {} > VECTORSflashAPI :{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=0x00000020FLASH0 (RX) : origin=0x00010120 length=0x0016FEE0FLASH1 (RX) : origin=0x00180000 length=0x00180000STACKS (RW) : origin=0x08000000 length=0x00001500RAM(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、在终端窗口中,运行结果如下:
就会一直卡在这边,也没有任何反馈。
Susan Yang:
请您试一下下面的bin文件(这个是可以成功的),看能否能够在您的板子上成功
7587.TMS570LS31Blinky.bin
,
kevin Yang:
尝试过你发的文件,还是不行,依然会卡死。
另外,我通过将BootLoader程序在线调试,发现程序在flash操作时卡死,如下图所示:
FMSTAT寄存器,值为0x818,查看了数据手册,表示的应该是在falsh擦除期间,内核电压低于所需的电压值,请问这可能是由什么引起的呢?
或者是其他问题?
,
kevin Yang:
另外,我用的TM570LS3137 HDK,官方评估板,标配的应该是12V,我用的是9V的电源适配器供电,不知是否会有影响?按评估板说明书,供电范围在+5V至+12V范围内均可。
,
Susan Yang:
很抱歉,手边没有这个板子
请您按照下面图片测试一下相关的电压
,
kevin Yang:
电压都是正确的。
我通过UniFlash工具烧录文件,如下图所示:
烧录完毕后,在终端上输入3,可以直接跳转到应用程序执行,并且应用程序也可以正常运行。
重新上电后,因为BootLoader里的标志位没有设置,所以还是会默认进入BootLoader程序,这点事没有问题的。
经过如上测试,表明我的bin文件时没有问题的,所以最终问题也就是锁定在了BootLoader程序中,通过Ymodem协议接收bin文件的那一段。
所以,也就是一开始的问题,flash erase时发生错误的具体原因我还在寻找中。
,
kevin Yang:
我将系统频率从160MHZ改为100MHZ就可以了,经过多次试验,表明在系统频率大于100MHZ时,flash操作失败。
是否系统频率过高时,操作flash,会导致flash的内部供电不足?
flash控制寄存器The Flash Read Control Register (FRDCNTL),设置为0x311,即三个读取等待和一个地址等待周期,
并且flash的供电模式也是默认的Active mode,从配置上来看应该没有问题啊。
,
kevin Yang:
我使用的是通过UART升级的BootLoader,找到了一个说明书,有个地方看的不太明白,如下图所示:
这里是有两种配置,第一种是默认?那第二种呢?有点不太明白。
,
Susan Yang:
这不是两者配置,只是给出了在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()开始更新应用程序代码。成功编写所有应用程序代码后,状态标志也会更新。
,
kevin Yang:
在运行论坛上的一个flash测试工程后,再重新烧录BootLoader程序并运行,惊奇的一幕发生了,在频率180MHZ可以正常的下载app程序了。
flash测试代码工程如下:
Flash_API_Test.rar
这其中会是什么原因呢?您是否遇到过类似的问题或者有相关的经验。
,
user4581106:
您好!
看到你的cmd配置,有个问题想咨询一下您!
应用程序的cmd文件中,vectors地址指向了0x00010100,这样修改地址后,烧写程序仿真时能正常运行吗? 若能正常运行,请问应用程序中有其它相应的修改吗?
我也做了类似的修改,将vectors地址指向了0x00180000,程序仿真时直接跑飞,不能进入main函数。
学习一下经验,盼回复。
,
kevin Yang:
我是烧的BootLoader程序仿真,然后通过终端下载应用程序的bin文件时会卡死
你是在仿真BootLoader程序时会跑飞吗?
,
user4581106:
不是的,我是仿真app程序时跑飞。
因为app程序的vectors的复位地址不是0x00000000,所以会跑飞。
请问你app程序有做复位地址映射的处理吗?