打印
[技术问答]

华大单片机HC32L110远程升级

[复制链接]
458|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白虎姐|  楼主 | 2021-1-5 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通常实现IAP功能时,需要在设计固件程序时编写两个项目代码,第一个项目程序即BOOT程序不执行正常的功能操作,而只是通过某种通信方式(如USB、USART)接收程序或数据,执行对第二部分代码的更新;第二个项目程序即APP程序用户真正的功能代码。这两部分项目代码同时烧录在Flash中,当芯片上电后,首先是第一个项目程序BOOT开始运行,它主要实现如下功能:
更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
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

使用特权

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

本版积分规则

40

主题

41

帖子

0

粉丝