白志峰 徐曉丹
摘 要:本文著重介紹了基于單片機(jī)的遠(yuǎn)程升級(jí)在節(jié)水灌溉控制器上的應(yīng)用,單片機(jī)選用NXP的LPC1763,利用該芯片的IAP功能,采用雙用戶程序區(qū)的設(shè)計(jì)思路,有效的防止了升級(jí)過(guò)程中通訊故障或意外斷電等問(wèn)題造成的遠(yuǎn)程升級(jí)失敗而導(dǎo)致的產(chǎn)品失控問(wèn)題,有效的保證了遠(yuǎn)程升級(jí)的可靠性。
關(guān)鍵詞:節(jié)水灌溉 遠(yuǎn)程升級(jí) 無(wú)線通訊 單片機(jī)
中圖分類號(hào):TP311.52文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1003-9082(2020)02-000-01
根據(jù)我國(guó)的水資源現(xiàn)狀,我國(guó)政府部門提出了節(jié)水灌溉的號(hào)召,大量的節(jié)水灌溉控制器應(yīng)運(yùn)而生。由于我國(guó)地域遼闊,不同地方的水資源情況和農(nóng)田分布情況差別較大,統(tǒng)一采用一種控制方式很不實(shí)際,要根據(jù)不同的地域設(shè)計(jì)不同的控制策略;另外,由于國(guó)內(nèi)灌溉區(qū)域分布較廣,現(xiàn)場(chǎng)維護(hù)升級(jí)費(fèi)時(shí)費(fèi)力[1]。針對(duì)這些問(wèn)題,我們需要在節(jié)水灌溉控制器中設(shè)計(jì)遠(yuǎn)程升級(jí)功能。
當(dāng)前嵌入式設(shè)備的程序升級(jí)大都利用主控芯片的IAP功能,將Flash劃分為2個(gè)區(qū),一個(gè)區(qū)存儲(chǔ)引導(dǎo)程序,該引導(dǎo)程序可以實(shí)現(xiàn)數(shù)據(jù)通訊及用戶區(qū)程序擦寫(xiě)操作,另一個(gè)區(qū)存儲(chǔ)用戶程序。當(dāng)設(shè)備需要升級(jí)時(shí),先擦除用戶程序,然后再接收新的固件代碼并將其存儲(chǔ)在用戶程序區(qū),實(shí)現(xiàn)遠(yuǎn)程在線升級(jí)更新。這種程序升級(jí)方法適合于通訊狀況良好的場(chǎng)合,但農(nóng)田罐區(qū)一般都分布在非人口聚集區(qū),網(wǎng)絡(luò)通訊狀況較差,且經(jīng)常會(huì)出現(xiàn)意外斷電的情況,針對(duì)這種情況我們?cè)谠O(shè)計(jì)時(shí)采用了雙用戶程序區(qū)的設(shè)計(jì)思路,即設(shè)計(jì)了兩個(gè)用戶程序存儲(chǔ)區(qū),升級(jí)程序時(shí)不擦除當(dāng)前運(yùn)行的程序代碼,而是把新固件放置在另外一個(gè)用戶程序區(qū),待固件下載完畢檢驗(yàn)無(wú)誤后再跳轉(zhuǎn)到新的代碼區(qū)執(zhí)行,采用這種方法極大的提高了設(shè)備的穩(wěn)定性。
一、硬件設(shè)計(jì)
節(jié)水灌溉控制器采用NXP半導(dǎo)體公司的LPC1763FBD100作為主控芯片,該芯片采用ARMCortex-M3內(nèi)核,內(nèi)部集成Flash容量為256KB,該芯片支持在線編程和啟動(dòng)引導(dǎo)功能,可以實(shí)現(xiàn)遠(yuǎn)程程序升級(jí)功能。
節(jié)水灌溉控制器的無(wú)線通訊采用了有人科技的USR-GM3無(wú)線通訊模塊,支持串口轉(zhuǎn)GPRS的透明傳輸,該模塊與主控芯片LPC1763采用Uart接口連接,通過(guò)GPRS與數(shù)據(jù)中心的服務(wù)器連接,如圖1所示。
二、軟件設(shè)計(jì)
將LPC1763的代碼區(qū)域分為四個(gè)區(qū),有一個(gè)IAP程序區(qū),一個(gè)標(biāo)志存儲(chǔ)區(qū)和兩個(gè)用戶區(qū),如表1所示為各區(qū)在Flash中的地址分配情況。兩個(gè)用戶區(qū)可以存儲(chǔ)用戶固件,用戶區(qū)和IAP程序區(qū)之間可以相互跳轉(zhuǎn)運(yùn)行。
IAP程序區(qū)中存儲(chǔ)的代碼主要用于負(fù)責(zé)管理遠(yuǎn)程升級(jí),確定當(dāng)前運(yùn)行程序使用第一用戶區(qū)的固件1還是使用第二用戶區(qū)的固件2,程序第一次正常運(yùn)行時(shí)是使用第一用戶區(qū)的固件1運(yùn)行的,當(dāng)?shù)谝挥脩魠^(qū)的固件在運(yùn)行過(guò)程中檢測(cè)到遠(yuǎn)程升級(jí)請(qǐng)求時(shí),代碼跳轉(zhuǎn)到IAP程序區(qū)運(yùn)行,IAP程序負(fù)責(zé)驗(yàn)證遠(yuǎn)程升級(jí)的確定性,檢查當(dāng)前用戶使用的固件程序所在的區(qū)域位置(稱為當(dāng)前固件存儲(chǔ)區(qū)),確定非當(dāng)前固件存儲(chǔ)區(qū),在確保校驗(yàn)正確的情況下,將遠(yuǎn)程升級(jí)代碼下載到非當(dāng)前固件存儲(chǔ)區(qū),下載完畢且校驗(yàn)正確后,IAP程序?qū)⒆钚孪螺d固件的存儲(chǔ)區(qū)設(shè)置為當(dāng)前固件存儲(chǔ)區(qū),并修改相應(yīng)的標(biāo)志位,跳轉(zhuǎn)到最新固件存儲(chǔ)區(qū)開(kāi)始運(yùn)行,完成遠(yuǎn)程升級(jí),如圖2所示為IAP程序流程圖。
三、通訊協(xié)議
為了確保安全,在通訊協(xié)議中設(shè)計(jì)了握手、安全認(rèn)證等環(huán)節(jié),所有通訊都采用CRC校驗(yàn)方式,確保數(shù)據(jù)準(zhǔn)確可靠,具體通訊格式如下表
其中的8字節(jié)地址為控制器出廠時(shí)的唯一指定地址,數(shù)據(jù)長(zhǎng)度為數(shù)據(jù)域長(zhǎng)度,總報(bào)數(shù)和包號(hào)只對(duì)程序包傳輸有效,對(duì)于其他指令無(wú)效,用0x000x00填充。CRC校驗(yàn)為數(shù)據(jù)幀所有數(shù)據(jù)的16位冗余校驗(yàn),控制器響應(yīng)指令中的數(shù)據(jù)域主要反映接收數(shù)據(jù)包是否正確,正確為0x1A,否則為0xA1,服務(wù)器下發(fā)指令和控制器響應(yīng)指令中的命令字均相同。
四、測(cè)試
對(duì)在農(nóng)田灌溉現(xiàn)場(chǎng)應(yīng)用的節(jié)水灌溉控制器進(jìn)行遠(yuǎn)程程序升級(jí)測(cè)試,發(fā)現(xiàn)對(duì)于網(wǎng)絡(luò)狀況不好的地區(qū)的控制器升級(jí)需要盡量用比較小的數(shù)據(jù)包一次成功率更高,單包數(shù)據(jù)不超過(guò)1Kbyte為宜,經(jīng)過(guò)多次對(duì)不同地區(qū)的遠(yuǎn)程升級(jí)測(cè)試,沒(méi)有發(fā)現(xiàn)因?yàn)橐馔鈹嚯娀蚓W(wǎng)絡(luò)不暢而出現(xiàn)控制器失靈的問(wèn)題。
五、結(jié)論
在節(jié)水灌溉控制上采用雙用戶程序區(qū)的遠(yuǎn)程升級(jí)方法有效的避免了升級(jí)過(guò)程中意外斷電或網(wǎng)絡(luò)中斷造成的控制器完全失靈的問(wèn)題,由于GPRS通訊的速率相對(duì)較低,而且有些偏遠(yuǎn)地區(qū)信號(hào)狀況較差,需要使用較小的數(shù)據(jù)包傳輸數(shù)據(jù),升級(jí)用時(shí)相對(duì)較長(zhǎng),隨著無(wú)線通訊速度和無(wú)線通訊質(zhì)量的不斷提高,這些問(wèn)題都會(huì)被解決。
參考文獻(xiàn)
[1]劉曉.節(jié)水灌溉控制技術(shù)研究綜述[J].電子世界,2019.