,,,,
(北京工業(yè)大學 信息學部,北京 100124)
基于LoRa技術的網(wǎng)絡終端無線程序升級系統(tǒng)研究*
高祥凱,耿淑琴,何蘊良,彭曉宏,侯立剛
(北京工業(yè)大學 信息學部,北京 100124)
設計了一種基于LoRa技術的STM32F4無線程序升級系統(tǒng)。此系統(tǒng)由PC及相關STM32軟件開發(fā)環(huán)境、LoRa通信模塊及其控制器和STM32F4終端三部分組成。本系統(tǒng)采用LoRa技術將程序數(shù)據(jù)無線發(fā)送到終端,終端通過IAP技術實現(xiàn)遠程無線程序自動升級。測試結(jié)果表明,此系統(tǒng)能夠有效地進行無線傳感網(wǎng)絡終端的程序升級,極大節(jié)約了時間和人力成本。
LoRa技術;STM32F4微控制器;IAP技術
近年來,基于物聯(lián)網(wǎng)應用的各種嵌入式產(chǎn)品層出不窮。但由于物聯(lián)網(wǎng)應用中節(jié)點眾多、分布廣泛,為嵌入式終端固件升級帶來了很多不便,于是遠程、無線程序升級方法便吸引了很多學者的研究,其中基于IAP編程模式的程序升級方法應用較多。參考文獻[1]提出了利用GPRS通信技術實現(xiàn)基于51單片機的遠程IAP功能;參考文獻[2]提出了一種基于HTTP協(xié)議的遠程嵌入式產(chǎn)品程序升級方法;參考文獻[3]實現(xiàn)了一種基于nRF905通信技術的無線程序編程器,可以實現(xiàn)對51系列單片機的無線程序燒寫;參考文獻[4]提到了Wi-Fi環(huán)境覆蓋下的嵌入式產(chǎn)品系統(tǒng)升級方法;參考文獻[5]提出了一種基于藍牙串口模塊,通過ymodem傳輸協(xié)議實現(xiàn)的IAP方案。
以上的程序升級方法很難在節(jié)點眾多的物聯(lián)網(wǎng)應用中取得廣泛應用。LoRa技術適合組建低功耗無線傳感網(wǎng)絡,廣泛應用于物聯(lián)網(wǎng)研究中,本文嘗試將LoRa技術和IAP技術相結(jié)合,實現(xiàn)了一種應用于STM32F4控制器的無線程序升級系統(tǒng)。采用此方案進行程序升級,節(jié)約了成本,減少了人力物力的消耗,對同類無線終端和節(jié)點的程序升級有借鑒意義。
IAP即在應用中編程,是指通過一種通信接口(USART、USB、CAN等)下載程序或應用數(shù)據(jù)到存儲器中。通常用戶在實現(xiàn)IAP功能時,需要人為地將芯片內(nèi)部存儲區(qū)分為兩塊:一塊用于存儲IAP程序,稱為BOOT區(qū);另一塊用于存儲除IAP功能外的應用程序,稱為常態(tài)存儲區(qū)。STM32F40X/41X系列芯片的FLASH存儲區(qū)域組織如表1所列。通過設置BOOT0和BOOT1兩引腳的高低電平可設置程序的啟動區(qū)域。一般將程序燒錄到主存儲區(qū)中,啟動區(qū)域應設置為主存儲區(qū)[6]。
STM32F4系列控制器加入IAP后,程序流程為:程序從主存儲區(qū)(0x0800 0000)處開始執(zhí)行,先取出棧頂?shù)刂罚缓笫菑臀恢袛嘞蛄?,跳轉(zhuǎn)至復位程序處執(zhí)行,接下來程序便跳轉(zhuǎn)至mian函數(shù)處(為IAP程序的main 函數(shù))執(zhí)行IAP過程。IAP過程中控制器會接收功能程序,寫入FLASH并執(zhí)行。執(zhí)行過程與IAP程序開始執(zhí)行過程相似,此時FLASH內(nèi)部存在著兩個不同位置的向量表,當應用程序運行時,產(chǎn)生的中斷首先仍然返回到地址為0x0800 0004處的向量表,然后根據(jù)所設置的向量表偏移量找到向量中斷源并執(zhí)行中斷服務程序,執(zhí)行完成后會返回應用程序的main函數(shù)。
表1 FLASH模塊組織
2.1 系統(tǒng)總體設計
本系統(tǒng)由PC及相關STM32軟件開發(fā)環(huán)境、LoRa通信模塊及其控制器和STM32F4終端三部分組成。利用STM32軟件開發(fā)工具完成程序的編寫、調(diào)試,生成bin文件;PC機與LoRa模塊控制器通過串口相連,收到數(shù)據(jù)后串口會將數(shù)據(jù)每512字節(jié)打成一個數(shù)據(jù)包,然后發(fā)送給LoRa模塊進行無線發(fā)送;與終端相連的LoRa模塊接收到數(shù)據(jù)后會發(fā)送給STM32F4終端,終端判斷完成數(shù)據(jù)接收后會寫入FLASH并執(zhí)行。
2.2 LoRa模塊及其控制器設計與分析
近些年來,LoRa技術因支持遠距離傳輸、大數(shù)量子節(jié)點和低功耗技術[7],在物聯(lián)網(wǎng)應用中取得了廣泛的使用。本設計采用成都億百特電子有限公司的E32-TTL-1W LoRa模塊,該模塊采用Semtech公司SX1278射頻芯片,傳輸距離最遠可達到8 km,工作頻段為411~441 MHz;該模塊支持4種工作模式和空中喚醒,可最大限度降低功耗;模塊通過串口實現(xiàn)外部通信,易于實現(xiàn)。該模塊共有7個引腳,通過串口實現(xiàn)與外部設備通信,引腳M0、M1用來設置模塊工作模式,AUX用來指示模塊工作狀態(tài)[8]。
圖1 LoRa模塊控制器程序流程圖
圖2 LoRa模塊與控制器連接圖
LoRa模塊控制器的程序流程圖如圖1所示,LoRa模塊與控制器的連接關系如圖2所示??刂破鲝腜C接收程序代碼,由于LoRa模塊接收緩存有限,控制器須將代碼分包,以一定時間間隔發(fā)送給LoRa模塊??刂破魃想姇瓿蓛蓚€串口的初始化,串口1用來接收PC發(fā)送的bin文件,串口6用來向LoRa模塊發(fā)送數(shù)據(jù)。串口1接收到數(shù)據(jù)后會進入串口接收中斷函數(shù),數(shù)據(jù)由DMA通道存儲到內(nèi)存特定區(qū)域,串口總線空閑中斷標志接收代碼完成。發(fā)送循環(huán)中,控制器每次將一個512字節(jié)的數(shù)據(jù)包(最后一次將剩余全部)發(fā)送給LoRa模塊。當LoRa模塊內(nèi)部緩沖區(qū)的數(shù)據(jù)被讀取時,AUX引腳的電平會發(fā)生變化,PA1引腳會捕捉AUX電平變化并產(chǎn)生中斷,中斷函數(shù)會設置發(fā)送下一個數(shù)據(jù)包,程序依次循環(huán)直至代碼發(fā)送完全。
由于AUX的變化只能表示LoRa模塊已開始發(fā)送緩沖區(qū)內(nèi)的數(shù)據(jù),并不能確保數(shù)據(jù)已被完全發(fā)送且接收方LoRa模塊也需要足夠的時間來接收數(shù)據(jù),因此發(fā)送下一個數(shù)據(jù)包之前會有一段延時,以確保完整的數(shù)據(jù)發(fā)送和接收,這個延時數(shù)值在應用中應根據(jù)無線傳輸?shù)木嚯x而定,不能小于數(shù)據(jù)從寫進發(fā)送端LoRa緩沖區(qū)到接收端完全接收的時間間隔,本系統(tǒng)中設置的時間為1 s,滿足這一要求。
2.3 終端程序設計與分析
2.3.1 終端IAP程序設計與分析
IAP程序以SWD方式下載至芯片中,IAP程序流程圖如圖3所示。
圖3 終端IAP程序流程圖
上電復位后,依照BOOT模式設置,程序會從主存儲區(qū)開始執(zhí)行IAP程序。首先完成初始化,LoRa模塊處于休眠狀態(tài);然后查詢存儲于FLASH地址為0x080E 0000處的變量更新標志位(upstate_mark)的值,如果該值為0x01,則表示程序需要等待更新,此時需將LoRa模塊從休眠狀態(tài)喚醒,終端會等待接收程序代碼。終端一旦通過串口接收到LoRa模塊發(fā)送的程序數(shù)據(jù),就會記錄所接收數(shù)據(jù)的長度,并且以1 s的時間間隔查詢數(shù)據(jù)長度,如有兩次發(fā)現(xiàn)數(shù)據(jù)長度不變,則判定接收完成,緊接著將update_mark置0x00,表示下次終端上電無需等待更新。應用程序代碼會被寫到起始地址為FLASH_APP1_ADDR的連續(xù)FLASH存儲區(qū)內(nèi)。在此終端程序中給它分配的值為0x0801 0000,即在此之前給IAP程序預留的空間為64 KB,通過Keil軟件查看編譯后的IAP程序代碼大小完全夠用。向FLASH寫入代碼前,首先要判斷一下復位向量所在的物理存儲空間是不是指向FLASH的,代碼如下:
(*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000;
確認無誤后,開始調(diào)用向FLASH寫應用程序函數(shù),代碼如下:
iap_write_app(FLASH_APP1_ADDR,(uint32_t)USART_RX_BUF,REC_CNT);
此函數(shù)會調(diào)用STM32F4開發(fā)庫中的寫FLASH函數(shù),代碼如下:
if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE){ //寫入FLASH
break;}
WriteAddr+=4;
pBuffer++;
……
FLASH_ProgramWord()每次會向FLASH寫入一個字(4字節(jié)),接收數(shù)組是字節(jié)類型的,因此調(diào)用時要強制地址類型轉(zhuǎn)換。執(zhí)行完寫程序后,將upstate_mark變量重寫為0x00,下次上電復位標志無需等待更新,直接執(zhí)行程序跳轉(zhuǎn)。代碼如下:
if(((*(vu32 *)App1Addr)&0x2FFE0000)==0x20000000){
//檢查棧頂?shù)刂肥欠窈戏?/p>
JumpToApp=(iapfun)*(vu32*)( App1Addr +4);
//取出復位函數(shù)地址
MSR_MSP(*(vu32*) App1Addr);
//設置主堆棧指針
JumpToApp ();
//跳轉(zhuǎn)執(zhí)行應用程序
}
首先檢查棧頂?shù)刂肥欠窈戏ǎ珹pp1Addr為應用程序地址,程序代碼第一個字為棧頂?shù)刂罚袛鄺m數(shù)刂肥欠裨?x2000 0000~0x2001 FFFF(RAM區(qū)域)范圍內(nèi);取出應用程序復位函數(shù)地址;設置棧指針;程序跳轉(zhuǎn)到應用程序復位函數(shù)地址處,應用程序開始執(zhí)行[9]。
2.3.2 終端IAP程序設計與分析
終端應用程序中首先要設置中斷向量表偏移量:SCB->VTOR = FLASH_BASE|0x1 0000;這樣在main函數(shù)執(zhí)行過程中,如果CPU得到一個中斷請求,PC指針仍強制跳轉(zhuǎn)到地址0x0800 0004中斷向量表處,然后再根據(jù)設置的中斷向量表偏移量跳轉(zhuǎn)到對應中斷服務程序中,最后進入正常的應用程序功能。
圖4 終端應用程序流程圖
當終端正常運行時要進行程序升級,只需通過LoRa模塊向指定終端發(fā)送更新指令(本次系統(tǒng)設置為“up”兩個字節(jié)),終端收到指令后將update_mark置0x01,緊接著執(zhí)行一次軟件復位,程序?qū)⒃俅芜M入到IAP程序,檢查到update_mark為0x01會一直等待接收程序,從而可以完成程序的升級。終端應用程序流程圖如圖4所示。
本文實驗所采用的STM32F4終端為ST官方開發(fā)板STM32F4DICOVERY,實驗在同一樓層內(nèi)相距約40 m的兩間實驗室內(nèi)進行。PC通過串口發(fā)送給LoRa控制器,控制器返回一些信息用來提示程序進程,每發(fā)送完一個512字節(jié)的數(shù)據(jù)包,就會返回一個blockxover信息,以便查看程序進程。
本文通過連續(xù)兩次對同一終端進行程序更新,首先在PC上完成第一個程序的編譯調(diào)試,得到程序bin文件大小為3.25 KB,發(fā)送完成后檢測終端運行情況正常。之后如果需要再次更新程序,先發(fā)送更新指令(本次設計為字符串“up”),然后發(fā)送第二個程序bin文件即可,本次實驗第二個應用程序編譯之后bin文件大小為4.52 KB。
進行實驗時,PC端發(fā)送完程序后,在另一個實驗地點觀察終端指示燈LD3的狀態(tài),當終端運行IAP程序時,LD3處于熄滅狀態(tài),當其點亮的時候表明應用程序已開始運行,此時檢驗終端功能是否與程序一致。先后下載的兩個應用程序與預期結(jié)果表現(xiàn)一致,驗證了本系統(tǒng)的可靠性。
[1] 胡靜靜.實現(xiàn)基于GPRS的無線遠程IAP功能[J].單片機與嵌入式系統(tǒng)應用, 2005(6):21-23,38.
[2] QINGQING X.A design and implement of IAP based on HTTP[C]//proceedings of the 2011 International Conference on Computer Science and Service System (CSSS),2011.
[3] 薛秀云,洪添勝,宋淑然,等.基于無線通信技術的程序編程器[J].沈陽農(nóng)業(yè)大學學報,2013,44(3):15-20.
[4] ZAWARE P G,SHINDE S V.Wireless monitoring, control-
ling and firmware upgradation of embedded devices using Wi-Fi[C]//Proceedings of the 2014 International Conference on Advances in Communication and Computing Technologies (ICACACT 2014),2014.
[5] 徐洋,馬躍.STM32F103系列微控制器在應用編程技術研究[J].單片機與嵌入式系統(tǒng)應用,2013(8):35-37,40.
[6] STMicroelectronics.DM00031020 F4xx Reference Manual[EB/OL].[2017-06].http://www.stmcu.org/document.
[7] STAN V A,TIMNEA R S,GHEORGHIU R A.Overview of high reliable radio data infrastructures for public automation applications:LoRa networks[C]//Proceedings of the 2016 8th International Conference on Electronics,Computers and Artificial Intelligence,2016.
[8] 成都億百特電子科技有限公司.AN001產(chǎn)品應用手冊[EB/OL].[2017-06].http://www.cdebyte.com.
[9] 張舞杰,南亦民.基于STM32F103VB的應用編程技術的實現(xiàn)[J].計算機應用,2009(10):2820-2822.
高祥凱(碩士研究生),主要研究方向為無線傳感器網(wǎng)絡; 耿淑琴(高級講師),主要研究方向為射頻識別、無線傳感網(wǎng)等;何蘊良(碩士研究生),主要研究方向為集成電路設計與系統(tǒng)集成。
參考文獻
[1] 王誠.Altera FPGA/CPLD設計(基礎篇)[M].2版.北京:人民郵電出版社,2011.
[2] 吳厚航.FPGA/CPLD邊練邊學——快速入門Verilog/VHDL[M].北京:北京航空航天大學出版社,2013.
[3] 王忠林.基于Quartus II的CPLD的數(shù)字系統(tǒng)設計與實現(xiàn)[M].北京:機械工業(yè)出版社,2012.
[4] Altera.Altera Device Package Information[EB/OL].[2017-05].https://www.altera.com.cn/.
[5] Altera.MAX V Device Handbook[EB/OL].[2017-05].https://www.altera.com.cn/.
[6] Altera.MAX V Device Family Pin Connection Guidelines[EB/OL].[2017-05].https://www.altera.com.cn/.
[7] Altera.Pin Information for the MAX V 5M570Z Device[EB/OL].[2017-05].https://www.altera.com.cn/.
[8] Altera.MAX V Device Family Overview[EB/OL].[2017-05].https://www.altera.com.cn/.
WirelessProgramUpdatingSystemofNetworkTerminalBasedonLoRaTechnology
GaoXiangkai,GengShuqin,HeYunliang,PengXiaohong,HouLigang
(College of Information Technology,Beijing University of Technology,Beijing 100124,China)
In the paper,a wireless program updating system of STM32F4 microcontroller based on LoRa technology is proposed.The system consists of three parts:a PC and related software development tools,the communication module of LoRa with microcontroller and STM32F4 terminal.The wireless communication between the terminal and the PC is achieved through LoRa technology,and the terminal could update its program automatically using IAP technology.The experiment results show that it’s an effective method for wireless program updating with saving time and labor costs.
LoRa technology;STM32F4 microcontroller;IAP technology
北京市自然科學基金(Z2002013201501);北京市自然科學基金資助項目(4172010)。
TP311
A
2017-06-02)
(責任編輯:薛士然 收稿日期:2017-05-12)