为了确保系统可用型,升级过程中先要备份当前版本应用程序,通过一个缓存页面,升级程序和应用程序按Flash页块进行交换,复制次序如图2(b)所示,确保升级过程既不破坏原有版本程序代码,也不丢失新版本程序。
根据Flash按页擦除、字节写入的特性,在IAP参数区,用8 B共64 bit代表64个页面,初始化时为0xff,完成一页则依次清除一位,这种写模式下不需要擦除页面即可记录升级进度。一旦升级过程发生断电等意外,开机重启后可以检测到升级断点,继续升级。
如果升级后应用程序功能不稳定,还可以在应用程序中通过管理卡设置,回滚恢复到原来版本。这个过程和升级新版本软件过程一样,只是不需要读取升级卡,仅需通过管理卡设置回滚标志,通知引导程序“升级”(恢复)到原来版本应用程序。
1.2 应用程序设计
应用程序完成所需设备功能后,还需要实现读取升级卡写入升级程序区,或者通过管理卡设置回滚标志,在应用程序的卡处理过程中增加升级卡处理,应用程序流程如图3(a)所示。
在应用程序检测到有卡时,执行卡事件处理流程中,如图3(b)所示,识别卡的类型如果是消费卡或管理卡,则进入相应功能处理。管理卡与程序版本相关的只有版本选择参数,置位时写入IAP参数区,由引导程序交换应用程序和升级程序,主要用于升级后的版本回退。
识别到升级卡时,读取升级卡格式数据块。如果当前已经读取过升级卡并写过升级程序区,则升级卡版本信息必须与已经写入的升级卡版本一致才能继续读入。确认校验数据完整性后,根据数据地址信息写入升级程序区,否则提示拒绝该卡,确保升级卡版本一致。如果尚未读取过升级卡,则先读取并判断升级卡版本。如果与应用程序或升级程序版本重复,则提示已经升级;如果为新版本软件,则需要先擦除升级程序区Flash,再根据升级卡头信息写入升级程序区。如果本套升级卡已经全部读取并写入升级程序区,则更新IAP参数,软件复位跳转到引导程序。
2 IAP硬件平台设计
目前支持IAP的51单片机有STC的IAP11F系列以及新茂、新唐(华邦)和SST等很多型号,而基于ARM的单片机基本都支持IAP功能,这里以两种典型应用为例介绍IAP系统设计。
2.1 51单片机系统
水控器是应用于饮用水或浴室等用水管理的设备,通过控制电磁阀管理出水,通过定时器计时收费,通过脉冲式流量传感器计量收费,或者通过RTC时钟包时收费。