李永科
(海南核電有限公司,海南海口 570105)
核電廠電氣柜的PIC單片機遠程程序升級
李永科
(海南核電有限公司,海南海口 570105)
為降低單片機程序升級的難度,在不需要編程人員到現(xiàn)場的情況下完成新程序下載,以PIC18F258單片機為例,介紹一種單片機遠程程序升級的方法。上位機軟件將編譯器生成的16進制程序按規(guī)定協(xié)議編碼,由GPRS無線網(wǎng)絡(luò)發(fā)送給指定單片機,單片機接收到程序后按照協(xié)議解碼,通過內(nèi)部Flash擦寫功能完成對自身程序的升級。既能減少程序升級所需的成本,也適用于具有擦寫內(nèi)部Flash功能的其他單片機。
PIC單片機;遠程程序升級;內(nèi)部Flash擦寫
10.16621/j.cnki.issn1001-0599.2017.05.14
隨著微電子行業(yè)的發(fā)展,以及工業(yè)化水平的不斷提高,許多系統(tǒng)終端設(shè)備需要定期更新程序以滿足人們?nèi)找嬖鲩L的需求。傳統(tǒng)的程序升級方法是編程人員到現(xiàn)場下載程序,對于偏遠地區(qū)的設(shè)備,不僅路途遠,而且耗時長。遠程程序升級能夠很好地解決這一問題,它利用無線網(wǎng)絡(luò)將程序傳給現(xiàn)場設(shè)備,現(xiàn)場設(shè)備將新程序?qū)懭氤绦虼鎯ζ鲝亩瓿沙绦蛏墶?纱蠓鶞p少升級所需的人力物力,降低升級費用,縮短升級時間。
遠程程序升級是對可編程技術(shù)IAP的具體應(yīng)用,即在應(yīng)用程序正常運行情況下對另外一段程序存儲區(qū)進行讀寫操作,甚至可以控制對某段、某頁,甚至某個字節(jié)的讀寫操作。為數(shù)據(jù)存儲和固件的現(xiàn)場升級帶來了極大的靈活性,既可以利用單片機的串口接到電腦的RS232口,也可以通過現(xiàn)有的Internet或其他通訊方式很方便地實現(xiàn)遠端升級和維護。
不同的微控制器實現(xiàn)遠程程序升級包括2種方法,①內(nèi)嵌在應(yīng)用可編程IAP函數(shù)的單片機,如LPC系列ARM7,只需通過調(diào)用該函數(shù)就可以完成遠程程序升級;②不具備在應(yīng)用可編程函數(shù),但具有在運行時擦寫內(nèi)部程序存儲器(Flash)功能的單片機,如本文研究的PIC系列單片機PIC18F258,該款單片機是核電廠電氣控制機柜控制單元常用的芯片,主要優(yōu)勢是穩(wěn)定性好,符合核安全法規(guī)要求,需要將單片機存儲器的某段空間制作成引導區(qū),用于對其他存儲空間進行讀取、擦除、寫入操作,相當于重新編寫IAP函數(shù)。
當PIC單片機需要升級程序時,設(shè)計者將調(diào)試后編譯器生成的16進制程序代碼通過上位機軟件按照規(guī)定的協(xié)議編碼,然后將編碼后的數(shù)據(jù)包由無線調(diào)制解調(diào)器通過GPRS網(wǎng)絡(luò)發(fā)給與另1臺無線調(diào)制解調(diào)器相連的PIC單片機,通過UART口接收到的數(shù)據(jù)包按照協(xié)議解碼并臨時存儲到數(shù)據(jù)存儲器(RAM),再通過其他串行總線如SPI發(fā)送至外部存儲器保存。當全部程序接收完成后,在引導區(qū)程序的控制下,PIC單片機通過串行總線將外部存儲器中的待更新程序分批讀入RAM再寫入應(yīng)用程序區(qū),當程序全部更新完成后,復位單片機使其運行新的程序,自此遠程程序升級全部完成。遠程程序升級的原理(圖1)。

圖1 遠程程序升級原理
以PIC18F258為例設(shè)計遠程升級程序的硬件系統(tǒng),此款單片機具有1.5 KB RAM和32 KB Flash,因此在程序更新過程中需要外接存儲器臨時存放待更新的程序,選擇AT45DB161作為外部存儲器,該芯片具有16 MB存儲空間,采用SPI串行總線接口滿足本系統(tǒng)的設(shè)計要求,該系列的大容量版本廣泛用于制作SD卡。無線傳輸網(wǎng)絡(luò)采用GPRS網(wǎng)絡(luò),無線傳輸模塊采用摩托羅拉公司的G24模塊,該模塊在安裝手機卡后,由上、下位機通過RS232接口發(fā)送AT指令控制,利用GPRS或GSM網(wǎng)絡(luò)建立連接發(fā)送數(shù)據(jù),上位機通過MAX232芯片與G24通信。系統(tǒng)硬件原理(圖2)。

圖2 系統(tǒng)硬件原理
PIC單片機程序的準確傳輸是本設(shè)計的重點。編譯器生成的16進制文件包含程序和程序在Flash中的存儲地址,因此要將這2部分內(nèi)容準確地傳給下位機。由于較短的幀格式容易校驗,誤碼率低且出現(xiàn)錯誤后重新發(fā)送的時間較短,因此需要將源代碼進行拆分并通過數(shù)據(jù)幀發(fā)送程序地址和程序內(nèi)容。為驗證傳輸結(jié)果的正確性采用校驗和驗證接收到的數(shù)據(jù),每次接收到不同的幀時,下位機均需回復是否正確接收,如出現(xiàn)錯誤上位機會重新發(fā)送。本系統(tǒng)設(shè)計的上位機發(fā)送幀格式(表1),下位機回復幀格式(表2)。
本系統(tǒng)上位機軟件采用C++語言編制,編譯環(huán)境為VC++ 6.0。上位機軟件的主要功能是將單片機編譯器生成的16進制程序代碼按照規(guī)定的協(xié)議進行編碼,并通過GPRS無線網(wǎng)絡(luò)將編碼后的數(shù)據(jù)包發(fā)給PIC單片機。由于PIC單片機數(shù)據(jù)存儲器容量較小,不能一次存儲全部待更新程序,因此要對源程序進行拆分發(fā)送,每個數(shù)據(jù)幀包括128字節(jié)的程序。上位機軟件主要包括系統(tǒng)初始化模塊、單片機程序編碼模塊和數(shù)據(jù)包發(fā)送模塊3部分。系統(tǒng)初始化模塊包括串口初始化和G24模塊初始化2部分,G24模塊的控制通過AT指令實現(xiàn)。本系統(tǒng)規(guī)定編碼后的數(shù)據(jù)包共分4種:起始幀、數(shù)據(jù)幀、結(jié)束幀和執(zhí)行幀。在編碼完成后上位機軟件就可以將要更新的程序逐一地發(fā)給下位機,且在每次發(fā)送數(shù)據(jù)包后,都要求下位機進行回應(yīng)以驗證數(shù)據(jù)傳輸?shù)恼_性。當數(shù)據(jù)傳輸錯誤時,下位機會向上位機發(fā)送錯誤幀以請求重新發(fā)送。上位機還會記錄程序更新的起始時間、終止時間、程序大小和數(shù)據(jù)包類型。上位機軟件流程見圖3。

圖3 上位機軟件流程
本系統(tǒng)下位機軟件采用C語言編制,編譯環(huán)境為PICC。主要功能包括初始化系統(tǒng),使用G24模塊接收上位機傳來的數(shù)據(jù),對接收到的數(shù)據(jù)進行校驗,將每幀數(shù)據(jù)進行解碼,將代碼寫入Flash指定地址并復位單片機運行新程序。下位機軟件的總體流程(圖4)。

圖4 下位機軟件流程
下位機與上位機的無線傳輸通過G24模塊實現(xiàn),該模塊通過AT指令控制。在程序初始化時,為方便對接收數(shù)據(jù)的判斷,使用ATE0V0命令簡化 G24對每條指令的回復內(nèi)容。為了防止打錯電話等情況的發(fā)生,每次更新前先通過AT+CMGF指令短信通知 PIC單片機,再通過ATD+電話號碼建立數(shù)據(jù)連接,然后根據(jù)協(xié)議傳輸數(shù)據(jù)包,當數(shù)據(jù)全部傳輸完成后延時3 s時間,發(fā)送+++指令斷開網(wǎng)絡(luò)連接,之后使用ATH指令掛機,從而完成全部操作。
要實現(xiàn)PIC單片機在線擦寫Flash就要將下位機程序分為2部分:應(yīng)用程序和引導程序,引導程序要固定在Flash的某一特定存儲區(qū)內(nèi),以防誤擦除。PIC18F258共有32 K程序存儲器,地址空間為0000h~7fffh,復位向量地址0000h。本系統(tǒng)將地址5000h~7fffh的程序存儲區(qū)設(shè)定為引導程序存儲區(qū),用于在線擦寫Flash,其他應(yīng)用程序由編譯器自動分配地址,引導區(qū)地址可以根據(jù)引導程序的大小自行設(shè)置。程序更新主要分為準備階段和實施階段。準備階段是將上位機發(fā)來的分段程序解碼并存入外部存儲器,當程序全部傳完后準備階段結(jié)束。實施階段首先將要更新程序的Flash地址內(nèi)所有內(nèi)容擦除并確認該空間無數(shù)據(jù),然后將新的程序?qū)懭朐摰刂房臻g,最后復位單片機使其運行新的程序。PIC單片機在線擦寫Flash主要通過TBLPTRU,TBLPTRL,TBLPTRH,TABLAT,TBLWT的5個寄存器實現(xiàn)。寫Flash的順序為向TBLPTRU,TBLPTRL,TBLPTRH的3個寄存器賦值,確定程序在Flash中的地址;設(shè)置EECON1寄存器為0x90允許Flash編程;WREN寄存器設(shè)置為1允許寫Flash;TABLAT賦值向Flash中寫入的數(shù)據(jù),EECON2設(shè)置為0x55和0xAA,WR設(shè)置為1開始寫Flash;WREN和SWDTEN設(shè)置為0寫Flash結(jié)束。

表1 上位機編碼協(xié)議格式

表2 下位機編碼協(xié)議格式
為了降低PIC單片機程序更新的難度,減少所需的人力物力,設(shè)計并實現(xiàn)一種核電廠配電柜常用的PIC單片機遠程程序升級的方法。該方法從編譯器獲得待更新程序,通過GPRS網(wǎng)絡(luò)使上位機與單片機建立點對點連接,然后用規(guī)定的數(shù)據(jù)格式將程序代碼傳給單片機,單片機先將分段程序存入外部存儲器,然后通過在線擦寫Flash的方法更新程序。為保證數(shù)據(jù)的可靠性,采用校驗和方法及特定的傳輸協(xié)議提高數(shù)據(jù)傳輸?shù)臏蚀_性。不僅適用于PIC單片機,也適用于具有在線擦寫Flash功能的單片機進行遠程程序升級。
[1]孫鑫,余安平.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[2]李榮正,王誠杰,戴國銀.PIC單片機原理及應(yīng)用[M].北京:北京航空航天大學出版社,2010.
[3]李景峰,楊麗娜,潘恒.Visual C++串口通信技術(shù)詳解[M].北京:機械工業(yè)出版社,2010.
TM933
B
〔編輯 王永洲〕