张宗元 周永涛
摘 要:本文所设计与实现的IAP(In Application Programming)是围绕ATMEL公司设计生产的ATmega64型单片机进行的,主要完成了ATmega64单片机的IAP功能,实现芯片程序通过串口、GPRS、WiFi、以太网等方式进行自我更新,以提高生产效率,节约芯片在实际现场应用过程中产生的出差费用,提高产品稳定性。
关键词:IAP;ATmega64;GPRS;WiFi;以太网
一、IAP介绍
In Application Programming简称IAP,其核心就是单片机芯片可以引导一个常驻Flash的启动加载程序(Bootloader Program)通过串口、GPRS、WiFi、以太网等方式接收用户程序,通过对Flash编程将其更新保存至Flash中。芯片的启动加载程序具备读写整个Flash存储器空间的权限,其中包括其自身所占用空间,故BootLoader程序甚至能够修改编辑自身、将自己删除。
二、ATmega64芯片介绍
ATmega64芯片是高性能、低功耗的8位AVR微处理器芯片,其具备先进的RISC架构,同时绝大多数指令的执行周期为一个时钟,内部具备64K字节大容量可编程Flash,Flash擦鞋寿命为10000次。ATmega芯片的Flash具备有独立锁定位的可选Boot代码区,通过片上Boot程序实现系统内编程,其Boot区大小通过BOOTSZ0与BOOTSZ1来调节大小。
三、IAP实现原理
IAP程序位于ATmega芯片Flash的高端区域,从0x7000开始最大至0x7FFF结束,该区域的Flash具备同时读-写(Read-While-Write)自编程机制。当ATmega芯片上电启动时,首先运行IAP程序进行检查是否需要进行程序升级,如果需要程序升级则Boot区代码主动锁定Flash低端區域,并且芯片驻留在Boot区等待接收串口或WiFi、GPRS、以太网模块传递过来的二进制数据,将接收来的二进制数据按页存储至Flash内,对应用程序进行更新升级。当传输至数据尾端时,IAP程序主动跳转至Flash的应用程序区,开始执行应用程序,从而完成整个Flash的升级过程。
三、基于串口的IAP实现原理
ATmega64芯片具备两路TTL串口电路,能够实现标准的串口通信,IAP程序通过初始化芯片的串口寄存器来使能串口,PC端通信软件将ATmega芯片的应用程序二进制文件以二进制流的形式按照固定波特率发送给芯片的IAP程序,IAP程序集成二进制流解码处理,将二进制数据按照PC端软件发送顺序依次从Flash的应用程序起始地址按页写入。当传输至二进制数据的末尾时,进行判断最后一帧数据是否满足一页,如果不满足一页,则使用0xFF进行填充将最后一页数据更新完成后,IAP程序关闭串口寄存器、定时器等、中断开关等在IAP程序运行期间的硬件及中断资源,然后跳转至应用程序区首地址开始执行用户的应用程序。
四、基于网络模块的IAP实现原理
联网模块包括WiFi、GPRS、以太网等练完模块,ATmega芯片搭配该类网络模块可以实现芯片应用程序的远程升级。当芯片运行在应用程序时若收到服务器远程的遥控升级指令,应用程序需要在EEPROM中设置特定的标记位,并且跳转至Flash的Boot区开始运行IAP程序,IAP程序初始化网络模块,通过http方式下载特定二进制文件,并将文件更新至应用程序区Flash内,进而完成应用程序的远程升级。
五、总结与展望
基于串口的IAP升级与基于网络模块的IAP远程升级可以互相配合,充分利用Boot区Flash大小限制将二者融合,让ATmega芯片实现既能近距离串口升级又能远程升级,在提高生产效率的同时,降低运维成本,保证产品的稳定性。