陳建林,連雪海,姚克波
(中電科(寧波)海洋電子研究院有限公司,浙江 嘉興 314000)
船舶位置信息的獲取對(duì)于船員和管理部門(mén)都至關(guān)重要,船載監(jiān)管終端采用GPS/BD定位系統(tǒng)獲取自身的位置信息,與采集的設(shè)備狀態(tài)、環(huán)境溫度、航速航向等相關(guān)數(shù)據(jù)打包之后,通過(guò)GPRS網(wǎng)絡(luò)或北斗一代網(wǎng)絡(luò)上傳至監(jiān)管平臺(tái)[1]。該監(jiān)管終端采用太陽(yáng)能+鋰電池的供電方式,不依賴(lài)船電供電,可廣泛應(yīng)用于漁船、游船、貨船等各類(lèi)型船舶,能有效提高航海的安全性和監(jiān)管的有效性。
本文所述的遠(yuǎn)程升級(jí)功能主要用于對(duì)船載監(jiān)管終端的嵌入式軟件進(jìn)行遠(yuǎn)程維護(hù),避免不必要的現(xiàn)場(chǎng)拆裝和人員投入。遠(yuǎn)程升級(jí)操作完成之后,船載監(jiān)管終端自動(dòng)執(zhí)行新的應(yīng)用程序,實(shí)現(xiàn)新的軟件功能。
本文設(shè)計(jì)的船載監(jiān)管終端選用PIC16系列單片機(jī)作為處理器,外圍包括供電電路、大容量SD卡、GPS/BD定位單元、GPRS模塊和北斗一代模塊等,如圖1所示[2]。該終端采用太陽(yáng)能+鋰電池的供電方式,光照不足時(shí),通過(guò)鋰電池供電來(lái)維持監(jiān)管終端的正常工作,光照充足時(shí),由太陽(yáng)能電池板為鋰電池充電。為保證經(jīng)歷長(zhǎng)期的陰雨天氣,監(jiān)管終端仍能正常工作,配備了3 W的太陽(yáng)能電池板和8 000 mAh的鋰電池。大容量SD卡主要用于存儲(chǔ)終端的狀態(tài)信息,便于事后追述和情景再現(xiàn),同時(shí)暫存遠(yuǎn)程升級(jí)時(shí)平臺(tái)下發(fā)的十六進(jìn)制文件(Hexadecimal,HEX)。GPS/BD定位單元用于獲取船舶自身的位置信息和當(dāng)前時(shí)間信息。
圖1 硬件電路原理
該終端采用GPRS和北斗一代的雙模通信方式,在GPRS網(wǎng)絡(luò)翻蓋區(qū)域之內(nèi),終端和平臺(tái)之間采用GPRS網(wǎng)絡(luò)進(jìn)行通信,在GPRS網(wǎng)絡(luò)翻蓋區(qū)域之外,終端和平臺(tái)之間采用北斗一代網(wǎng)絡(luò)進(jìn)行通信。這種雙模通信方式可以彌補(bǔ)各自的弱點(diǎn),實(shí)現(xiàn)船載終端的全天候、全海域覆蓋。但是,本文所述的遠(yuǎn)程升級(jí)功能由于數(shù)據(jù)量過(guò)大,不便于采用北斗一代進(jìn)行數(shù)據(jù)傳輸,只能通過(guò)GPRS網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程升級(jí)功能。
HEX文件解析是實(shí)現(xiàn)遠(yuǎn)程升級(jí)功能的基礎(chǔ),HEX文件解析完成之后,單片機(jī)便可通過(guò)串口接收來(lái)自平臺(tái)下發(fā)的應(yīng)用程序,再按照特定的規(guī)則寫(xiě)入FLASH中,實(shí)現(xiàn)船載監(jiān)管終端的遠(yuǎn)程升級(jí)功能。
Intel HEX 文件是遵循 Intel HEX 文件格式的 ASCII 文本文件。在 Intel HEX 文件的每一行都包含了一個(gè) HEX 記錄。這些記錄是由一些代表機(jī)器語(yǔ)言代碼和常量的十六進(jìn)制數(shù)據(jù)組成的。Intel HEX 文件常用來(lái)傳輸要存儲(chǔ)在 EEPROM/FLASH 中的程序和數(shù)據(jù)。大部分的 EEPROM/FLASH 編程器能使用 Intel HEX 文件。Intel HEX文件由任意數(shù)量的十六進(jìn)制記錄組成,每個(gè)記錄包含5個(gè)域,具體格式如下:
<0×3A> [數(shù)據(jù)長(zhǎng)度1Byte] [數(shù)據(jù)地址2Byte] [數(shù)據(jù)類(lèi)型1Byte] [數(shù)據(jù)nByte] [校驗(yàn)1Byte] <0×0D> <0×0A>
例::10 0000 00 000080308A0046282000 8A0185019130 56
<0×3A> 每個(gè) Intel HEX 記錄都由冒號(hào)開(kāi)頭;
數(shù)據(jù)長(zhǎng)度 數(shù)據(jù)長(zhǎng)度域,它代表記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量;
數(shù)據(jù)地址 地址域,它代表記錄當(dāng)中數(shù)據(jù)的起始地址;數(shù)據(jù)類(lèi)型 代表HEX記錄類(lèi)型的域,它可能是以下數(shù)據(jù)當(dāng)中的一個(gè):
00-數(shù)據(jù)記錄
01-文件結(jié)束記錄
02-擴(kuò)展段地址記錄
03-開(kāi)始段地址記錄
04-擴(kuò)展線性地址記錄
05-開(kāi)始線性地址記錄
數(shù)據(jù)記錄 數(shù)據(jù)域,一個(gè)記錄可以有許多數(shù)據(jù)字節(jié),記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量必須和數(shù)據(jù)長(zhǎng)度域中指定的數(shù)字相符;
校驗(yàn)和 校驗(yàn)和域,它表示這個(gè)記錄的校驗(yàn)和,校驗(yàn)和的計(jì)算是通過(guò)將記錄當(dāng)中所有十六進(jìn)制編碼數(shù)字對(duì)的值相加,以256為模進(jìn)行以下補(bǔ)足。
HEX文件以行為單位,每行以字符“ : ”(0×3A)開(kāi)頭,以回車(chē)換行符0×0D,0×0A為結(jié)束。每行開(kāi)始和結(jié)束之間的所有內(nèi)容,都是以字符形式表現(xiàn)的。上面的例子中,“ : ”后面的“10”表示該行的數(shù)據(jù)長(zhǎng)度為16個(gè)字節(jié),“0000”表示該行的有效數(shù)據(jù)在FLASH中的起始地址為0×0000,“00”表示該條記錄類(lèi)型為數(shù)據(jù)記錄,“000080308A00462820008A0185019130”為該條記錄的有效數(shù)據(jù),“56”為該條記錄的校驗(yàn)和,任意多條上述記錄組成一個(gè)完整的Intel HEX文件。
并非每條記錄都有有效數(shù)據(jù),若記錄中的第二個(gè)字節(jié)為0,則這條記錄就沒(méi)有數(shù)據(jù)。由于每條記錄標(biāo)識(shí)數(shù)據(jù)地址的只有2 Byte,所以最大只能到64 K。為了可以保存更多的有效數(shù)據(jù),就有了“擴(kuò)展線性地址記錄”。如果這行的數(shù)據(jù)類(lèi)型是0×04,那么,這行的數(shù)據(jù)就是隨后數(shù)據(jù)的基地址。
第一行是擴(kuò)展線性地址記錄,里面的基地址是0×0004,第二行是數(shù)據(jù)記錄,里面的地址值是0×0000。那么數(shù)據(jù)000080308A00462820008A0185019130要寫(xiě)入地址為(0×0004 << 16) | 0×0000的FLASH中,也就是寫(xiě)入FLASH的0×40000這個(gè)地址。同樣,第三行的數(shù)據(jù)的寫(xiě)入地址為0×40010。當(dāng)一個(gè)HEX文件的數(shù)據(jù)超過(guò)64 K的時(shí)候,文件中就會(huì)出現(xiàn)多個(gè)擴(kuò)展線性地址記錄。 一般情況下,每個(gè)HEX文件的最后一行都為:00000001FF,這樣的一行數(shù)據(jù)內(nèi)容是固定的,數(shù)據(jù)長(zhǎng)度和地址均為0。
平臺(tái)軟件對(duì)實(shí)際HEX文件的解析,需要綜合考慮單片機(jī)緩沖區(qū)的規(guī)模和遠(yuǎn)程升級(jí)的效率。若解析生成的數(shù)據(jù)包過(guò)大,則會(huì)占用較多的單片機(jī)緩沖區(qū),影響應(yīng)用程序的執(zhí)行速度;若數(shù)據(jù)包過(guò)小,勢(shì)必會(huì)增加數(shù)據(jù)交互的次數(shù),降低遠(yuǎn)程升級(jí)的效率。本文最終選定的數(shù)據(jù)包上限為80字節(jié),即最多一次性發(fā)送5條數(shù)據(jù)記錄。
遠(yuǎn)程升級(jí)過(guò)程中,每包數(shù)據(jù)都要經(jīng)過(guò)串口通信、GPRS網(wǎng)絡(luò)和SD卡讀寫(xiě)等多個(gè)環(huán)節(jié),為保證遠(yuǎn)程升級(jí)的可靠性,每個(gè)環(huán)節(jié)都要進(jìn)行嚴(yán)格的數(shù)據(jù)校驗(yàn),特別是GPRS網(wǎng)絡(luò)環(huán)節(jié),易因環(huán)境干擾等因素產(chǎn)生錯(cuò)誤數(shù)據(jù),進(jìn)而導(dǎo)致升級(jí)失敗。
本文采用簡(jiǎn)單實(shí)用的求和校驗(yàn)算法對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),即平臺(tái)將解析生成的數(shù)據(jù)包中的地址和有效數(shù)據(jù)進(jìn)行求和,生成一個(gè)16位的校驗(yàn)和,將該校驗(yàn)和附在數(shù)據(jù)包的末尾,同時(shí)在數(shù)據(jù)包的最前面增加一個(gè)數(shù)據(jù)頭“$”,構(gòu)成一個(gè)新的數(shù)據(jù)包,然后發(fā)送出去。在接收端,根據(jù)數(shù)據(jù)包和校驗(yàn)和之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。若校驗(yàn)錯(cuò)誤,則要求平臺(tái)重傳該包數(shù)據(jù);若校驗(yàn)正確,則開(kāi)始傳輸下一包數(shù)據(jù),直到整個(gè)HEX文件全部傳輸完成。
本文選用PIC16系列單片機(jī)作為處理器,該系列單片機(jī)自帶的增強(qiáng)型FLASH支持固件對(duì)自身進(jìn)行編程,這是由被稱(chēng)為“BootLoader”的固件內(nèi)核實(shí)現(xiàn)的。該固件內(nèi)核駐留在單片機(jī)內(nèi),通常使用FLASH中應(yīng)用程序不常用的一小塊空間。當(dāng)固件內(nèi)核被激活時(shí),外部設(shè)備可以使用串口協(xié)議進(jìn)行讀寫(xiě),以及驗(yàn)證對(duì)單片機(jī)應(yīng)用程序進(jìn)行的更新。應(yīng)用程序燒寫(xiě)完成之后,“BootLoader”會(huì)放棄控制權(quán),讓器件正常執(zhí)行應(yīng)用程序,直到再次調(diào)用“BootLoader”為止。
執(zhí)行遠(yuǎn)程升級(jí)時(shí),平臺(tái)軟件將解析完成的應(yīng)用程序HEX文件通過(guò)GPRS網(wǎng)絡(luò)下發(fā)至待升級(jí)設(shè)備的SD卡中,HEX文件下發(fā)完成且校驗(yàn)通過(guò)之后,再將SD卡中的應(yīng)用程序通過(guò)固件內(nèi)核下載到單片機(jī)的FLASH中,下載完成且校驗(yàn)通過(guò)之后,固件內(nèi)核主動(dòng)放棄控制權(quán),設(shè)備開(kāi)始正常工作,如圖2所示[3-4]。一般情況下,平臺(tái)軟件也可直接將HEX文件通過(guò)GPRS網(wǎng)絡(luò)發(fā)送至固件內(nèi)核,而不經(jīng)過(guò)SD卡中轉(zhuǎn),但通過(guò)這種方式進(jìn)行遠(yuǎn)程升級(jí)存在一定的風(fēng)險(xiǎn)。若升級(jí)過(guò)程中出現(xiàn)GPRS網(wǎng)絡(luò)中斷或信號(hào)太差,則容易導(dǎo)致設(shè)備無(wú)法恢復(fù)正常工作。
圖2 遠(yuǎn)程升級(jí)實(shí)現(xiàn)流程
圖3為船載監(jiān)管終端平臺(tái)軟件示意圖,圖4為安裝示意圖。執(zhí)行遠(yuǎn)程升級(jí)時(shí),在平臺(tái)軟件上選中需要升級(jí)的單臺(tái)或多臺(tái)設(shè)備,平臺(tái)軟件按照既定的HEX文件解析方式將數(shù)據(jù)包逐一發(fā)送至監(jiān)管終端,發(fā)送完成且校驗(yàn)通過(guò)之后,設(shè)備復(fù)位并開(kāi)始正常工作[5]。
本文設(shè)計(jì)的船載監(jiān)管終端已在漁船、游船等各型船舶上獲得廣泛應(yīng)用,為船員和監(jiān)管部門(mén)提供了很大的便利。終端自帶的遠(yuǎn)程升級(jí)功能可以很好地輔助設(shè)備的現(xiàn)場(chǎng)維護(hù),提高作業(yè)效率,降低人員開(kāi)銷(xiāo)。
圖3 遠(yuǎn)程升級(jí)平臺(tái)界面
船載監(jiān)管終端以其靈活、實(shí)用、免維護(hù)等特性,逐步在船舶領(lǐng)域推廣應(yīng)用。本文以船載監(jiān)管終端的遠(yuǎn)程升級(jí)功能為研究對(duì)象,主要完成以下4項(xiàng)工作:(1)應(yīng)用程序HEX文件解析。(2)文件傳輸中的數(shù)據(jù)校驗(yàn)。(3)遠(yuǎn)程升級(jí)流程的設(shè)計(jì)和實(shí)現(xiàn)。(4)對(duì)所設(shè)計(jì)的遠(yuǎn)程升級(jí)功能進(jìn)行實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)效果表明,本文設(shè)計(jì)的遠(yuǎn)程升級(jí)功能達(dá)到了預(yù)期的設(shè)計(jì)目的,實(shí)現(xiàn)了應(yīng)用程序的遠(yuǎn)程更新和維護(hù)。
圖4 船載監(jiān)管終端安裝示意
[參考文獻(xiàn)]
[1]黃東軍.物聯(lián)網(wǎng)技術(shù)導(dǎo)論[M].2版.北京:電子工業(yè)出版社,2017.
[2]丁靈譯.圖解物聯(lián)網(wǎng)[M].北京:人民郵電出版社,2017.
[3]劉雪蓮,黃濤. GPRS通信方式下直放站遠(yuǎn)程升級(jí)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2015(1):41-43.
[4]劉兆慶,陳長(zhǎng)春,彭宇. LXI儀器固件遠(yuǎn)程升級(jí)設(shè)計(jì)與實(shí)現(xiàn)[J]. 測(cè)控技術(shù),2012(7):85-87.
[5]Microchip Technology Inc. AN1310. PIC16和PIC18器件的高速串行自舉程序[M].New York:Microchip Technology Inc., 2010.