请选择 进入手机版 | 继续访问电脑版

芯虎论坛

 找回密码
 立即注册
查看: 2579|回复: 8

华大单片机HC32L110远程升级

[复制链接]

36

主题

52

帖子

4万

积分

论坛元老

Rank: 8Rank: 8

积分
40373

论坛元老

发表于 2019-1-15 16:26:41 | 显示全部楼层 |阅读模式
本帖最后由 龙飞虎 于 2019-1-15 16:54 编辑

通常实现IAP功能时,需要在设计固件程序时编写两个项目代码,第一个项目程序即BOOT程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目程序即APP程序用户真正的功能代码。这两部分项目代码同时烧录在Flash中,当芯片上电后,首先是第一个项目程序BOOT开始运行,它主要实现如下功能:

1)检查是否需要对第二部APP程序代码进行更新
2)如果不需要更新则转到4)
3)执行更新操作
4)跳转到第二部分代码执行
     第一部分BOOT代码可以通过SWD或者离线编程器下载到芯片Flash内部,第二部分APP和第一部分BOOT一起烧入芯片内部,以后需要程序更新再通过第一把BOOT代码更新。根据芯片系列的Flash存放不同地址范围,从最低地址区域开始存放BOOT,紧跟其后的就是APP程序,本篇笔记受限于芯片内部Flash容量,只是存放一个APP程序。即在芯片内部有两个程序即BOOT和APP程序。

IAP功能具体实现
      芯片程序一般从Flash地址0x0000_0000开始执行,基于Cortex-M0+内核特性,内部通过中断向量表来响应中断,程序从中断向量表取出复位中断向量执行中断程序,当中断产生,芯片内部PC指针定位到中断向量表来取出对应的中断服务程序执行。如果没有中断产生,在芯片执行完复位中断服务程序后,跳转到main函数顺序执行死循环。如果有中断产生,通过中断向量表执行对应的中断服务程序。

      当加入IAP后,芯片还是从中断向量表取出复位中断向量执行中断程序,如果没有中断产生,在芯片执行完复位中断服务程序后,跳转到main函数。在执行完IAP后,新程序的复位中断向量地址为0x0000_0004 + BOOT程序大小,跳转到APP程序的复位向量表,执行APP的复位中断服务程序,随后跳转到APP程序的main函数执行。
其中:BOOT程序大小3.5KB
      Para 区域存放IAP升级期间参数和标志占用0.5KB
      APP程序大小为24KB
  Demo程序,操作流程如下:   
先将APP工程HEX下载到芯片内部
打开BOOT工程HEX下载到芯片,或者可以使用工具将两个HEX文件合并在一起下载到芯片内部。
使用上位机演示程序,打开串口波特率固定为9600。按照协议将APP工程的bin文件下载到0x1000开始的芯片内部,其中要求APP的bin文件小于28KB。
参考样例及驱动
通过上述介绍,使用演示Demo程序IAP需要特定协议。

通信协议格式如下:
///*frame:68  A0  A1  C  Page   L0  L1  D0... DN-1   CRC0  CRC1   16*///
///*offset :0    1    2    3      4       5    6    7      8+N     9+N   10+N   11 +N*///
头字符:    固定字符为0x68 一个字节
地址:       A0 A1 两个字节  
控制码C: 读地址为0x15    写地址为0x25
页地址page: 一个字节 代表现在要操作的那个页
长度L0 L1:  两个字节 L0代表高字节,L1代表低字节,此处长度仅代表数据区域长度
数据域D0…DN-1 : 代表读出或者写入的数据
数据校验CRC: 采用CRC-16方式,代表数据域数据的校验。
结束符号:固定字符为0x16 一个字节

读指令如下:
68   A0   A1   15   Page   0x00   0x00   CRC0   CRC1 16  
正确回复:68 A0 A1   95   Page   0x04   0x00   D0 ………… D1023   CRC0 CRC1 16
错误回复   68 A0  A1  D5   Page   0x00   0x00  CRC0  CRC1 16

Page 选择(0 -- 27)
每次读取1K字节数据


写指令如下:
68   A0   A1   25   Page   04   00   D0 ………… D1023   CRC0   CRC1 16  
正确回复:68 A0   A1   A5   Page   04   00   CRC0 CRC1 16
错误回复   68 A0   A1   E5   Page   00   00    CRC0  CRC1 16

Page 选择(0 -- 27)
每次写1K字节数据

开始IAP升级指令
68   A0   A1   36   00   00    00    00   00   16  
正确回复  68  A0   A1    B6   00    00  00  00    00   16
错误回复  68  A0   A1    F6    00   00  00  00    00   16

结束IAP升级指令
68   A0   A1   49   00   00   00   00    00   16  
正确回复  68  A0   A1   C9   00     00  00  00    00   16
错误回复  68  A0   A1   09   00     00  00  00    00   16

发送数据帧如果发送结束到接收小于2s,如果超过说明IAP升级通信错误。

以下部分简要介绍IAP实现关键代码:

1)BOOT实现跳转到APP代码:

if(((*(__IO uint32_t*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法

{

  jump2app=(iapfun)*(__IO uint32_t*)(appxaddr+4);  //APP程序复位地址

  MSR_MSP(*(__IO uint32_t*)appxaddr);              //初始化APP堆栈指针

  jump2app();                                      //跳转到APP程序

}  
2)APP程序中断向量偏移:

   new_vect_table  EQU     0x00001000         ;中断向量偏移长度
; reset Vector table address.
   LDR     R0, =0xE000ED08
   LDR     R2, =new_vect_table
   STR     R2, [R0]       ;向量表重定义点击并拖拽以移动
总结
      以上章节简要介绍了HC32L110系列的IAP控制模块基本功能,详细说明了该模块的各个功能及操作步骤,用户在实际的应用开发过程中,如果需要更深一步了解该模块的使用方法及操作事项,应以HC32L110的用户手册为准。本章中提到的样例既可以作为用户进一步的实验与学习,也可以在实际开发中直接应用。
程序源码请点下面下载:







本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

13

帖子

88

积分

虎头虎脑

Rank: 2

积分
88

活跃会员

发表于 2019-1-16 09:26:31 | 显示全部楼层
没有玩过远程升级,学习学习
回复

使用道具 举报

0

主题

5

帖子

36

积分

虎视眈眈

Rank: 1

积分
36
发表于 2019-1-18 09:33:09 | 显示全部楼层
要是有人能再完善一下这个IAP串口的上位机软件就好了。现在这个上位机软件要手动去改地址,要是能改成接收到下位机的回复就自动发送下一个地址的数据,直到发送完成,那就很好用了!
回复

使用道具 举报

41

主题

63

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
42213

论坛元老

发表于 2019-1-18 09:36:43 | 显示全部楼层
Hero110 发表于 2019-1-18 09:33
要是有人能再完善一下这个IAP串口的上位机软件就好了。现在这个上位机软件要手动去改地址,要是能改成接收 ...

看来你已经用上了啊,来和大家分享下经验
芯虎论坛TigerCHIP---用“芯”说话
回复

使用道具 举报

0

主题

5

帖子

36

积分

虎视眈眈

Rank: 1

积分
36
发表于 2019-1-18 14:19:12 | 显示全部楼层
本帖最后由 Hero110 于 2019-1-18 14:25 编辑
虎子 发表于 2019-1-18 09:36
看来你已经用上了啊,来和大家分享下经验

例程就可以直接用啊.把IAP程序下载进开发板。连上串口,打开串口IAP升级软件(此软件默认波特率9600改不了的),打开串口,点“开始”,开发板会有数据返回,再打开APP程序的BIN文件,接下来就是改地址和写数据,直到写完后再点完成,开发板就会跳进APP程序了
回复

使用道具 举报

41

主题

63

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
42213

论坛元老

发表于 2019-1-18 14:52:00 | 显示全部楼层
Hero110 发表于 2019-1-18 14:19
例程就可以直接用啊.把IAP程序下载进开发板。连上串口,打开串口IAP升级软件(此软件默认波特率9600改不了 ...

你做的是什么产品啊,比较好奇
芯虎论坛TigerCHIP---用“芯”说话
回复

使用道具 举报

1

主题

4

帖子

13

积分

虎视眈眈

Rank: 1

积分
13
发表于 2019-2-13 14:32:09 | 显示全部楼层
IAP串口升级用户程序值得学习一下
回复

使用道具 举报

41

主题

63

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
42213

论坛元老

发表于 2019-2-13 15:48:52 | 显示全部楼层
lcr12 发表于 2019-2-13 14:32
IAP串口升级用户程序值得学习一下

相互学习,交流
芯虎论坛TigerCHIP---用“芯”说话
回复

使用道具 举报

0

主题

42

帖子

126

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
126
发表于 2019-7-4 15:38:22 | 显示全部楼层
虎子 发表于 2019-1-18 14:52
你做的是什么产品啊,比较好奇

同问。110是低功耗单片机,主要应用在电池供电的场合。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|芯虎论坛 ( 辽ICP备918019618号

GMT+8, 2019-11-13 15:38 , Processed in 0.156249 second(s), 6 queries , File On.

Powered by 芯虎论坛

© 2019 Tigerchip

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