宋益東
(1.煤科集團沈陽研究院有限公司,遼寧 撫順113122;2.煤礦安全技術(shù)國家重點實驗室,遼寧 撫順113122)
礦用傳感器是煤礦安全監(jiān)控系統(tǒng)中最末端的感知設(shè)備,是監(jiān)控系統(tǒng)中所有的數(shù)據(jù)來源。目前煤礦在用模擬量傳感器均為數(shù)字化智能傳感器[1-2],隨著煤礦開采自動化程度的提高,不可避免的涉及到傳感器固件程序升級問題。傳統(tǒng)的方式是傳感器部分或全部從井下拿到地面,固件升級后再返到井下進行安裝。礦用傳感器使用量非常大,并且在井下分布比較分散且大部分在采掘工作面,距離地面中心站較遠,采用傳統(tǒng)的方式效率比較低,并且更換甲烷等傳感器需要切斷工作面的動力電,給煤礦的安全生產(chǎn)帶來影響,所以在線升級[3]固件程序是一個很好的解決方案,在煤礦機電設(shè)備檢修的間隙,通過井下工業(yè)環(huán)網(wǎng)將需要升級的固件程序下發(fā)到監(jiān)控分站,由監(jiān)控分站通過總線[4-6]發(fā)送到傳感器,從而實現(xiàn)煤礦井下傳感器的在線升級。
系統(tǒng)主要由地面中心站服務(wù)器、環(huán)網(wǎng)交換機、礦用監(jiān)控分站、礦用傳感器及執(zhí)行器等組成。中心站服務(wù)器與礦用分站通過以太網(wǎng)光纖網(wǎng)絡(luò)連接,礦用分站和礦用傳感器之間通過CAN 總線連接,升級固件程序通過中心站通過以太網(wǎng)下載到礦用分站中,礦用分站通過CAN 總線傳輸給礦用傳感器,系統(tǒng)組成結(jié)構(gòu)圖如圖1。
圖1 系統(tǒng)組成結(jié)構(gòu)圖Fig.1 System composition structure
礦用傳感器主要由STM32F103Rx[7]處理器、穩(wěn)壓電源電路、晶振電路、復(fù)位電路、CAN 總線通信電路、ADC 轉(zhuǎn)換外圍電路、紅外遙控電路及LEC 顯示電路組成。礦用傳感器結(jié)構(gòu)如圖2,STM32F103 為Cortex-M3[8]內(nèi)核,具有成本低、功耗低、高性能、實時性好等特點。片上資源比較豐富,包括1 路CAN 通信接口,5 個USART 接口、JTAG 調(diào)試口,4 個16 位定時器、3 路ADC 通道等;片內(nèi)具有256KB 的Flash和48KB 的SRAM。
圖2 傳感器組成結(jié)構(gòu)圖Fig.2 Sensor structure diagram
在線升級是指MCU 中運行的固件程序在運行過程中對實現(xiàn)對片內(nèi)代碼存儲Flash 的擦除、編程,新的固件程序通過CAN 總線通訊接口下載到MCU的Flash 中,IAP[9-10]技術(shù)可以對存儲固件程序的Flash 區(qū)域進行重新燒寫然后利用IAP 功能實現(xiàn)在線更新礦用傳感器固件。因此,利用IAP 技術(shù)可以方便地通過CAN 總線通信口對礦用傳感器中的固件程序進行遠程更新升級。和傳統(tǒng)方式相比,基于IAP 技術(shù)的固件升級不需要到井下替換傳感器,不需要打開外殼,不需要使用下載器等。
STM32F103RCT6 的片內(nèi)Flash 寫保護以扇區(qū)為單位,每扇區(qū)4 KB,根據(jù)Flash 容量不同,頁大小分為1 KB 和2 KB,本文用處理器頁大小為2 KB 。也就是對FLASH 的編程寫入以2 KB 為單位,本設(shè)計傳輸協(xié)議制定也以此為單位進行數(shù)據(jù)傳輸。處理器片內(nèi)256 K 的Flash 劃分為3 個區(qū)域:第1 區(qū)域用來存儲Bootloader 程序,包括Flash 操作相關(guān)程序、中斷向量,硬件驅(qū)動、通信協(xié)議驅(qū)動等;第2 區(qū)域用來存儲正常運行的固件程序;第3 區(qū)域存儲固件升級程序,片上FLASH 存儲器分區(qū)如圖3。根據(jù)礦用傳感器固件大小進行容量劃分,礦用傳感器固件為28 KB,相對于256 K 的Flash 有很大的預(yù)留空間,每一區(qū)域中間可以預(yù)留一定的空白區(qū)域,防止區(qū)域程序重疊。通過修改STM32F103 的Bootloader 程序或工程的鏈接腳本可以修改程序存儲的起始地址。
圖3 片上Flash 存儲器分區(qū)Fig.3 Flash memory partition on a chip
礦用傳感器在出廠時是將Bootloader 配置程序燒寫到Flash 的第1 部分,并對該區(qū)域進行讀寫保護,防止升級過程中的誤操作把Bootloader 程序擦除。第1 區(qū)域引導(dǎo)程序只能通過下載器編程;第2 區(qū)域的固件應(yīng)用程序通過在線方式編程或下載器編程;第3 區(qū)域升級更新程序通過IAP 在線方式編程。當(dāng)?shù)V用傳感器需要進行固件升級時,用戶固件程序跳轉(zhuǎn)到Bootloader 程序,Bootloader 程序不需要對舊版本的用戶固件程序進行擦除,直接將新版本的用戶固件程序通過CAN 總線接口下載到第3 區(qū)域的Flash 中,通過將中斷向量表從新映射,使Bootloader程序跳轉(zhuǎn)到第3 區(qū)域進行運行,從而完成固件程序的更新。
CAN 總線協(xié)議[5]分為遠程幀和數(shù)據(jù)幀,遠程幀多用于命令傳遞,數(shù)據(jù)幀用于數(shù)據(jù)傳輸,數(shù)據(jù)幀格式分為標(biāo)準(zhǔn)幀格式和擴展幀格式,標(biāo)準(zhǔn)幀為11 位標(biāo)識符,擴展幀為29 位標(biāo)識符,設(shè)計礦用傳感器CAN總線通信協(xié)議以CAN2.0A 標(biāo)準(zhǔn)幀為主,對CAN2.0A幀結(jié)構(gòu)進行了從新劃分,對仲裁段的標(biāo)識符和數(shù)據(jù)段中的數(shù)據(jù)場進行了從新劃分。CAN2.0A 鏈路層標(biāo)準(zhǔn)幀數(shù)據(jù)結(jié)構(gòu)包括幀起始、仲裁段、控制端、數(shù)據(jù)段、CRC 校驗段、ACK 應(yīng)答段和幀結(jié)束。
CAN 總線在線升級的關(guān)鍵是要設(shè)計CAN 總線應(yīng)用層協(xié)議,通信協(xié)議設(shè)計的重點是CAN 標(biāo)識符的分配與設(shè)計,所設(shè)計的應(yīng)用層協(xié)議將CAN 協(xié)議中的11bit 標(biāo)識符區(qū)域劃分為3 個部分, 標(biāo)識符區(qū)域劃分表見表1。
表1 標(biāo)識符區(qū)域劃分表Table 1 Identifier area division table
在礦用傳感器升級協(xié)議中,ID10-ID6 這8 位填充接收數(shù)據(jù)傳感器地址;ID3-ID1 這3 位為命令類型碼;ID0 為幀類型占用1 位,單幀數(shù)據(jù)用0 表示,多幀數(shù)據(jù)用1 表示。單幀數(shù)據(jù)主要應(yīng)用于升級命令類,包括:數(shù)據(jù)包、升級申請,信息應(yīng)答,錯誤應(yīng)答等;多幀數(shù)據(jù)每幀數(shù)據(jù)的第1 個字節(jié)為幀序,第2 個字節(jié)以后為升級固件數(shù)據(jù),構(gòu)固件程序升級數(shù)據(jù)格式見表2。每個數(shù)據(jù)包為固定的1 024 字節(jié)數(shù)據(jù),當(dāng)接收完2 包數(shù)據(jù)后進行FLASH 寫入操作,這是因為利用IAP 技術(shù)進行擦除或者寫入時,每次對片上FLASH 編程的字節(jié)數(shù)為固定的2 048 字節(jié)。
礦用傳感器在線升級流程如圖4。
在正常執(zhí)行應(yīng)用程序的過程中,當(dāng)接收到礦用分站固件升級指令后,程序跳轉(zhuǎn)到Bootloader 執(zhí)行IAP 程序,當(dāng)?shù)V用分站接收到返回指令后,逐幀發(fā)送有效數(shù)據(jù)到礦用傳感器,傳感器每接收1 幀升級數(shù)據(jù)都會檢驗其目標(biāo)地址合法性、數(shù)據(jù)完整性等信息,對于有效的升級固件數(shù)據(jù),系統(tǒng)將按照目標(biāo)地址寫入SRAM 的待寫入?yún)^(qū)。當(dāng)接收2 包固件數(shù)據(jù)為2 048 字節(jié)后,為了節(jié)省SRAM 資源占用,將1 頁2 KB 數(shù)據(jù)寫入FLASH,待寫入成功后,返回寫入成功信息給礦用分站,分站繼續(xù)發(fā)送固件數(shù)據(jù),一直到所以固件程序發(fā)送完成。待更新代碼全部寫入備份區(qū)后,通過更新中斷向量表從新映射,實現(xiàn)程序指針跳轉(zhuǎn)到新的固件main 函數(shù)執(zhí)行,實現(xiàn)程序的平穩(wěn)過度。在接收數(shù)據(jù)的過程中如果有錯誤指令信息,分站則重新發(fā)送出現(xiàn)錯誤的數(shù)據(jù)幀。
表2 固件程序升級數(shù)據(jù)格式Table 2 Firmware program upgrade data format
圖4 在線升級流程圖Fig.4 Online upgrade flow chart
如果在升級過程中傳感器掉電、通信中斷或者通信超時等造成在線升級失敗時,礦用傳感器會繼續(xù)執(zhí)行第2 區(qū)域固件程序,仍然能按照原有用戶程序繼續(xù)正常運行。
結(jié)合全數(shù)字化監(jiān)控系統(tǒng)現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu),工業(yè)以太網(wǎng)+總線的方式,設(shè)計了基于CAN 總線的礦用傳感器遠程在線升級功能,制定了CAN 總線應(yīng)用層通信協(xié)議。利用以太網(wǎng)網(wǎng)絡(luò)節(jié)點上的礦用分站,使得礦用傳感器的固件更新更加高效方便,降低設(shè)備維護成本,提高了系統(tǒng)的穩(wěn)定性。通過將處理器片上FLASH 合理分區(qū)及固件程序數(shù)據(jù)分塊傳輸?shù)确绞?,實現(xiàn)了即使升級出現(xiàn)錯誤時也能保證傳感器的穩(wěn)定運行。實驗測試證明,該技術(shù)方案具有較好的可行性、穩(wěn)定性和可靠性,可以廣泛地應(yīng)用于CAN 總線式嵌入式固件程序升級。