檀朝新,張楊,馬柱,徐鈞,梅彬
安徽養(yǎng)和醫(yī)療器械設(shè)備有限公司,桐城市,231400
為了更好地應(yīng)對(duì)市場(chǎng)的變化以及客戶(hù)的需求,醫(yī)療設(shè)備需要不斷引入新的技術(shù)對(duì)產(chǎn)品進(jìn)行固件升級(jí),即對(duì)儀器內(nèi)部主控芯片的程序(下位機(jī)程序)進(jìn)行替換,最終達(dá)到提升儀器整體性能的目的。而目前我們采用的更新儀器下位機(jī)程序的方法有兩種:一種是工程師到現(xiàn)場(chǎng)拆開(kāi)儀器,使用程序下載器進(jìn)行升級(jí),另一種是將待升級(jí)的儀器寄回公司本部由市場(chǎng)服務(wù)部人員進(jìn)行拆機(jī)升級(jí)。
由于醫(yī)療設(shè)備在市場(chǎng)上分布是與醫(yī)院的分布相關(guān)的,因此醫(yī)療設(shè)備分布與全國(guó)各個(gè)省市自治區(qū)的情況相關(guān),比較分散很難集中處理。如果采用傳統(tǒng)的升級(jí)下位機(jī)程序的方式對(duì)醫(yī)療設(shè)備進(jìn)行升級(jí),升級(jí)的效率將很低,不可能在短時(shí)間內(nèi)完成,并且還需要花費(fèi)大量的差旅費(fèi)、郵寄費(fèi)以及人工費(fèi)。本項(xiàng)目通過(guò)STM32平臺(tái)的IAP技術(shù)和互聯(lián)網(wǎng)通信技術(shù)完成一個(gè)固件更新系統(tǒng)方案,解決傳統(tǒng)升級(jí)下位機(jī)程序方式中效率低下成本高昂等問(wèn)題,提高下位機(jī)程序升級(jí)維護(hù)的便攜性。
ISP(In System Programming)在系統(tǒng)編程、固件燒寫(xiě)原理與JTAG燒寫(xiě)相同,接口更簡(jiǎn)單,只需要通過(guò)RS232串口就能完成燒寫(xiě),RS232串口是在醫(yī)療設(shè)備中常用的接口。根據(jù)STM32的啟動(dòng)模式如表1所示,當(dāng)Boot0=1與Boot1=0時(shí),啟動(dòng)模式為系統(tǒng)存儲(chǔ)器即開(kāi)啟ISP模式,我們使用串口就能進(jìn)行程序燒寫(xiě)。這種模式是由STM32廠家在芯片出廠前在特定區(qū)域設(shè)置了一段Bootloader程序,通過(guò)這段程序?qū)⒋诮邮盏某绦驍?shù)據(jù)燒寫(xiě)到芯片的主閃存存儲(chǔ)器[1]。
表1 啟動(dòng)模式Tab.1 Start mode
ISP燒寫(xiě)的缺點(diǎn)是需要硬件觸發(fā),需要硬件電路將Boot0與Boot1腳進(jìn)行設(shè)置才能進(jìn)入ISP模式,這種觸發(fā)方式不適合在儀器外部設(shè)置,因此不適合遠(yuǎn)程固件升級(jí)。
IAP(In Application Programming)在應(yīng)用編程,即應(yīng)用程序自己對(duì)自己進(jìn)行燒寫(xiě),編寫(xiě)專(zhuān)用的固件燒寫(xiě)程序,通過(guò)RS232串口進(jìn)行程序燒寫(xiě)。與ISP模式相比IAP模式可以自定義固件升級(jí)模式的觸發(fā)方式,因此IAP模式可以自定義適合遠(yuǎn)程升級(jí)的觸發(fā)方式。IAP固件升級(jí)程序需要由軟件工程師編寫(xiě),升級(jí)方式很自由可根據(jù)自身情況進(jìn)行設(shè)計(jì)。IAP固件升級(jí)過(guò)程,如圖1所示。
圖1 IAP固件升級(jí)過(guò)程Fig.1 IAP firmware upgrade process
將最新固件上傳到公司服務(wù)器,通過(guò)互聯(lián)網(wǎng)將固件版本信息與儀器本身固件進(jìn)行對(duì)比,判斷是否更新升級(jí)固件,如果需要更新固件,使用PC機(jī)將固件程序通過(guò)串口連接線(xiàn)發(fā)送到儀器,儀器利用IAP技術(shù)燒寫(xiě)新的固件。儀器固件遠(yuǎn)程升級(jí)方案示意圖,如圖2所示。
2.2.1 程序地址分配
圖2 儀器固件遠(yuǎn)程升級(jí)方案示意圖Fig.2 Schematic diagram of remote firmware upgrade of instrument firmware
首先對(duì)STM32微控制器的閃存(Flash)進(jìn)行程序地址分配,分為兩個(gè)區(qū)域,一個(gè)Flash區(qū)域存儲(chǔ)IAP升級(jí)程序,另一個(gè)存儲(chǔ)用戶(hù)程序。STM32微控制器Flash起始地址為0x8000000,IAP升級(jí)程序功能單一,程序較小一般不超過(guò)10 kB,因此將IAP升級(jí)程序的地址區(qū)域分配為0x8000000~0x8002FFF,12 kB存儲(chǔ)空間。用戶(hù)程序存儲(chǔ)地址則從0x8003000開(kāi)始,如圖3所示。不同的設(shè)備用戶(hù)程序大小差別較大,可根據(jù)芯片STM32微控制器Flash大小確定用戶(hù)程序的結(jié)束地址[2]。
圖3 Flash地址分配Fig.3 Flash address allocation
2.2.2 改進(jìn)IAP固件更新過(guò)程
為了使升級(jí)過(guò)程變的更加的順暢快捷,盡量減少人工操作,我們需要對(duì)IAP程序運(yùn)行過(guò)程進(jìn)行改進(jìn),我們采用發(fā)送串口指令的方式觸發(fā)儀器進(jìn)入IAP升級(jí)模式,這樣整個(gè)升級(jí)過(guò)程在儀器終端不需要人為進(jìn)行任何操作。改進(jìn)后的IAP升級(jí)過(guò)程如圖4所示,在正常情況下儀器都是運(yùn)行用戶(hù)程序,如果需要升級(jí)就必須在用戶(hù)程序中接收從PC端發(fā)來(lái)的升級(jí)指令,并將升級(jí)指令作為參數(shù)存儲(chǔ)在存儲(chǔ)芯片中,然后啟動(dòng)軟件復(fù)位,使儀器復(fù)位進(jìn)入IAP程序,IAP程序啟動(dòng)后開(kāi)始讀取存儲(chǔ)芯片中的是否有升級(jí)參數(shù),有升級(jí)參數(shù)將進(jìn)入升級(jí)模式,沒(méi)有就會(huì)跳轉(zhuǎn)到用戶(hù)程序。
圖4 改進(jìn)后的IAP固件更新過(guò)程Fig.4 Improved IAP firmware upgrade process
2.2.3 IAP關(guān)鍵過(guò)程程序
(1)接收固件后燒寫(xiě)程序[3]
儀器固件更新需要借助PC機(jī)與公司服務(wù)器通過(guò)Internet網(wǎng)絡(luò)連接,PC機(jī)端需要上位機(jī)程序用于從公司服務(wù)器獲取固件。使用Internet 網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程傳輸固件程序,具有傳輸速度快(10/100 Mb/s),使用標(biāo)準(zhǔn)應(yīng)用層協(xié)議(如FTP、HTTP、TFTP 等)進(jìn)行傳輸,可以遠(yuǎn)距離操作(LAN、WLAN)等優(yōu)點(diǎn)。
上位機(jī)與下位機(jī)之間使用Ymodem協(xié)議進(jìn)行固件傳輸,Ymodem協(xié)議具有完善的握手機(jī)制和出錯(cuò)管理機(jī)制,確保更新的固件數(shù)據(jù)準(zhǔn)確完整。
Ymodem協(xié)議一次可傳輸1 024字節(jié)數(shù)據(jù),為了保證數(shù)據(jù)的正確性,數(shù)據(jù)傳輸增加CRC檢驗(yàn)功能。為了保證數(shù)據(jù)的完整性,Ymodem協(xié)議制定了完善的握手機(jī)制,每進(jìn)行一次數(shù)據(jù)塊傳輸,就會(huì)有相應(yīng)的應(yīng)答信號(hào),接收到應(yīng)答信號(hào)后,才會(huì)繼續(xù)傳輸下一個(gè)數(shù)據(jù)塊[5]。
(1)起始幀的數(shù)據(jù)格式
YModem的起始幀主要傳輸文件名與文件大小等信息,起始幀幀長(zhǎng)為33字節(jié)(3字節(jié)數(shù)據(jù)首部、128字節(jié)數(shù)據(jù)、2字節(jié)CRC16校驗(yàn)碼)。它的數(shù)據(jù)幀結(jié)構(gòu)如下:
其中CRCH與CRCL分別為CRC檢驗(yàn)值的高8位與低8位,而SOH=1表示為初始幀,初始幀只有128個(gè)字節(jié)數(shù)據(jù)。
(2)數(shù)據(jù)幀的數(shù)據(jù)格式
YModem的數(shù)據(jù)幀主要用于傳輸1024字節(jié)數(shù)據(jù):
其中CRCH與CRCL分別為CRC16檢驗(yàn)碼的高8位與低8位,而STX=2表示這個(gè)數(shù)據(jù)幀為數(shù)據(jù)幀,數(shù)據(jù)幀一次可傳輸1 024個(gè)字節(jié)數(shù)據(jù)。
(3)結(jié)束幀的數(shù)據(jù)格式
YModem的結(jié)束幀數(shù)據(jù)與起始幀類(lèi)似,以SOH開(kāi)始,后面?zhèn)鬏?28字節(jié)數(shù)據(jù)(都為0)和CRC校驗(yàn)碼:
(4)Ymodem數(shù)據(jù)傳輸握手機(jī)制
Ymodem數(shù)據(jù)傳輸握手機(jī)制,如圖5所示。
圖5 Ymodem數(shù)據(jù)傳輸握手機(jī)制Fig.5 Ymodem data transmission handshake mechanism
現(xiàn)將遠(yuǎn)程固件升級(jí)系統(tǒng)應(yīng)用于YH01A型液體閃爍計(jì)數(shù)儀上進(jìn)行實(shí)際效果測(cè)試。該型儀器是用于C14呼氣試驗(yàn)的醫(yī)療設(shè)備,使用PC機(jī)進(jìn)行操控,借助PC機(jī)使儀器與互聯(lián)網(wǎng)連接,從而可使固件數(shù)據(jù)從公司服務(wù)器傳送到儀器端,最終實(shí)現(xiàn)固件更新升級(jí)。將待升級(jí)儀器與PC機(jī)通過(guò)USB數(shù)據(jù)線(xiàn)連接,在PC機(jī)上運(yùn)行固件升級(jí)工具,如果與儀器連接成功將在信息欄顯示“等待文件發(fā)送.......(按字母 'a' 停止當(dāng)前操作):CCCCC”。與儀器連接成功后點(diǎn)擊“瀏覽”鍵選擇要需要更新的固件,最后點(diǎn)擊“程序下載”鍵開(kāi)始更新固件,代碼更新成功后顯示“代碼更新成功”并顯示文件名稱(chēng)和文件大小[6-7]。
針對(duì)使用STM32微控制器平臺(tái)的醫(yī)療設(shè)備進(jìn)行固件升級(jí)問(wèn)題,本文設(shè)計(jì)了一種遠(yuǎn)程升級(jí)醫(yī)療設(shè)備固件的系統(tǒng)工具,可實(shí)現(xiàn)儀器固件遠(yuǎn)距離升級(jí),升級(jí)操作簡(jiǎn)單、快捷、方便。該系統(tǒng)適用于能與PC機(jī)連接的設(shè)備,解決了傳統(tǒng)固件升級(jí)需要拆解儀器,需要專(zhuān)業(yè)人員到現(xiàn)場(chǎng)升級(jí)的問(wèn)題。該系統(tǒng)可應(yīng)用于各種基于STM32平臺(tái)控制的醫(yī)療設(shè)備上,由于醫(yī)療設(shè)備對(duì)軟件穩(wěn)定性要求很高,如果有軟件Bug出現(xiàn),必須要做到及時(shí)快速的修改解決,而本文設(shè)計(jì)的遠(yuǎn)程固件升級(jí)系統(tǒng)非常適用于這種情況。