28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
Huihong LIU1:
帮顶顶!!
另外,有个问题请教,大哥,我现在也在做在线升级,基于flash_api的进行flash的相关操作。现在也碰到了DSP没反应的情况。
我用的芯片是F28335,通过SCI通信进行升级。我现在的思路是想建立两个工程即bootloader,用户APP程序,分别通过JTAG烧入flashA,B扇区后,然后在开机后先运行bootloader程序,判断是否升级,升级则调用flash_api函数对flash进行擦除,编程等操作。
但现在问题是:发现只能烧写bootloader程序,再通过JTAG口将APP程序烧写到flash时,出现如图所示的错误。这个问题已经困扰我好几天了。
请问我这样的思路正确吗?不能同时烧写两个程序吗?
我估计是我的CMD文件配置出错。
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
harte zhang:
回复 Huihong LIU1:
多谢帮顶。可惜我也不甚明白
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
da qin zheng sheng:
这个确实有难度的!检查CAN中断服务程序的地址以及bootloader代码地址是否和新的APP代码冲突!
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
Huihong LIU1:
回复 da qin zheng sheng:
大哥,想请教下你,建立两个工程即bootloader,用户APP程序,分别通过JTAG烧入flashA,B扇区后,然后在开机后先运行bootloader程序,判断是否升级,升级则调用flash_api函数对flash进行擦除,编程等操作。
分别烧写两个工程到flashA,flashB的思路是否正确?我担心自己走进了死胡同。
求教!
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
harte zhang:
回复 Huihong LIU1:
思路是正确的,之前有项目就是这么做的。应该可以成功。
另外我遇到的问题,在DSP升级完毕后没反应,发现DSP总是在复位-重启-复位死循环。即使掉电重新上电任然如此。周期大概400ms多点。
具体原因还没定位到。
希望有遇到类似问题的同学能指点一二!拜谢~
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
peng huifeng:
回复 Huihong LIU1:
1 bootloader程序和app程序可以做到一个程序里面一起升级的,这个我确定;你这个用jtag烧写会擦出所有区域,这个我不是太确定,貌似是这样的;
2 如果dsp无反应,检查codebranch文件,看跳转是否有问题,有个地方需要非常注意的;
3 据我所知,业界一般都用你说的这种思路,bootloader+app,程序接收到升级命令后开启看门狗,程序重启,升级标志置位,然后先运行bootloader,然后判断标志位,如果升级则调用flashapi进行擦除,然后接收数据进行升级,升级完成改写标志位,然后开启看门狗重启,即可!
4 注意cmd文件需要针对bootloader 升级标志位 和app单独分区操作,因为貌似dsp擦除是针对一个区域整体擦出的,所以会浪费点存储空间;
鉴于是同行,提示你思路,注意我提示的几个重点,剩下的慢慢摸索!
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
Huihong LIU1:
回复 harte zhang:
你是不是开了看门狗啊?然后如果你的程序上有大的DELAY的时候,就是不断的使能看门狗复位呢,个人见解,希望可以帮到你
EALLOW;if(!(SysCtrlRegs.WDCR & 0x0080)) //check WDFLag{//Force a reset//make sure WDog is enabled//watch dog enable, and WDCHK valueSysCtrlRegs.WDCR = 0x00A8; //previous value of 0x0068//would disable the WDog//write invalid data forces resetSysCtrlRegs.WDCR = 0x0000;}//Clear WDFlag - also need to write WDCHK correctlySysCtrlRegs.WDCR = 0x00E8; //This will also disable the WDog//SysCtrlRegs.WDCR = 0x00A8; //This will enable the WDogEDIS;
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
fei han2:
回复 peng huifeng:
想请问一下 某段程序和该程序在FLASH中的位置是怎么对应起来的?
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
fei han2:
回复 peng huifeng:
大哥 帮忙指点一下
怎样才能得到二进制代码?代码中的各个部分在FLASH中的位置是如何确定的?
28035芯片,CAN通讯,基于Flash Update API做的在线升级功能,存在这样的问题:用cc5.5编译产生的.out文件,有时候可以在线升级成功,有时候,升级完毕后DSP没有反应(连CCS看,是处于应用区)。同样的.out文件用仿真器烧写后运行正常。
往往是将应用程序稍微修改了下,产生新的.out文件后,在新旧两个.out文件间相互切换升级时就会出现升级完毕DSP没有反应的情况。
不知是否有人能指点一下呢?先谢过了!
user78960159:
回复 fei han2:
你了解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