zhouhuoyan的个人主页

http://bbs.ntpcb.com/u.php?uid=97051  [收藏] [复制]

zhouhuoyan

  • 15

    关注

  • 13

    粉丝

  • 118

    访客

  • 等级:二级逆天
  • 总积分:3304
  • 男,1988-07-24

最后登录:2024-04-25

更多资料

日志

华大单片机HC32L110远程升级

2021-01-07 09:10

通常实现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


使用特权


分类:默认分类|回复:1|浏览:565|全站可见|转载
 
 
删除

doudoucj123:感谢楼主分享

2021-01-09 13:29 -

Powered by phpwind v8.7.1 Certificate Copyright Time now is:04-26 05:05
©2003-2011 逆天PCB论坛 版权所有 Gzip disabled 粤ICP备14042835号 问题咨询 | 广告业务点这里