郭 濤
水文遙測終端機是水文水利各類監(jiān)測站中必不可少的設(shè)備,隨著社會的發(fā)展和進步,各種水文水利遙測要素不斷更新,對水文遙測終端機的性能指標要求也不斷提高。水文監(jiān)測站點一般無人值守,實現(xiàn)遠程固件升級及性能提升已成為現(xiàn)代信息化建設(shè)必不可少的功能,為水文工作者帶來極大的便捷,同時對水文遙測終端機的發(fā)展進步具有重要意義。
水文遙測終端機是一種應(yīng)用于水文監(jiān)測的設(shè)備,主要對降雨量、水位、墑情等要素進行采集,將采集數(shù)據(jù)轉(zhuǎn)發(fā)至服務(wù)器平臺。該設(shè)備一般應(yīng)用于野外且無人值守,采用太陽能加電池供電,分布范圍廣,站點繁多,數(shù)據(jù)傳輸采用GPRS 通信方式。根據(jù)該設(shè)備的應(yīng)用特點,從側(cè)面反映出設(shè)備維護和固件升級的繁瑣性,也給工作人員帶來龐大的工作量。
水文遙測終端機是一種新興的物聯(lián)網(wǎng)應(yīng)用產(chǎn)品,目前的水文遙測終端機形態(tài)各異,功能強大,但是針對水文遙測終端機的固件升級往往只停留在本地現(xiàn)場操作。隨著國家對水文遙測終端機的標準化,產(chǎn)品的性能不斷完善,功能不斷豐富,在原有設(shè)備上通過遠程升級固件成為必備的功能。
本文所述的具有雙模固件升級的水文遙測終端機,在基于《水文監(jiān)測數(shù)據(jù)通信規(guī)約》(SL651-2014)的基礎(chǔ)上實現(xiàn)遠程升級固件及本地升級固件的雙模式固件升級,同時支持本地固件存儲及恢復(fù),避免了升級失敗帶來的產(chǎn)品不能使用的問題,大大提高了水文遙測終端機實用價值。
水文遙測終端機的程序固件由兩部分組成:一是BootLoader 引導(dǎo)程序,在MCU 上電或復(fù)位后率先執(zhí)行;二是用戶程序,是設(shè)備正常工作時的運行程序,也是需要更新升級的固件。
BootLoader 是一段引導(dǎo)程序,是雙模固件升級的核心程序,當MCU 上電或復(fù)位后執(zhí)行該段引導(dǎo)程序,判斷是否有新固件升級。如果不需要升級,程序指針直接跳轉(zhuǎn)至用戶程序的起始位置,開始執(zhí)行用戶程序;如果需要更新程序,BootLoader 引導(dǎo)程序會將用戶程序單元擦除,通過uart 或SPI 串行接口接收新的用戶程序,寫入MCU指定的用戶程序單元。用戶程序以行為單位,每行程序指令均含有校驗,確保了寫入程序代碼的正確性。
BootLoader 引導(dǎo)程序一般存放于MCU 的程序空間的前端,從程序空間的0x400 開始,空間大小為0xC00。BootLoader 引導(dǎo)程序比較小,本文所述的雙模固件升級水文遙測終端機充分利用了引導(dǎo)程序設(shè)計了Uart 和SPI兩種Boot 方式,Uart 方式用于本地固件升級,SPI 用于遠程固件升級。用戶程序從0x1000 開始,用于存放用戶正常運行的代碼。官方示例程序空間分配見圖1。
水文監(jiān)測數(shù)據(jù)傳輸?shù)耐ㄐ艆f(xié)議應(yīng)采用《水文監(jiān)測數(shù)據(jù)通信規(guī)約》(SL651-2014)規(guī)定的上行報文幀結(jié)構(gòu)框架和下行報文幀結(jié)構(gòu)框架。無論傳輸?shù)淖址捎煤畏N編碼,均應(yīng)滿足此幀結(jié)構(gòu)框架規(guī)定。傳輸順序為高位字節(jié)在前,低位字節(jié)在后。數(shù)據(jù)傳輸結(jié)構(gòu)如圖2。
圖1 官方示例程序空間分配圖
固件升級過程采用M2 發(fā)送方式,由中心站主動發(fā)起申請,再由遙測站響應(yīng)申請固件內(nèi)容,直至固件接收完畢后執(zhí)行升級。
遙測終端固件升級,功能碼為EAH。由中心站先向遙測終端發(fā)出固件升級申請,再由遙測終端依次向中心站申請固件內(nèi)容。固件接收完畢后遙測終端自動復(fù)位,執(zhí)行新固件。傳輸固件過程中,需水文遙測終端常在線,確保鏈路上數(shù)據(jù)的正常傳輸。水文遙測終端將固件數(shù)據(jù)按照行為單位存儲于存儲芯片中,GPRS 模塊切換為透傳模式便于接收數(shù)據(jù)。遙測終端也可主動申請固件升級,再由中心站向遙測終端機發(fā)出固件申請,確保了遙測終端機對自身固件更新的實時性。
PIC 單片機嵌入式HEX 固件是遵循 Intel HEX 文件格式的 ASCII 文本文件。HEX 由任意數(shù)量的十六進制記錄組成。每個記錄包含5 個域,按以下格式排列:Start Code、Byte count、Address、Record type、Data、Checksum。
HEX 文件以行為單位。每行以字符 ‘:’ (0x3a)開頭,以回車換行符0x0d, 0x0a 為結(jié)束。每行開始和結(jié)束之間的所有內(nèi)容,都是以字符形式表現(xiàn)的。例如數(shù)據(jù)如果是 0x1A ,那么轉(zhuǎn)換到HEX 格式的行里面就是0x31 0x41。如果數(shù)據(jù)是16bit 的,例如地址,則先顯示高位,后顯示底位。例如 0x1234,轉(zhuǎn)換成HEX 格式文件后變成 0x31 0x32 0x33 0x34,顯示出來以后就是1234。將數(shù)據(jù)部分內(nèi)容每2個字符看作一個HEX 數(shù)據(jù)。
圖2 數(shù)據(jù)傳輸結(jié)構(gòu)圖
例如:“:020000040000FA”把它轉(zhuǎn)換為十六進制為 0x02 0x00 0x00 0x04 0x00 0x00 0xFA。
本文所述水文遙測終端機的硬件平臺是基于Microchip 的PIC24FJ 系列MCU,該硬件平臺性能穩(wěn)定可靠,具有良好的工業(yè)特性。存儲芯片采用64Mbit 大小的Flash 存儲器,用于存儲最新的固件,存儲芯片使用SPI 接口與MCU 連接。無線數(shù)據(jù)傳輸采用SIMcom 的GPRS 模 塊,采 用Uart 串口與MCU 連接,RS232 接口通過Uart串口與MCU 連接,用于本地固件升級。
首先,建立工程項目,設(shè)置.gld配置文件為“program (xr) : ORIGIN = 0x400, LENGTH = 0xC00”分配Boot-Loader 引導(dǎo)程序的程序空間。
編輯Uart 和SPI 串行通信驅(qū)動、Flash 芯片的讀寫驅(qū)動以及Boot 驅(qū)動。
然后進行Boot 邏輯構(gòu)建,當水文遙測終端機上電或復(fù)位后,先MCU通過串口發(fā)送“>”,如果串口無任何回復(fù),則進入SPI 讀取Flash 內(nèi)容判斷是否有新固件存在需要更新。若都無需要更新固件,則利用“(*((void(*)(void))APP_START))();”進入用戶程序進行正常工作。
將RS232 通信線連接電腦和水文遙測終端機,給終端機重新上電,電腦串口助手會收到終端機發(fā)送的“>”字符,電腦給設(shè)備發(fā)送回車字符,等待設(shè)備返回“Uart>”。
將準備好的用戶“APP.hex”程序固件利用串口助手,逐行發(fā)送水文遙測終端機,每行發(fā)送成功后均會回復(fù)“Y”字符,如果失敗則會發(fā)送“X”字符。
最后更新完畢后,回復(fù)“Done”,水文遙測終端機會自動跳轉(zhuǎn)執(zhí)行新固件。
根據(jù)水文遙測終端機應(yīng)用的特殊性,該設(shè)備在工作時的數(shù)據(jù)傳輸采用GPRS 通信,遙測終端機會定時向中心站詢問固件更新申請,如果中心站需要更新固件回復(fù)Hex 固件行數(shù),如果不需要更新固件則回復(fù)Hex固件行數(shù)為0。
當需要更新固件時,中心站會將新固件按內(nèi)容分包,水文遙測終端會根據(jù)《水文監(jiān)測數(shù)據(jù)通信規(guī)約》的固件升級擴展應(yīng)用,進行逐包詢要每個固件包,然后下載至Flash 存儲芯片內(nèi)。每包固件包均含有包號及CRC 校驗,確保了Hex 固件的完整性和正確性。
完成固件下載后,水文遙測終端機,在Flash 芯片內(nèi)放置更新固件標志,利用軟件指令“__asm__ volatile ("RESET");”將設(shè)備復(fù)位。
復(fù)位后的MCU 執(zhí)行BootLoader引導(dǎo)程序,在無串口更新固件的情況下,MCU 利用SPI 通信提取Flash 內(nèi)的更新固件標志,確定需要更新固件后,逐行提取新固件并執(zhí)行。最后更新完畢后,水文遙測終端機會自動跳轉(zhuǎn)執(zhí)行新固件。
水文遙測終端機會在第一次使用時利用RS232 向其Flash 的固定存儲位置置入固定的用戶程序。當本地固件升級和遠程固件升級失敗后,設(shè)備可提取該用戶程序進行固件恢復(fù),確保了設(shè)備工作的可靠性。
雙模升級固件的水文遙測終端機設(shè)計方案穩(wěn)定可靠,現(xiàn)場使用效果良好,工作運行穩(wěn)定。雙模升級固件的應(yīng)用為水文遙測終端機的性能提升了保障,為水文工作者大大節(jié)省了工作量。該固件的應(yīng)用也是工業(yè)物聯(lián)網(wǎng)應(yīng)用的體現(xiàn),在無人值守的野外環(huán)境下,可穩(wěn)定可靠地實現(xiàn)自更新固件。總之,具有雙模升級固件的水文遙測終端機還在不斷改進,隨著科技的進步,防汛理念的創(chuàng)新,該技術(shù)必將作為新技術(shù)變革得到廣泛應(yīng)用■