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