搜索
bottom↓
回复: 18

AVR单片机通过RS485在线升级程序包括BOOT以及上位机程序

[复制链接]

出0入0汤圆

发表于 2013-9-14 09:53:26 | 显示全部楼层 |阅读模式
一、做IAP程序在这里提醒大家主要的几点再配合本帖子的源码估计大家就能够设计出自己完美的在线升级程序。
1、本人使用开发环境是IAR for avr5.11版本,使用的仿真器是JTAGICE mkII,单片机ATMEGA168PA。
2、原理:整个思路,单片机上电通过配置熔丝使单片机从BOOT区复位,当进入主程序的时候需要通过指令设置单片机中断向量到BOOT区,这样在BOOT程序里就可以使用中断服务程序,否则中断服务程序会跳到应用程序中中断服务程序,这就不对了。当然当你运行完BOOT区程序的时候还需通过指令设置单片机中断向量到应用程序区(也就是flash 0x04开始 ,这里复位中断向量是由熔丝位配置的,当配置成从BOOT区启动时每次上电都从BOOT启动,跟中断向量映射成BOOT区还是应用程序区没关系)。本例程判断3s如果没有收到升级命令就直接跳转到应用程序中去。当然在运行应用程序的时候也可以通过发送指令跳到BOOT区,这里我一般没有直接跳转而是用AVR单片机的看门狗让单片机复位后再运行BOOT区,这样就可以升级了。
3、在我的例程里有个地址判断在EEPROM中,用于RS485地址的识别只有收到相对应的地址才能够升级,否则不升级。
4、还有一个很关键的东西一定要提醒一下大家,就是在编写好程序后如何把BOOT程序烧写到BOOT区,这是IAP一个重点。这里我使用了IAR的xcl连接文件,需要对这个文件配置自己烧写代码在flash中的位置,以及RAM的配置等等,详细修改可以参考源码给出的XCL文件。当然应用程序就没有必要修改xcl文件使用默认的就可以。当你烧写BOOT程序后,在第一次烧写应用程序时候可以在单片机上电3S(这里可以优化一下,在没有应用程序时候一直处于等待烧录而不跳到应用区)内启动烧写。

好了到此估计大家对于IAP程序的编程编写不再陌生了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-9-14 09:59:46 | 显示全部楼层
还有本例程BOOT区的代码超过1K所以熔丝配置BOOT区大小为2K字节(1K字),此方法已经应用到产品中去了,肯定稳定可靠工作。已经过成千上百的实验无一升级失败。

出0入0汤圆

发表于 2013-9-14 10:34:16 | 显示全部楼层
呵呵 还是给顶一顶!

出0入0汤圆

发表于 2013-9-14 10:34:29 | 显示全部楼层
多谢楼主,先收起来以备可能的应用.

出0入0汤圆

发表于 2013-9-14 10:39:30 | 显示全部楼层
正想学习

出0入0汤圆

 楼主| 发表于 2013-9-14 10:44:22 | 显示全部楼层
补充一下:上位机软件是用VC6.0编写的。

出0入0汤圆

发表于 2013-9-14 14:13:41 | 显示全部楼层
标记一下,谢谢LZ

出0入0汤圆

 楼主| 发表于 2013-9-16 09:49:33 | 显示全部楼层
boot程序在烧录的时候还需要修改一下XCL文件,在-h(CODE)(_..X_FLASH_SIZE-_..X_BOOT_SIZE)-(_..X_FLASH_SIZE-_..X_BOOT_SIZE+_..X_IVT_SIZE-1)前加上-H1895变为
-H1895 -h(CODE)(_..X_FLASH_SIZE-_..X_BOOT_SIZE)-(_..X_FLASH_SIZE-_..X_BOOT_SIZE+_..X_IVT_SIZE-1);然后再取消“中断向量不使用时填充RETI”,取消方法:General Options ->System  取消“Initialize unused interrupt vectors with RETI instruction”前面的对号即可。这样就不会在零地址开始的地方默认填充RETI代码(如果填充的话就无法再通过烧录器烧写应用程序,只能通过串口升级程序烧写应用程序,这样不利于生产),可以在烧录完BOOT程序后,选择烧录前不擦除芯片flash把应用程序通过烧录器直接烧写到芯片中(便于生产)。

出0入0汤圆

发表于 2013-9-17 00:07:38 来自手机 | 显示全部楼层
标记一下,然后怎么找呢?

出0入4汤圆

发表于 2013-9-17 00:22:39 | 显示全部楼层
顶一个,前段时间搞过16的。

出0入0汤圆

发表于 2013-9-17 06:15:21 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-9-17 07:06:07 来自手机 | 显示全部楼层
我要弄个430的

出0入0汤圆

 楼主| 发表于 2013-9-17 08:12:10 | 显示全部楼层
divineliu 发表于 2013-9-17 07:06
我要弄个430的

其实思路都一样的!

出0入0汤圆

 楼主| 发表于 2013-9-18 13:07:19 | 显示全部楼层
本帖最后由 tangcdong 于 2013-9-18 13:12 编辑

这里有个问题纠正一下,这个是从产品中提炼出来的,由于时间问题有些地方没改过来请谅解 ,原文#define DisableISR()        SREG_I=1//允许中断,应改为#define DisableISR()        SREG_I=0//禁止中断
因为我在测试的时候发现有时候会卡一下,表明校验不正确,上位机软件重发了一次,造成这个的原因是中断没有关闭引起的。为使代码完整性,故在此说明一下。

出0入0汤圆

发表于 2019-10-5 15:46:55 | 显示全部楼层
感谢楼主分享,谢谢!

出390入22汤圆

发表于 2020-9-26 18:26:01 | 显示全部楼层
楼主,你好!
我用ICC,但是你的文件里感觉有无用的C程序,麻烦你将无用的C程序挑出只留下有用的C程序好吗?

出0入0汤圆

发表于 2020-9-27 08:27:18 | 显示全部楼层
感谢分享,学了好多知识

出390入22汤圆

发表于 2020-9-29 12:55:55 | 显示全部楼层
tangcdong 发表于 2013-9-18 13:07
这里有个问题纠正一下,这个是从产品中提炼出来的,由于时间问题有些地方没改过来请谅解 ,原文#define Dis ...


楼主,你好!
我用ICC,但是你的文件里感觉有无用的C程序,麻烦你将无用的C程序挑出只留下有用的C程序好吗?

出0入0汤圆

发表于 2020-9-29 18:48:02 | 显示全部楼层
liudingding 发表于 2020-9-29 12:55
楼主,你好!
我用ICC,但是你的文件里感觉有无用的C程序,麻烦你将无用的C程序挑出只留下有用的C程序好 ...

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

本版积分规则

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

GMT+8, 2024-4-20 11:22

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

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