摘 要: 介紹了基于IAP技術(shù)的單片機(jī)程序升級方法在血液分析儀中的應(yīng)用。首先設(shè)計了由C8051F020單片機(jī)與基于PC的上位機(jī)組成的升級系統(tǒng),并以該系統(tǒng)為例介紹了血液分析儀中單片機(jī)應(yīng)用程序升級的基本原理以及升級系統(tǒng)的設(shè)計,升級系統(tǒng)設(shè)計主要包括單片機(jī)存儲器的分區(qū)設(shè)計、bootloader程序的設(shè)計以及基于MFC的上位機(jī)軟件的設(shè)計。經(jīng)過實(shí)驗驗證,該系統(tǒng)能夠?qū)崿F(xiàn)單片機(jī)的程序升級功能。
關(guān)鍵詞: 血液分析儀;單片機(jī);IAP;升級系統(tǒng)
0 引言
血液分析儀[1]又稱血細(xì)胞分析儀,是目前國內(nèi)外醫(yī)學(xué)檢驗最常使用的儀器之一,通常由控制系統(tǒng)、血細(xì)胞識別系統(tǒng)、液路驅(qū)動系統(tǒng)、電源系統(tǒng)以及機(jī)械系統(tǒng)等部分組成。其中以單片機(jī)為核心器件的控制系統(tǒng)是其關(guān)鍵組成部分,其性能的優(yōu)劣決定著血液分析儀內(nèi)部系統(tǒng)能否較好地協(xié)調(diào)運(yùn)行,影響著血液分析儀的整體性能。為了更好地應(yīng)對市場的變化以及客戶的需求,血液分析儀生產(chǎn)商需要不斷引入新的技術(shù)對產(chǎn)品進(jìn)行升級,即對儀器內(nèi)部核心器件的程序進(jìn)行替換,最終達(dá)到提升儀器整體性能的目的。但是目前沒有專門應(yīng)用于血液分析儀中單片機(jī)升級的方法,大多數(shù)采用工程師現(xiàn)場升級的方式,然而這種方式的升級成本較高且耗時長,尤其是對于偏遠(yuǎn)的地區(qū),客戶的升級需求很難及時得到滿足。本文介紹一種基于在應(yīng)用編程IAP(In Application Programming)技術(shù)的程序升級方法在血液分析儀單片機(jī)中的應(yīng)用。首先介紹血液分析儀中單片機(jī)應(yīng)用程序升級原理,然后分三部分介紹升級系統(tǒng)的設(shè)計,包括Flash分區(qū)的設(shè)計、bootloader設(shè)計以及上位機(jī)軟件設(shè)計。
1 血液分析儀中單片機(jī)程序升級原理
IAP編程技術(shù)是應(yīng)用在Flash程序存儲器的一種編程模式,即在某段程序的控制下完成對Flash的讀/寫操作,可以控制對某段、某頁,甚至某個字節(jié)的讀寫操作[2]。因此通常需要首先將單片機(jī)Flash存儲器進(jìn)行分區(qū)操作,進(jìn)而實(shí)現(xiàn)利用一部分代碼對另一部分代碼進(jìn)行升級的功能[3]。本文針對血液分析儀中單片機(jī)的存儲器分區(qū)設(shè)計將在2.1節(jié)中介紹。
基于上述原理設(shè)計了血液分析儀中單片機(jī)的升級系統(tǒng),該系統(tǒng)主要由PC和單片機(jī)兩部分構(gòu)成,系統(tǒng)結(jié)構(gòu)圖如圖1所示。本系統(tǒng)采用的血液分析儀中的單片機(jī)為Silicon Laboratories公司的C8051F020型號,具有64 KB大容量Flash存儲器并且支持IAP功能。
系統(tǒng)工作原理如下:
單片機(jī)(下位機(jī))部分:首先編寫能對單片機(jī)中用戶原始程序更新替換的bootloader[4]程序并通過JTAG端口燒寫在單片機(jī)Flash中的bootloader存儲區(qū),然后當(dāng)單片機(jī)復(fù)位時便進(jìn)入bootloader程序中并進(jìn)行升級判斷,如果接收到PC發(fā)來的升級指令,則對Flash中用戶程序區(qū)進(jìn)行擦除、讀寫操作,完成后運(yùn)行新的用戶程序;如果在等待一段時間后仍無升級指令,則直接跳轉(zhuǎn)到用戶原有程序運(yùn)行。
PC(上位機(jī))部分:單片機(jī)串行口連接到PC的RS232口進(jìn)行通信[5]。PC首先通過網(wǎng)絡(luò)或者其他途徑從血液分析儀生產(chǎn)商處獲取升級程序(二進(jìn)制文件形式)并保存在硬盤中,本文采用網(wǎng)絡(luò)方式從儀器生產(chǎn)商網(wǎng)站上下載升級程序,然后運(yùn)行編寫好的基于微軟基礎(chǔ)類庫(Microsoft Foundation Classes,MFC)的上位機(jī)軟件[5],將指令和升級文件發(fā)送給單片機(jī)。有關(guān)上位機(jī)軟件的設(shè)計將在2.3節(jié)中介紹。
2 系統(tǒng)設(shè)計
2.1 Flash分區(qū)設(shè)置
基于上述IAP技術(shù)的原理,首先將C8051F020單片機(jī)的Flash存儲器做如圖2所示的分區(qū)。其中,0x0000 ~0x0002這3 B存儲bootloader的入口地址;0x0003~0x7803的30 KB為用戶程序存儲區(qū);0x7804~0x7A01范圍為預(yù)留部分;0x7A02~0xF201的30 KB是用戶程序備份區(qū);剩余的地址空間0xF202~0xFDFF則用于bootloader程序的存儲。分區(qū)中0x7804~0x7A01范圍為預(yù)留部分,其設(shè)計原理將在2.2節(jié)介紹。
由于單片機(jī)在復(fù)位后總是從0x0000地址開始執(zhí)行跳轉(zhuǎn)語句,所以設(shè)計將bootloader首地址存放在前3個字節(jié)中,這樣復(fù)位后可以直接進(jìn)入bootloader程序。方法為在使用Keil軟件下載程序之前進(jìn)行如圖3所示的設(shè)置,在Code欄加入“?C_C51STARTUP(F202H)”實(shí)現(xiàn)跳轉(zhuǎn),并將Code Range改為0xF202-0xFDFF,即將該bootloader程序燒寫在0xF202~0xFDFF區(qū)域。
另外,出于安全性考慮[2],在分區(qū)時設(shè)計了用戶程序備份區(qū)[6],在擦除用戶程序之前先將程序?qū)懭朐搮^(qū)域即完成備份工作。新的用戶程序在寫入的過程中可能會發(fā)生錯誤,此時系統(tǒng)會進(jìn)入死機(jī)或死循環(huán)狀態(tài),bootloader程序中有開啟看門狗的語句,在看門狗中設(shè)置計數(shù)變量,初值為零,每次系統(tǒng)死機(jī)后再次復(fù)位便進(jìn)入看門狗,變量值加一,重新運(yùn)行之后又由于相同的原因復(fù)位,即發(fā)生頻繁復(fù)位現(xiàn)象。若變量的值大于限定的復(fù)位次數(shù)則進(jìn)入備份區(qū),執(zhí)行備份程序,防止因頻繁復(fù)位造成系統(tǒng)崩潰。
2.2 bootloader程序設(shè)計
bootloader程序通常由初始化程序、監(jiān)測程序、升級服務(wù)程序以及跳轉(zhuǎn)指令組成,來實(shí)現(xiàn)bootloader程序正常的引導(dǎo)加載功能[4]。
初始化程序包括時鐘和通信接口(串口)的初始化和開啟看門狗等部分。監(jiān)測程序主要是檢測上位機(jī)發(fā)送的升級指令,在和上位機(jī)建立通信之后等待一段時間,若收到升級指令,則進(jìn)入升級服務(wù)程序部分;若沒有,則跳轉(zhuǎn)至用戶程序。升級服務(wù)程序由數(shù)據(jù)接收、Flash擦除、讀寫和頻繁復(fù)位檢測等部分組成。當(dāng)收到上位機(jī)發(fā)送的升級指令后,先備份bootloader入口地址,再備份用戶程序,然后擦除用戶程序區(qū)。擦除過程中要注意由于64 KB的Flash存儲器是以512 B的扇區(qū)為單位組織的,一次擦除操作將擦除整個扇區(qū),所以在2.1節(jié)中設(shè)置用戶程序區(qū)結(jié)束地址0x7803時,由于其所在扇區(qū)即0x7800~0x7A00將均被擦除,故要預(yù)留出0x7804~0x7A01的空間,將用戶程序區(qū)和備份區(qū)隔離開以防將備份區(qū)程序擦除。同理,用戶程序區(qū)首地址0x0003所在扇區(qū)包含0x0000~0x0002,即bootloader入口地址也會被擦除,故擦除用戶程序完成后要將入口地址回寫。用戶程序擦除完成后先保存升級程序大小記為L,然后從0x0003開始寫入從串口接收到的L個字節(jié)的二進(jìn)制程序數(shù)據(jù)。在寫入的同時進(jìn)行頻繁復(fù)位檢測,如果復(fù)位次數(shù)超過設(shè)定值,則說明接收到的數(shù)據(jù)出錯,向上位機(jī)發(fā)送代表升級失敗的字符‘F’,并跳轉(zhuǎn)到備份區(qū)執(zhí)行;如果升級程序?qū)懭胪瓿蓻]有發(fā)生頻繁復(fù)位現(xiàn)象,則說明升級成功,向上位機(jī)發(fā)送字符‘S’,并跳轉(zhuǎn)到升級后的用戶程序區(qū)執(zhí)行。具體流程圖如圖4所示。
2.3 上位機(jī)軟件設(shè)計
本系統(tǒng)所述PC上運(yùn)行的上位機(jī)軟件主要用于和單片機(jī)之間進(jìn)行通信,該軟件基于MFC通過拖取相應(yīng)控件并編程來完成,調(diào)用了串口控件來實(shí)現(xiàn)串口通信。
具體工作過程為:在運(yùn)行軟件之前首先將升級文件保存在MFC工程所在文件夾中。然后開啟軟件界面,點(diǎn)擊“發(fā)送升級指令”按鈕,發(fā)送一個升級指令字符。若成功打開串口且單片機(jī)接收到該升級指令,則上位機(jī)會接收到單片機(jī)發(fā)送的表示擦除完成的字符,并顯示于接收狀態(tài)框;若等待較長時間仍沒有收到升級指令,則再次點(diǎn)擊發(fā)送按鈕,直到通信成功。之后點(diǎn)擊按鈕“獲取文件大小并發(fā)送”,程序?qū)⒄{(diào)用getlength( )函數(shù)獲取到工程文件夾中二進(jìn)制文件的大?。ㄗ止?jié)數(shù)),并發(fā)送給單片機(jī)。單片機(jī)接收到之后返回一個確認(rèn)字符,上位機(jī)通過串口接收到后顯示在接收狀態(tài)框。若較長時間未收到確認(rèn)字符,則再次發(fā)送文件大小直到接收到確認(rèn)為止。成功接收到后,點(diǎn)擊“發(fā)送升級文件”按鈕發(fā)送二進(jìn)制升級文件。如果收到單片機(jī)回復(fù)的字符‘S’,則說明寫入成功,并在升級結(jié)果狀態(tài)框顯示“升級成功”字樣;如果收到字符‘F’,則說明發(fā)生頻繁復(fù)位現(xiàn)象,在狀態(tài)框顯示“升級失敗”字樣。具體流程圖如圖5所示,單片機(jī)和PC之間的通信過程如圖6所示。
3 結(jié)論
采用基于IAP技術(shù)的單片機(jī)程序升級方法,設(shè)計了應(yīng)用于血液分析儀的C8051F020型號單片機(jī)的程序升級系統(tǒng),成功地對血液分析儀中單片機(jī)的應(yīng)用程序進(jìn)行了更新替換,并且新的應(yīng)用程序能夠正常運(yùn)行。該方法具備一定的有效性和可靠性,能夠克服血液分析儀中單片機(jī)現(xiàn)存升級方法的不足,節(jié)約了資源和成本。并且該方法不僅適用于C8051F020單片機(jī),對于不同血液分析儀中其他型號的單片機(jī)同樣適用,只需要對其Flash分區(qū)和bootloader中的地址稍作調(diào)整即可,具有應(yīng)用價值。
參考文獻(xiàn)
[1] 游世梅. 血液分析儀的現(xiàn)狀與發(fā)展趨勢分析[J]. 中國高新技術(shù)企業(yè), 2013(9):83-84.
[2] 田日才, 王國鵬, 梁學(xué)東. ATMEGA128 單片機(jī)的軟件遠(yuǎn)程升級[J]. 電子技術(shù)應(yīng)用, 2003,29(11): 23-25.
[3] 劉根賢, 龔雪容, 生擁宏, 等. 基于高頻 RFID 的微處理器 IAP 技術(shù)[J]. 電子技術(shù)應(yīng)用, 2013,39(4):29-31.
[4] 劉云龍, 張偉霞. 基于 C8051F34x 單片機(jī)的 USB Bootloader 設(shè)計[J]. 微型機(jī)與應(yīng)用, 2012,30(23):56-59.
[5] 韋曉茹, 蔡志堅, 居戩之. AVR 單片機(jī) ATmega16 與計算機(jī)串行通信的實(shí)現(xiàn)[J]. 微型機(jī)與應(yīng)用, 2012,31(14):30-33.
[6] 生鳳中, 荊雷, 李建業(yè). 基于 CC1110 單片機(jī)的無線升級方法研究[J]. 電子技術(shù)應(yīng)用, 2012,38(11):139-142.