搜索
bottom↓
回复: 49

430也要远程升级

[复制链接]

出0入0汤圆

发表于 2011-8-29 11:51:52 | 显示全部楼层 |阅读模式
这里所说的远程升级,确切的说就是通过430的串口(当然,通过其它通讯口甚至是IO也可以,串口最为方便使用而已)来实现内部程序的更新;之所以说成是“远程升级”,是因为在此基础上,可以通过RS485、CAN、无线网络或者其它远距离通讯手段实现单片机远程程序升级或者数据更新,在实际产品应用中,这是极具意义的。
430系列单片机并不直接支持串口下载,那么如何更新片上程序呢?430系列单片机提供了片内FLASH的在线读写能力,可以在430的flash中划分出一个区域,内部预存一个bootloader程序,当此程序被激活时,可以通过430的串口接收数据,按指令改写片上指定地址的FLASH,这就是实现远程升级的基本思路。这种方法所占用的程序空间不大,几百个字节即可,即使在123、2132这类小资源的单片机上实现,一般也不至于影响应用程序的存储。
用这个方法进行远程程序升级存在一个缺憾,那就是bootloader程序通常不能改写,升级是不彻底的——自杀肯定是不允许的。不过对于5系的430MCU来说,得益于其大容量ram(当然是在430系列里来说)以及ram内运行程序的能力,这个问题完全可以解决。我们可以把bootloader程序调入ram,在ram中执行,这样就可以更改全部的FLASH,来个彻底的程序升级了。下面就说说在IAR中怎么实现这个操作。
首先需要修改连接配置文件(.lnk文件),完成以下3个工作:
1 将RAMCODE加入RAM段,其中RAMCODE段即是运行程序的内存段;
2 建立BOOTLOADER中代码到RAMCODE的关联,其中BOOTLOADER是FLASH中的升级程序;
3 定义BOOTLOADER段的存储位置;
程序里需要做的工作是:
1 定义段名:定义BOOTLOADER和RAMCODE段名,以便地址运算符使用
    #pragma segment="BOOTLOADER"                           
#pragma segment="RAMCODE"
    2 把所有bootloader中的函数定义到RAMCODE段,也就是在函数前添加
        #pragma location="RAMCODE"
    3 把flash中的升级程序导入ram,这需要一个小函数来完成
     //----------------------------------------------------------------------------//
//                       拷贝flash内代码至内存中                              //
//----------------------------------------------------------------------------//
void copy_flash_to_RAM(void)
{
  unsigned char *flash_start_ptr                                     ; // 定义程序段指针
  unsigned char *flash_end_ptr                                       ;  
  unsigned char *RAM_start_ptr                                       ;
  
  flash_start_ptr = (unsigned char *)__segment_begin("BOOTLOADER")   ; // 初始化端起止地址
  flash_end_ptr = (unsigned char *)__segment_end("BOOTLOADER")       ;
  RAM_start_ptr = (unsigned char *)__segment_begin("RAMCODE")        ;
  unsigned long function_size =  (unsigned long)(flash_end_ptr)
                               - (unsigned long)(flash_start_ptr)    ; // 计算函数大小
  memcpy(RAM_start_ptr,flash_start_ptr,function_size)                ; // 拷贝程序
}   
以上已经为实现430单片机的远程程序升级打好了全部基础,剩下诸如串口通信、flash擦写就不必罗嗦了。5系的16K ram还是蛮管用的,甚至做个升级界面也绰绰有余。


(原文件名:升级.jpg)
至于一些细节问题,比如设置升级口令、通讯加密与校验等等,也都是必要的,注意一下就行了。
附件里是升级所需的配置文件。

点击此处下载 ourdev_672208HHAAEA.rar(文件大小:1K) (原文件名:lnk430F5438update.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-8-29 12:22:38 | 显示全部楼层
强帖,这个人要顶一下

出0入0汤圆

发表于 2011-8-29 12:24:18 | 显示全部楼层
好东西,顺便请教一下楼主,用5系的430单片机驱动分辨率为176*220的液晶屏进行动态显示一些波形,不知道在速度和资源上面能否胜任呢?

出0入131汤圆

发表于 2011-8-29 12:33:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-29 12:56:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-29 13:00:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-29 13:05:56 | 显示全部楼层
这个牛!

出0入0汤圆

发表于 2011-8-29 14:53:44 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-8-29 15:13:06 | 显示全部楼层
430远程升级,mark!

出0入0汤圆

发表于 2011-9-2 13:59:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-6 12:51:31 | 显示全部楼层
mark,正需要。

出0入0汤圆

发表于 2011-9-6 13:48:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-8 10:00:00 | 显示全部楼层
真不错。

出0入0汤圆

 楼主| 发表于 2011-9-11 14:37:54 | 显示全部楼层
回复【2楼】voval  
-----------------------------------------------------------------------

我觉得10KHz级别的波形,完全可以胜任

出0入0汤圆

发表于 2011-9-11 15:19:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-11 15:23:33 | 显示全部楼层
汗。。。。准备个带bootloader的固件就可以全写了。

出0入0汤圆

发表于 2011-10-8 09:37:12 | 显示全部楼层
这个有用

出0入0汤圆

发表于 2011-10-15 10:38:02 | 显示全部楼层
我手头有大量的430的F5438单片机的设备,都在现场运行。目前急需这个功能,期望楼主能出差一趟(天津),帮助我搞定我目前产品的远程升级,看到后请联系我 。QQ:414804689。电话:13752025039

出0入0汤圆

发表于 2011-10-26 11:57:28 | 显示全部楼层
恩,关键的不同就是把升级程序放入RAM中运行!!!

出0入0汤圆

发表于 2011-10-29 11:34:53 | 显示全部楼层
支持下

出0入0汤圆

发表于 2011-11-1 18:40:24 | 显示全部楼层
这个在一些场合很有用,本人就见过类似的应用

出0入0汤圆

发表于 2011-11-4 11:59:23 | 显示全部楼层
太利害了,不顶不行啊。。。。

出0入0汤圆

发表于 2011-11-9 10:20:17 | 显示全部楼层
Thanks a lot!!

出0入0汤圆

发表于 2013-8-16 09:49:09 | 显示全部楼层
23楼看来有高见,不过都没把东西贴出来,还是支持楼主!谢谢

出0入0汤圆

发表于 2013-8-17 15:12:23 | 显示全部楼层
学习了  顶一个

出0入0汤圆

发表于 2013-9-11 13:31:05 | 显示全部楼层
楼主几篇文章都不错啊。

出0入0汤圆

发表于 2013-9-11 17:28:51 | 显示全部楼层
强烈关注

出0入0汤圆

发表于 2013-9-12 15:48:12 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2013-9-13 17:37:14 | 显示全部楼层
不错...很实用...MARK一下

出0入0汤圆

发表于 2013-9-13 18:20:01 | 显示全部楼层
不错的说,应该试一试。。。

出0入0汤圆

发表于 2013-9-20 23:53:44 | 显示全部楼层
感谢楼主分享

出0入85汤圆

发表于 2013-10-3 12:03:57 | 显示全部楼层
本帖最后由 coolsir 于 2013-10-3 12:07 编辑

感觉楼主的方法还是有点繁琐,我现在采用的还是现在很多资料上说的,BOOTLOADER和应用程序分开,先下载BOOTLOADER 然后通过BOOTLOADER 升级应用程序  ,至于BOOTLOADER 的升级 则完全可以在应用程序里面升级。难度没有 只是需要定义好中断向量的转移即可了。还有就是下载的时候暂存也是一个问题,对于程序比较大的时候不可能一下子先暂存到内部RAM里面 ,就需要直接在线写进FLASH 这就需要串口发送程序需要有发送多少字节延时发送的功能。

出0入0汤圆

发表于 2013-10-9 23:13:43 | 显示全部楼层
谢谢分享。

出0入0汤圆

发表于 2013-10-10 11:44:34 | 显示全部楼层
也说下我的430升级,芯片是149,我是把bootloader也放在程序应用区一起的,只要把flash分成上下2个区,轮流操作即可,当然,每次升级都要擦写中断向量表,来完成中断向量的切换

出0入0汤圆

发表于 2013-10-10 11:47:40 | 显示全部楼层
好厉害的东西 帮顶

出0入0汤圆

发表于 2013-10-16 09:36:40 | 显示全部楼层
楼主的帖子 都很精彩...

出0入0汤圆

发表于 2013-10-16 09:57:43 | 显示全部楼层
msp430远程升级,mark,

出0入0汤圆

发表于 2013-10-25 15:05:17 | 显示全部楼层
呵呵!正在看相关的资料,谢谢!

出0入8汤圆

发表于 2013-10-29 09:34:29 | 显示全部楼层
收藏下,有空试下

出0入4汤圆

发表于 2013-10-29 09:52:25 | 显示全部楼层
以前在维护POS终端时就是这样做的:
首先在PC上准备待下载的固件;
然后用网线连接终端和PC;
待PC进度跑到逗,出现OK则可拔掉网线。

出0入0汤圆

发表于 2013-11-21 09:25:33 | 显示全部楼层
藏龙卧虎,受益匪浅

出0入0汤圆

发表于 2013-11-26 10:49:43 | 显示全部楼层
谢谢分享,正是需要的。

出0入0汤圆

发表于 2013-11-28 16:22:48 | 显示全部楼层
好帖               

出0入0汤圆

发表于 2013-11-28 22:16:07 来自手机 | 显示全部楼层
这个办法也不错!

出0入0汤圆

发表于 2013-11-28 22:27:59 | 显示全部楼层
mark...............

出0入0汤圆

发表于 2013-12-1 22:20:58 | 显示全部楼层
430现在也这么牛了

出0入0汤圆

发表于 2014-1-20 15:41:11 | 显示全部楼层
强帖收藏,谢谢楼主、。

出0入0汤圆

发表于 2015-12-25 16:46:44 | 显示全部楼层
学习了 ,必须收藏

出0入0汤圆

发表于 2016-1-4 15:19:58 | 显示全部楼层
多谢多谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 19:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表