打印
[单片机芯片]

用户程序自升级!IAP升级详解!

[复制链接]
1524|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyyyy|  楼主 | 2019-9-27 10:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wyyyy 于 2019-9-27 11:05 编辑

一、原理
       IAP(In Applicating Programing)在应用编程,即通过用户程序对用户程序进行升级,这样就可实现用户自由升级而不影响应用。比如一款支持IAP的单片机,这里以目前正在使用的CH559单片机举例,我们可以人为的将其内分成三个程序区,1作引导程序区即BOOT区域,2作为运行程序区即用户程序区域,3作为下载区。芯片通过满足触发条件(用户自己设定)进入引导区运行引导程序,在BOOT程序下将目标程序下载到下载区,下载完成并校验通过后再将下载区内容复制到用户程序区,运行复位程序,IAP完成。
二、应用:
   方式1:跳转BOOT,通过ISP下载工具完成下载
   查看CH559DS1芯片手册可知,CH559芯片出厂内置BOOT,且Boot Loader Code Flash起始地址为0XF400,如下图所示:
      
   这个地址也就是我们IAP跳转的起始地址,定义一个函数指针类型的变量,将该函数指针指向BOOT Loader的起始地址。我们设置的触发条件是检测P1^6引脚低电平,满足条件后实现地址跳转,跳转BOOT后再使用官方提供的ISP工具,实现在线下载。
      
  上述是借助官方提供的ISP工具跳转BOOT区实现目标程序下载,下面介绍一下通过IAP实现定制“BOOT”,然后通过任意接口下载。
  方式2:定制“BOOT”,任意接口完成下载
  上述是通过CH559单片机自带的BOOT程序完成下载,下面介绍一下通过IAP实现定制“BOOT”,然后通过任意接口实现程序升级。真正达到接口自由、触发方式自由、协议自由。
  首先编译目标程序,根据编译生产的hex文件大小,具体大小如图2.1.1所示,设置IAPFLASH中存储的位置
   
file:///
  设置如下图2.1.2所示,“Start”起始地址到0xF000之间的存储空间不能小于图2.1.1中的code大小,为了便于操作起始地址最好设置成1K的整数倍,“Size”可以不设置,Keil会自动设置文件大小。IAPCode大小是1861B,所以设置IAP程序空间最小为(2+NKBN=0,1…..)。所以由0xF000地址(Data Flash起始地址)递减(2+NKBN=0,1……), 0xF000-0x400*(1+N)(N=0,1..)=0xE800, 因为 BIN文件开头需要预留一个至少 4 字节空间给跳转指令,所以 IAP 程序设置地址为(0xE800+4);
    IAP 程序里面定义的起始存放地址依然是 0xE800,如:
   
   地址设置如图所示:
   
   编写用户程序时,我们需要在用户程序中实现跳转升级,同样需要定义函数指针类型变量,将改指针指向设置的起始地址。
   
  下载 IAP 的程序的时候需要指定下载地址,下载地址跟程序中的跳转地址一致,如本例子用0xE800。第一次下载还是需要通过ISP工具这里需要勾选启用IAP功能设置起始地址注意,设置的起始地址与 2.2 中描述相同,这里设置的是0xE804,与 IAP 工程设置的地址相同。在下面两个程序文件栏分别选择 IAP 程序 CH55IAP 和用户程序CH559User,点击下载。如图 所示
   
  打开 CH559IAPDemo 程序包,双击运行 WCHMCUIAP_WinAPP.exe。选择 USB 下载,选择程序文件CH559User。本例程中是用 Demo 板上按键 K4 进入 IAP 程序(按下 K4 键相当于 P1.3 接地),用户可根据需要自己修改别的方式。按下按键 K4 松开,LED5 熄灭,LED6 闪烁,并且频率较快,表示进入IAP 程序,应用程序 CH559WINUser 的设备列表中出现设备,如图 2.4.1 所示,点击下载,下载完成后自动复位执行用户程序。
  

3、程序源码
   USB+UART的IAP实现.rar (110.25 KB)

使用特权

评论回复
沙发
Taoyukai| | 2019-9-28 13:41 | 只看该作者
刚好需要这部分资料,感谢楼主!

使用特权

评论回复
板凳
wyyyy|  楼主 | 2019-9-29 14:49 | 只看该作者
Taoyukai 发表于 2019-9-28 13:41
刚好需要这部分资料,感谢楼主!

使用特权

评论回复
地板
MCU57863859| | 2019-9-29 15:45 | 只看该作者

使用特权

评论回复
5
copower| | 2020-8-10 18:11 | 只看该作者
技术贴,感谢楼主分享。

使用特权

评论回复
6
电俊| | 2021-1-28 15:02 | 只看该作者
学习了~感谢楼主的馈赠!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

65

帖子

0

粉丝