通过串口SCI更新DSP28335的用户程序
2017-05-22 15:36
176 查看
本文详细期刊介绍链接
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2017.08.21更新
有同学使用ccs6编译我的升级程序,并且下载我的ccs5生成的hex文件,会出现升级的用户程序不能正常运行的情况,也就是升级结束后在串口调试助手中不会打印“user code”,造成这种现象的原因应该是版本的问题,需要将用户程序在ccs6版本下重新生成hex文件,然后使用升级程序升级用户程序即可成功,ccs6设置链接。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、FLASH地址分配及cmd文件改写
1.存储器flash分配
0x30 0000 - 0x30 7FFF FLASHH0x30 8000 - 0x30 FFFF FLASHG
0x31 0000 - 0x31 7FFF FLASHF
0x31 8000 - 0x31 FFFF FLASHE
0x32 0000 - 0x32 7FFF FLASHD
0x32 8000 - 0x32 FFFF FLASHC
0x33 0000 - 0x33 7FFF FLASHB
0x33 8000 - 0x33 FF7F FLASHA
/*内存分配
* 用户程序可写入下面的区域,目前128K,如果不够还可以将F盘添加进来;
* 也可将A盘添加进来,但是A盘有程序锁,添加该部分需要做相应的处理。
*
* FLASHE : origin = 0x318000, length = 0x008000 // on-chip FLASH
* FLASHD : origin = 0x320000, length = 0x008000 // on-chip FLASH
* FLASHC : origin = 0x328000, length = 0x008000 // on-chip FLASH
* FLASHB : origin = 0x330000, length = 0x008000 // on-chip FLASH
*
* USER_CODE: SECTORB|SECTORC|SECTORD|SECTORE
* BOOT_LOADER_CODE: SECTORG|SECTORF //(F盘为BOOT备用盘,目前没有使用)
* FLASH_API_CODE: SECTORH
*/
2.cmd文件
其中用户程序中的cmd文件请注意:我把codestart写到了FLASHE的起始地址,这样当升级完程序后bootload程序应该接着运行USER_CODE段,此段正好在FLASHE中,所以程序就开始从更新的用户程序运行。
FLASHE_BEGIN : origin = 0x318000, length = 0x000010 /* 存放用户程序的codestart */ FLASHE_USERCODE : origin = 0x318010, length = 0x007FF0 /* on-chip FLASH */ .cinit : > FLASHE_USERCODE PAGE = 0 .pinit : > FLASHE_USERCODE, PAGE = 0 .text : > FLASHE_USERCODE PAGE = 0 codestart : > FLASHE_BEGIN PAGE = 0 ramfuncs : LOAD = FLASHE_USERCODE, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), LOAD_SIZE(_RamfuncsLoadSize), PAGE = 0 .econst : > FLASHE_USERCODE PAGE = 0 .switch : > FLASHE_USERCODE PAGE = 0
二、目录中文件夹说明
28335SCI_Update_Flash通过串口更新程序的代码Example_2833xGpioToggle测试程序,在串口调试助手上不断打印“USER CODE”
参考程序 参考的DSP通过ARM升级程序和通过CAN总线升级程序,使用时将工程单独拿出来解压
三、运行说明
Example_2833xGpioToggle\Debug中的Example_2833xGpioToggle.hex为测试用户程序的hex文件。1.右击TMS320F28335_SEEDXDS510PLUS.ccxml选择Launch Select Configuration;
2.点击Connect Target,然后点击Load下载f28335_Sci_Update_Flash\28335SCI_Update_Flash\Debug中的28335SCI_Update_Flash.out后运行;
3.串口打印“boot code!”,在串口工具中输入u后便进入升级状态;
4.程序先擦除SECTORB|SECTORC|SECTORD|SECTORE,然后显示擦除成功Flash_Erase success,等待输入hex文件;
5.在串口助手中打开文件中选择hex文件目录,点击发送文件,然后等待发送完成,之后完成升级;
6.完成升级后,程序自动从FLASHE加载用户程序;
7.用户程序运行过程中,要想再更新程序,需要复位程序,然后在运行后的3s内,在串口工具中输入u,既可重复以上步骤。
四、版本记录
1.改动Sci_Echoback例程测试接收hex文件是否有问题 shgao 12.152.成功在FLASHE中更新用户程序(在串口助手上打印消息) shgao 12.16
存在的问题:(1)在发送每部分时,只能接收到单数行的数据并存到flash中,现在临时解决方案:先发送此部分,然后删除一行再重复发送此部分;
(2)接收完数据后采用asm("LB 0xxxxxxxxx")跳转到用户程序的main函数处,有没有固定起始地址的方法?
3.解决上述问题(2) shgao 12.17
用户程序的.cmd文件中将codestart分配到FLASHE的起始地址,在升级程序中升级完成后运行的是.USER_CODE段,
在升级程序中USER_CODE段正是以FLASHE起始的。
4.上电后若在串口助手中输入字符'u',则进入升级状态,先将SECTORE|SECTORD|SECTORC|SECTORB擦除,
然后等待发送hex文件,当最后一行发送完成后升级完成,自动跳转到用户程序开始执行。
注意:每次升级时需要重启设备。
5.解决上述问题(1)
shgao 12.17
由于在Flash_Program后面有串口输出的语句,这样可能造成接收有问题,所以去除scib_msg语句。
if(SCIRXD.RcvData[3] == 0x0000) { status = Flash_Program((Uint16 *) SCIRXD.DestAddr, (Uint16 *)BlockBuffer1, BufferIndexMax, &FlashStatus); if(status != STATUS_SUCCESS) { // scib_msg("Flash_Program Error!\n\0"); while(1){} } // else // { // scib_msg("Flash_Program success!\n\0"); // }6.解决运行擦除函数Flash_Erase时,经常进入中断 interrupt void ILLEGAL_ISR(void),成功使用串口升级用户程序 12.18
原因:在擦除的时候不要开着memory串口查看flash区域的内容,将memory窗口关闭即可成功擦除,然后接收hex文件写入到用户flash。
五、代码地址
相关文章推荐
- 【28系列DSP小结-3】通过SCI更新Flash程序
- VS 安装项目 :通过文本框得到用户输入 以及 安装后运行某程序(如打开C:\\a.html)
- 如何通过程序实现同一事务中多次数据库更新的错误回滚?
- 编写一个组合鼠标事件和键盘事件的程序,该程序模拟一个电子白板,用户用鼠标在白板上画画,并通过键盘在上面写字
- 无法通过windows installer服务安装此安装程序包。您必须安装带有更新版本windows Installer服务的Windows
- DM355通过串口下载程序方法步骤 ,davinci,串口
- OK6410通过串口下载程序关键代码,检测文件发送完毕方法及稳定发送要点
- Linux爆本地提权漏洞请更新udev程序(Debian ubuntu 测试通过,Centos5.3失败,FC10测试成功)
- C#监控WinCE手机用户操作的程序,并通过usb连接发送到pc监听服务
- 这个当单片机程序怎么会不停的通过串口发数据,设置波特率为9600,但是串口软件接受数据不对(初学者,请高手指教)
- 通过cron自动更新服务器上的程序
- kernel module编程(九):通过用户程序的strace检查内核模块调用情况
- 控制发送SMS信息的C51程序[GSM模块(M22)通过串口与单片机相连]
- 移植rzsz通过串口下载程序到开发板上的工具
- 在黑莓手机上通过Java程序更新应用的图标,并且图标上面带数字
- 通过TCODE查找用户增强的示例程序
- flex中可以通过SystemManger监控用户是否和程序打交道
- DM355通过串口下载程序方法步骤
- .net通过一般处理程序模拟用户控件数据保持、Ispostback 【第二版将html与ashx文件分开】
- 编写程序强制用户通过SSL访问网站