《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 单片机IAP升级方法在血液分析仪中的应用
单片机IAP升级方法在血液分析仪中的应用
2014年微型机与应用第21期
李婉婉,李 宏
宁波大学 信息科学与工程学院,浙江 宁波 315020
摘要: 介绍了基于IAP技术的单片机程序升级方法在血液分析仪中的应用。首先设计了由C8051F020单片机与基于PC的上位机组成的升级系统,并以该系统为例介绍了血液分析仪中单片机应用程序升级的基本原理以及升级系统的设计,升级系统设计主要包括单片机存储器的分区设计、bootloader程序的设计以及基于MFC的上位机软件的设计。经过实验验证,该系统能够实现单片机的程序升级功能。
Abstract:
Key words :

  摘 要: 介绍了基于IAP技术的单片机程序升级方法在血液分析仪中的应用。首先设计了由C8051F020单片机与基于PC的上位机组成的升级系统,并以该系统为例介绍了血液分析仪中单片机应用程序升级的基本原理以及升级系统的设计,升级系统设计主要包括单片机存储器的分区设计、bootloader程序的设计以及基于MFC的上位机软件的设计。经过实验验证,该系统能够实现单片机的程序升级功能。

  关键词: 血液分析仪;单片机;IAP;升级系统

0 引言

  血液分析仪[1]又称血细胞分析仪,是目前国内外医学检验最常使用的仪器之一,通常由控制系统、血细胞识别系统、液路驱动系统、电源系统以及机械系统等部分组成。其中以单片机为核心器件的控制系统是其关键组成部分,其性能的优劣决定着血液分析仪内部系统能否较好地协调运行,影响着血液分析仪的整体性能。为了更好地应对市场的变化以及客户的需求,血液分析仪生产商需要不断引入新的技术对产品进行升级,即对仪器内部核心器件的程序进行替换,最终达到提升仪器整体性能的目的。但是目前没有专门应用于血液分析仪中单片机升级的方法,大多数采用工程师现场升级的方式,然而这种方式的升级成本较高且耗时长,尤其是对于偏远的地区,客户的升级需求很难及时得到满足。本文介绍一种基于在应用编程IAP(In Application Programming)技术的程序升级方法在血液分析仪单片机中的应用。首先介绍血液分析仪中单片机应用程序升级原理,然后分三部分介绍升级系统的设计,包括Flash分区的设计、bootloader设计以及上位机软件设计。

1 血液分析仪中单片机程序升级原理

  IAP编程技术是应用在Flash程序存储器的一种编程模式,即在某段程序的控制下完成对Flash的读/写操作,可以控制对某段、某页,甚至某个字节的读写操作[2]。因此通常需要首先将单片机Flash存储器进行分区操作,进而实现利用一部分代码对另一部分代码进行升级的功能[3]。本文针对血液分析仪中单片机的存储器分区设计将在2.1节中介绍。

001.jpg

  基于上述原理设计了血液分析仪中单片机的升级系统,该系统主要由PC和单片机两部分构成,系统结构图如图1所示。本系统采用的血液分析仪中的单片机为Silicon Laboratories公司的C8051F020型号,具有64 KB大容量Flash存储器并且支持IAP功能。

  系统工作原理如下:

  单片机(下位机)部分:首先编写能对单片机中用户原始程序更新替换的bootloader[4]程序并通过JTAG端口烧写在单片机Flash中的bootloader存储区,然后当单片机复位时便进入bootloader程序中并进行升级判断,如果接收到PC发来的升级指令,则对Flash中用户程序区进行擦除、读写操作,完成后运行新的用户程序;如果在等待一段时间后仍无升级指令,则直接跳转到用户原有程序运行。

  PC(上位机)部分:单片机串行口连接到PC的RS232口进行通信[5]。PC首先通过网络或者其他途径从血液分析仪生产商处获取升级程序(二进制文件形式)并保存在硬盘中,本文采用网络方式从仪器生产商网站上下载升级程序,然后运行编写好的基于微软基础类库(Microsoft Foundation Classes,MFC)的上位机软件[5],将指令和升级文件发送给单片机。有关上位机软件的设计将在2.3节中介绍。

2 系统设计

  2.1 Flash分区设置


002.jpg

  基于上述IAP技术的原理,首先将C8051F020单片机的Flash存储器做如图2所示的分区。其中,0x0000 ~0x0002这3 B存储bootloader的入口地址;0x0003~0x7803的30 KB为用户程序存储区;0x7804~0x7A01范围为预留部分;0x7A02~0xF201的30 KB是用户程序备份区;剩余的地址空间0xF202~0xFDFF则用于bootloader程序的存储。分区中0x7804~0x7A01范围为预留部分,其设计原理将在2.2节介绍。

003.jpg

  由于单片机在复位后总是从0x0000地址开始执行跳转语句,所以设计将bootloader首地址存放在前3个字节中,这样复位后可以直接进入bootloader程序。方法为在使用Keil软件下载程序之前进行如图3所示的设置,在Code栏加入“?C_C51STARTUP(F202H)”实现跳转,并将Code Range改为0xF202-0xFDFF,即将该bootloader程序烧写在0xF202~0xFDFF区域。

  另外,出于安全性考虑[2],在分区时设计了用户程序备份区[6],在擦除用户程序之前先将程序写入该区域即完成备份工作。新的用户程序在写入的过程中可能会发生错误,此时系统会进入死机或死循环状态,bootloader程序中有开启看门狗的语句,在看门狗中设置计数变量,初值为零,每次系统死机后再次复位便进入看门狗,变量值加一,重新运行之后又由于相同的原因复位,即发生频繁复位现象。若变量的值大于限定的复位次数则进入备份区,执行备份程序,防止因频繁复位造成系统崩溃。

  2.2 bootloader程序设计

  bootloader程序通常由初始化程序、监测程序、升级服务程序以及跳转指令组成,来实现bootloader程序正常的引导加载功能[4]。

  初始化程序包括时钟和通信接口(串口)的初始化和开启看门狗等部分。监测程序主要是检测上位机发送的升级指令,在和上位机建立通信之后等待一段时间,若收到升级指令,则进入升级服务程序部分;若没有,则跳转至用户程序。升级服务程序由数据接收、Flash擦除、读写和频繁复位检测等部分组成。当收到上位机发送的升级指令后,先备份bootloader入口地址,再备份用户程序,然后擦除用户程序区。擦除过程中要注意由于64 KB的Flash存储器是以512 B的扇区为单位组织的,一次擦除操作将擦除整个扇区,所以在2.1节中设置用户程序区结束地址0x7803时,由于其所在扇区即0x7800~0x7A00将均被擦除,故要预留出0x7804~0x7A01的空间,将用户程序区和备份区隔离开以防将备份区程序擦除。同理,用户程序区首地址0x0003所在扇区包含0x0000~0x0002,即bootloader入口地址也会被擦除,故擦除用户程序完成后要将入口地址回写。用户程序擦除完成后先保存升级程序大小记为L,然后从0x0003开始写入从串口接收到的L个字节的二进制程序数据。在写入的同时进行频繁复位检测,如果复位次数超过设定值,则说明接收到的数据出错,向上位机发送代表升级失败的字符‘F’,并跳转到备份区执行;如果升级程序写入完成没有发生频繁复位现象,则说明升级成功,向上位机发送字符‘S’,并跳转到升级后的用户程序区执行。具体流程图如图4所示。

004.jpg

  2.3 上位机软件设计

  本系统所述PC上运行的上位机软件主要用于和单片机之间进行通信,该软件基于MFC通过拖取相应控件并编程来完成,调用了串口控件来实现串口通信。

005.jpg

  具体工作过程为:在运行软件之前首先将升级文件保存在MFC工程所在文件夹中。然后开启软件界面,点击“发送升级指令”按钮,发送一个升级指令字符。若成功打开串口且单片机接收到该升级指令,则上位机会接收到单片机发送的表示擦除完成的字符,并显示于接收状态框;若等待较长时间仍没有收到升级指令,则再次点击发送按钮,直到通信成功。之后点击按钮“获取文件大小并发送”,程序将调用getlength( )函数获取到工程文件夹中二进制文件的大小(字节数),并发送给单片机。单片机接收到之后返回一个确认字符,上位机通过串口接收到后显示在接收状态框。若较长时间未收到确认字符,则再次发送文件大小直到接收到确认为止。成功接收到后,点击“发送升级文件”按钮发送二进制升级文件。如果收到单片机回复的字符‘S’,则说明写入成功,并在升级结果状态框显示“升级成功”字样;如果收到字符‘F’,则说明发生频繁复位现象,在状态框显示“升级失败”字样。具体流程图如图5所示,单片机和PC之间的通信过程如图6所示。

006.jpg

3 结论

  采用基于IAP技术的单片机程序升级方法,设计了应用于血液分析仪的C8051F020型号单片机的程序升级系统,成功地对血液分析仪中单片机的应用程序进行了更新替换,并且新的应用程序能够正常运行。该方法具备一定的有效性和可靠性,能够克服血液分析仪中单片机现存升级方法的不足,节约了资源和成本。并且该方法不仅适用于C8051F020单片机,对于不同血液分析仪中其他型号的单片机同样适用,只需要对其Flash分区和bootloader中的地址稍作调整即可,具有应用价值。

  参考文献

  [1] 游世梅. 血液分析仪的现状与发展趋势分析[J]. 中国高新技术企业, 2013(9):83-84.

  [2] 田日才, 王国鹏, 梁学东. ATMEGA128 单片机的软件远程升级[J]. 电子技术应用, 2003,29(11): 23-25.

  [3] 刘根贤, 龚雪容, 生拥宏, 等. 基于高频 RFID 的微处理器 IAP 技术[J]. 电子技术应用, 2013,39(4):29-31.

  [4] 刘云龙, 张伟霞. 基于 C8051F34x 单片机的 USB Bootloader 设计[J]. 微型机与应用, 2012,30(23):56-59.

  [5] 韦晓茹, 蔡志坚, 居戬之. AVR 单片机 ATmega16 与计算机串行通信的实现[J]. 微型机与应用, 2012,31(14):30-33.

  [6] 生凤中, 荆雷, 李建业. 基于 CC1110 单片机的无线升级方法研究[J]. 电子技术应用, 2012,38(11):139-142.


此内容为AET网站原创,未经授权禁止转载。