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.

DSP在线升级完毕,DSP却没有反应

Other Parts Discussed in Thread: TMS320F2812, CCSTUDIO

28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。

往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。

不知是否有人能指点一下呢?先谢过了!

  • 帮顶顶!!

    另外,有个问题请教,大哥,我现在也在做在线升级,基于flash_api的进行flash的相关操作。现在也碰到了DSP没反应的情况。

    我用的芯片是F28335,通过SCI通信进行升级。我现在的思路是想建立两个工程即bootloader,用户APP程序,分别通过JTAG烧入flashA,B扇区后,然后在开机后先运行bootloader程序,判断是否升级,升级则调用flash_api函数对flash进行擦除,编程等操作。

    但现在问题是:发现只能烧写bootloader程序,再通过JTAG口将APP程序烧写到flash时,出现如图所示的错误。这个问题已经困扰我好几天了。

    请问我这样的思路正确吗?不能同时烧写两个程序吗?

    我估计是我的CMD文件配置出错。

  • 多谢帮顶。可惜我也不甚明白

  • 这个确实有难度的!检查CAN中断服务程序的地址以及bootloader代码地址是否和新的APP代码冲突!

  • 大哥,想请教下你,建立两个工程即bootloader,用户APP程序,分别通过JTAG烧入flashA,B扇区后,然后在开机后先运行bootloader程序,判断是否升级,升级则调用flash_api函数对flash进行擦除,编程等操作。

    分别烧写两个工程到flashA,flashB的思路是否正确?我担心自己走进了死胡同。

    求教!

  • 思路是正确的,之前有项目就是这么做的。应该可以成功。

    另外我遇到的问题,在DSP升级完毕后没反应,发现DSP总是在复位-重启-复位死循环。即使掉电重新上电任然如此。周期大概400ms多点。

    具体原因还没定位到。

    希望有遇到类似问题的同学能指点一二!拜谢~

  • 1 bootloader程序和app程序可以做到一个程序里面一起升级的,这个我确定;你这个用jtag烧写会擦出所有区域,这个我不是太确定,貌似是这样的;

    2 如果dsp无反应,检查codebranch文件,看跳转是否有问题,有个地方需要非常注意的;

    3 据我所知,业界一般都用你说的这种思路,bootloader+app,程序接收到升级命令后开启看门狗,程序重启,升级标志置位,然后先运行bootloader,然后判断标志位,如果升级则调用flashapi进行擦除,然后接收数据进行升级,升级完成改写标志位,然后开启看门狗重启,即可!

    4 注意cmd文件需要针对bootloader 升级标志位 和app单独分区操作,因为貌似dsp擦除是针对一个区域整体擦出的,所以会浪费点存储空间;

    鉴于是同行,提示你思路,注意我提示的几个重点,剩下的慢慢摸索!

  • 你是不是开了看门狗啊?然后如果你的程序上有大的DELAY的时候,就是不断的使能看门狗复位呢,个人见解,希望可以帮到你

    EALLOW;
    		 if(!(SysCtrlRegs.WDCR & 0x0080)) //check WDFLag
    		 {
    		 //Force a reset
    		 //make sure WDog is enabled
    		 //watch dog enable, and WDCHK value
    		 SysCtrlRegs.WDCR = 0x00A8; //previous value of 0x0068
    		 //would disable the WDog
    		 //write invalid data forces reset
    		 SysCtrlRegs.WDCR = 0x0000;
    		 }
    		 //Clear WDFlag - also need to write WDCHK correctly
    		 SysCtrlRegs.WDCR = 0x00E8; //This will also disable the WDog
    		 //SysCtrlRegs.WDCR = 0x00A8; //This will enable the WDog
    		 EDIS;
  • 想请问一下    某段程序和该程序在FLASH中的位置是怎么对应起来的?  

  • 大哥   帮忙指点一下      

    怎样才能得到二进制代码?代码中的各个部分在FLASH中的位置是如何确定的?

  • 你了解COFF文件格式吧 

    官网有文档介绍的 可以看下 Common Object File Format.pdf

    .out文件是可以转换成bin文件的,我做过TMS320F2812的远程下载代码,但是不是load到flash,是load到RAM做代码验证。

    编译.out文件时是需要cmd文件的,从这个里面可以知道空间分配的,对吧

    我总结过.out文件转.bin的方法,发给你看看能不能帮到你

    这个很久以前弄得,那时候还用ccd3.3呢 编译设置你参考下吧

    方法一:

    1.编写批处理文件(例:yourProName_COFF2BIN_By_hex2bin.bat

    示例代码:

    cd debug

    E:\CCStudio_v3.3\C2000\cgtools\bin\hex2000.exe yourProName_hex.cmd (路径需用户修改)

    Hex2bin yourProName.hex

    将此文件保存于工程路径下

    2.编写.cmd文件

    示例代码:

    yourProName.out

    -boot

    -sci8

    -map yourProName_hex.map

    -o yourProName.hex

    -I

    将此文件保存于工程路径下的Debug文件夹内

    3.将hex2bin.exe文件Copy到工程路径下的Debug文件夹内

    4.在Build Option中添加如下命令

    编译后在Debug文件夹中可得到:yourProName.bin,yourProName.hex,yourProName_hex.map

    方法二:

    1.编写批处理文件(例:yourProName_COFF2BIN_By_shell.bat)

    示例代码:

    cd debug

    E:\CCStudio_v3.3\C2000\cgtools\bin\hex2000.exe yourProName_hex.cmd (路径需用户修改)

    FileIOShell.exe -i yourProName.hex –o yourProName.bin

    将此文件保存于工程路径下

    2.编写.cmd文件

    示例代码:

    yourProName.out

    -boot

    -sci8

    -map yourProName_hex.map

    -o yourProName.hex

    -I

    将此文件保存于工程路径下的Debug文件夹内

    3.将FileIOShell.exe文件Copy到工程路径下的Debug文件夹内

    4.在Build Option中添加如下命令

    编译后在Debug文件夹中可得到:yourProName.bin,yourProName.hex,yourProName_hex.map

x 出现错误。请重试或与管理员联系。