新闻中心

EEPW首页>嵌入式系统>设计应用> 基于IAP技术的ADuC702x固件升级方案

基于IAP技术的ADuC702x固件升级方案

作者: 时间:2011-05-22 来源:电子产品世界 收藏

更新固件应用程序流程

本文引用地址://m.amcfsurvey.com/article/119691.htm

更新固件应用程序均指在程序运行于Bootloader区完成。若第一次只有Bootloader程序,而没有用户程序时,程序自动停留在Bootloader区。若程序正运行于用户区情况时,要求通过串口发送某条命令给MCU(微控制器),MCU收到指令后,更新Flash/EE存储器中进入Bootloader标志部分数据,使之有效,然后通过软件复位(通常称之为“热启动”)使程序从0x00000000位置启动,按上一节“程序启动过程描述”,则此时启动后,程序必定留在Bootloader区。

  在Bootloader区时,可以通过发送“”(“IAP”命令字符由Bootloader代码决定)命令来更新程序,当MCU接收到“IAP”命令后,修改用户程序是否有效标志值为无效,返回“OK”字符,然后程序以查询方式接收一个数据包(标志该数据包为数据包0),该数据为接下来将接收到的程序数据包长度信息,并同时包含校验信息,数据包0结构如图6所示,如果正确接收数据,返回两个字节(0xED,0xFA);否则返回(0x12,0x34),并结束IAP命令,回到Bootloader命令状态。

  接下来根据固件程序数据包长度依次接收各个数据包(标识这些数据包为数据包1、数据包2,⋯⋯,数据包n,其中n等于上一个数据包接收到的固件程序数据包长度(length)),这里每个数据包结构均一样,结构如图7所示,数据包由两部分组成,256B的固件程序数据和两个字节的CRC16校验码,一个数据包总长度为258B,在对固件程序打包时,若包数据不满256B,那么在包后面添加0xFF,直至256B。

  程序中每接收数据包1~数据包n中任何一个数据包时,若接收正确,则返回(0xED,0xFA),同时将数据写入对应Flash存储单元;否则返回(0x12,0x34),并结束IAP命令,回到Bootloader区等待IAP命令状态。若所有数据包接收正确,而且写入Flash正确,则修改用户程序有效标志,并返回(0xED,0xFA),否则返回(0x12,0x34),并结束IAP命令,回到Bootloader区等待IAP命令状态。

  待所有数据包接收完毕,并写Flash结束后,再给MCU发送“REBOOT”热启动命令即可完成固件重新运行。

  IAP更新固件应用程序流程如图8所示。

  下面描述如何更新User Application固件应用程序。以下所有提到的发送和返回的命令及数据均指十六进制格式,除非特殊说明。

  ⒈MCU正常工作,使用如下命令使MCU回到了Bootloader区

  发送:(自定义命令)

  返回:(自定义返回)

  ⒉发送:0x49 0x41 0x50 0x0D

  返回:0x49 0x41 0x50 0x0D 0x0A 0x4F 0x4B 0x0D 0x0A 0x5C 0x3E

  图9 固件程序数据包

  ⒊发送数据包0,数据包0结构如图6所示。

  返回(两个字节):

  (1)0xED 0xFA(正确接收),跳到步骤4;

  (2)0x12 0x34,错误,跳到步骤2。

  ⒋根据数据包0中所包含的固件应用程序数据包长度信息,发送固件应用程序数据包1~n,固件应用程序按图9方式打包,若包不满256B,则在后面依次填充0xFF。



关键词:IAPADuC702x201105

评论


相关推荐

技术专区

关闭