1、 http:/ AVR 单片机固件自动更新系统的设计与实现 张 莉 ( 广东松山职业技术学院,广东 韶关 512126) 摘 要 : 利用 ATmega 系列 AVR 单片机具有在应用编程的特点,设计了固件自动更新系统 该系统上位机和目标机之间连线简单,采用了常用的串口通信,软件设计进行了适当的加密处理,确保数据存储安全可靠 利用这种方法可以实现工业现场单片机固件自动升级,较大幅度降低生产成本 关键词 : AVR 单片机 ; 固件 ; IAP; 上位机 ; 目标机 ; 通信协议 AVR 单片机是 1997 年由 ATMEL 公司 研发出的增强型内置 Flash 的 RISC( Reduced
2、Instruction SetCPU) 精简指令集高速 8 位单片机,目前广泛应用于计算机外部设备、工业实时控制、通讯设备、家用电器、仪器仪表等各个领域 AVR 单片机内嵌高质量的 Flash 程序存储器,擦写方便,支持 ISP 和 IAP( 即“在应用编程” ) ,便于产品的调试、开发、生产和更新 1 文中针对 ATmega 系列高档 AVR 单片机具有 IAP 的特点,设计了一种固件自动更新系统,便于嵌入式产品升级,且安全可靠 1 固件 和 IAP 功能介绍 在现代信息技术不断发展的今天,嵌入式系统已经广泛应用于网络通信、消费电子、工业控制等领域,嵌入式系统一般主要由微处理器、控制器、传感
3、器等硬件设备和运行在硬件设备上的专用软件组成 而所谓的固件 ( Firmware) 是指存储在嵌入式产品中程序存储器上的为嵌入式系统编写的程序组件,通过特定的程序进行刷新,可以实现更改嵌入式设备的功能或修复缺陷 2 对于一个嵌入式产品而言,固件就是最底层、最基础的软件组件,也是实现嵌入式系统功能的根本组件 固件远程升级一般要求系统具备 IAP 功能, 所谓 IAP( In Application Programming) 即在线应用编程,是应用在 Flash 程序存储器上的一种编程模式,它可以在应用程序正常运行的情况下,通过调用特定的 IAP 程序对另外一段程序 Flash 空间进行读 /写操
4、作,甚至可以控制对某段、某页甚至某个字节的读 /写操作,这为数据存储和固件的现场升级带来了更大的灵活性 IAP 的本质就是 MCU 可以灵活地运行一个常驻 Flash 的引导加载程序( Boot Loader Pro-gram) ,实现对用户应用程序的在线自编程更 新 引导加载程序的设计可使用任何可用的数据接口和相关的协议读取代码,或者从程序存储器中读取代码,然后将代码写入 ( 编程 ) 到 Flash 存储器中 如 AVR 的 ATmega128,就具备引导加载支持的用户程序自编程功能 ( In Sysytem Programming by On chipBoot Program) ,它提供
5、了一个真正由 MCU 本身自动下载和更新 ( 采用读 /写同时“ Read While Write”进行的方式 ) 程序代码的系统程序自编程更新的机制,实现系统程序的远程自动 更新 2 固件更新系统设计原理 利用 ATmega 系列芯片提供的 BootLoader 功能,且其 Bootloader 具有可编程的 Boot 空间大小、可保密性以及可编程的复位中断向量等特性,具有下载更新 FLASH 的自编程能力,允许应用程序通过 MCU 本身的 Flash BootLoader 编程更新程序,同时还可以通过任何可以用到的数据接口和协议来读写 FLASH 3 另外,为防止其它串口通信干扰或者蓄意破
6、坏软件,设计中加入了下载前需要密码验证的方案 根据以上嵌入式产品的特点及芯片系列本身 的特色,此固件更新系统能提供更方便快捷的更新方法 设计系统可分为上位机 ( CtrlPlatform) 、目标机 ( DestPlatform) 、和通信协议 ( Protocol) 三部分,数据接口设计选择以串口为基础,主要因为 CtrlPlatfrom 是 PC,而 PC 有串口、USB、并口等,串口是比较普遍的一种接口 其中上位机主要任务包括 : 1) 将待下载更新文件 ( File) 分解成独立的数据块 2) 再根据 Protocol 将数据块加上帧头和帧尾,封装成完整的数据帧 http:/ 3) 根
7、据 Protocol 完成数据收发、收发超时处理、 DestPlatform 状态信息判断等 目标机主要任务包括 : 1) 将 CtrlPlatform 分发下来的数据帧进行解封装,提取出有用的控制信息和数据 2) 根据控制信息完成相应的操作,包括读写 FLASH、重启等 通信协议主要包括 : 命令格式、下行命令和上行命令,具体见表 1 3 其中“ ”表示此处不需要任何数据,“ x”表示此处需要数据,但是数据长度及具体数据是由实际命令决定的 根据上述功能和任务, IAP 固件更新系统框架如图 1 所示 3 固件更新系统设计与实现 3 1 系统硬件电路设计 所设计的固件更新系统连线简单,上位机和
8、目标机只需要三根线即地线 ( GND) 、串口接收和发送线 ( RX、 TX) 便可以工作 4,如图 2 所示 http:/ 3 2 系统软件设计 在系统正常通信条件下 ( 若不正常通信,则会进入相应错误处理 ) ,系统软件工作框图如图 3 所示 5 主要工作流程分为以下几个步骤 1) 数据打包 上位机将待下载文件切分成 n 个数据块,并将每个数据块加上帧格式处理,打包封装成如上所述的下行命令中相关特定格式的数据,如开始 下载命令 Download_CMD 格式,密码命令 Password_CMD 格式,下载完成命令 Complete_CMD 格式,跳转到主程序处运行命令 Go_CMD 格式
9、2) 上位机工作 首先,发出 Download_CMD 命令,等待通信反馈,正常则进入下一步 ; 其次,发出密码命令,等待通信反馈,密码正确则进入下一步 ; 然后,将 Data_CMD 格式的数据包通过 Usart 串口按照顺序一帧帧发送出去,并同时进行通信超时等待处理、 DestPlat-form 状态信息反馈处理等 ; 最后,所有数据发送 完成后,发送 Complete_CMD 命令 3) 目标机工作 目标机在上电之后 10s 内,运行在 Bootload 状态 ; 10s 后,自动跳转到主函数处运行 运行在 Boot-load 状态时,对接收到的各种命令进行解析和处理如 : 接收到 Da
10、ta_CMD 命令时,取出有效的数据 ( 包括编程地址,编程数据,数据检验等 ) ,然后根据编程地址字节进行编程 4 结 语 利用 ATmega 系列芯片提供的 BootLoader 具有下载更新 FLASH 的自编程能力,设计了工业现场单片机固件自动更新系 统,试验证明效果良好 这种嵌入式设备固件远程更新的方法在信息化技术发达的时代,可以使设备的维护简捷、方便,同时可以有效地降低生产成本 参考文献 1 马 潮 AVR 单片机嵌入式系统原理与应用实践 M 北京 : 北京航空航天大学出版社, 2011 http:/ 2 王卉玲,劳汉生 嵌入式系统远程固件更新功能的设计与实现 J IT 与网络,2010( 4) : 47 49 3 朱子晟,张 峰 工控单片机固件自动升级系统的设计与实现 J 电工技术,2008( 12) : 50 52 4 赵 炯,贾培源,李中山,等 嵌入式设备远程在线升级技术 J 计算机工程,2010, 36( 12) : 262 264 5 刘海成 AVR 单片机原理及测控工程应用 M 北京 :北京航空航天大学出版社,2008