針對嵌入式終端設(shè)備架設(shè)分散、數(shù)量龐大以及應(yīng)用程序更新迭代速度快帶來的程序升級困難局面,運用STM32微控制器的在應(yīng)用中編程(IAP)原理,設(shè)計了通過以太網(wǎng)遠(yuǎn)程升級程序的方案。
HTTP協(xié)議和LwIP協(xié)議的使用,不僅讓整個方案具備高安全性、可靠性。易用性,還有效降低了硬件資源的消耗。該方案穩(wěn)定、可靠、操作簡單,可以廣泛應(yīng)用于網(wǎng)絡(luò)環(huán)境下的IAP升級,具有較高的推廣價值。
引言
目前STM32設(shè)備程序升級的通用解決方案是使用在應(yīng)用中編程(IAP)原理進(jìn)行設(shè)計,通過串口、USB、4G無線模塊等通信方式將待升級程序文件傳輸至設(shè)備端,然后直接寫入用戶程序存儲區(qū)來實現(xiàn)。
在實際使用場景中,串口、USB的方式不支持遠(yuǎn)程操作,而4G無線模塊通信穩(wěn)定性較差,硬件成本較高。
針對上述問題,本文以某信號處理項目健康管理單元模塊為背景,開展使用以太網(wǎng)通信方式實現(xiàn)程序遠(yuǎn)程升級方法的研究,使用輕量化的通信協(xié)議以減少對內(nèi)存資源的占用,并提供精簡、安全的網(wǎng)頁操作界面供用戶使用。
LwIP協(xié)議
LwIP是一個小型開源的TCP/IP協(xié)議棧,有無操作系統(tǒng)的支持都可以運行,其實現(xiàn)的重點是在保持TCP協(xié)議主要功能的基礎(chǔ)上最大程序地減少對設(shè)備內(nèi)存的占用,以便在硬件資源緊張的嵌入式系統(tǒng)中使用。
其源代碼全部使用C語言實現(xiàn),開發(fā)人員可以方便地實現(xiàn)跨處理器、跨操作系統(tǒng)的移植。
數(shù)據(jù)流向
基于LwIP內(nèi)核自身的內(nèi)存管理策略和網(wǎng)絡(luò)數(shù)據(jù)包管理策略,網(wǎng)卡數(shù)據(jù)傳入LwIP內(nèi)核的流程大致如下:當(dāng)網(wǎng)口接收到網(wǎng)絡(luò)數(shù)據(jù)產(chǎn)生一個中斷后就會釋放一個信號量,通知網(wǎng)卡接收數(shù)據(jù)區(qū)處理這些收到的數(shù)據(jù),再將這些數(shù)據(jù)封裝成消息投遞到tcpip_mbox郵箱中,LwIP內(nèi)核線程得到這個消息后就對其進(jìn)行解析,根據(jù)消息中數(shù)據(jù)包的類型進(jìn)行處理,同時調(diào)用ethernet_input函數(shù)決定是否遞交到IP層。
如果是ARP包,內(nèi)核就不會遞交給IP層,僅僅只更新ARP緩存表;如果是IP數(shù)據(jù)包,則遞交給IP層去處理。
這樣的數(shù)據(jù)流向使內(nèi)核處理數(shù)據(jù)包的效率得到較大提升,且各層之間保持相對獨立,某一層并不需要指定下一層如何實現(xiàn),僅需知道該層通過層間接口所提供的服務(wù)即可。用戶程序與內(nèi)核是完全獨立的,通過操作系統(tǒng)進(jìn)程間通信機制進(jìn)行數(shù)據(jù)交互。
HTTP服務(wù)器
HTTP是用于從萬維網(wǎng)服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議,它是基于TCP/IP通信的,使用“客服端-服務(wù)器”模型運作,是一個應(yīng)用層協(xié)議,可以用來傳輸服務(wù)器的各種資源,如文本、圖片、音頻等,本設(shè)計用它來傳輸應(yīng)用程序的二進(jìn)制文件。
資源管理
統(tǒng)一資源標(biāo)識符(URI)是一個通用的概念,由2個子集組成,分別是統(tǒng)一資源定位符(URL)和統(tǒng)一資源名稱(URN)。
URL是互聯(lián)網(wǎng)上用來標(biāo)識某一處資源的絕對地址,即通過資源的位置來標(biāo)識資源,使用它就能找到資源。
其通用格式如下:??/:@:/
;?#
URL不一定包含所有的組件內(nèi)容,常用的URL組件如表1所示。
本方案中升級網(wǎng)頁的地址http://192.168.0.12就是一個最簡單的URL,地址中的數(shù)字同時也是設(shè)備的IP地址,改變IP地址即可切換到局域網(wǎng)內(nèi)不同終端設(shè)備的升級網(wǎng)頁,有效提升程序升級效率。
HTTP報文
HTTP報文是在http應(yīng)用程序之間發(fā)送的數(shù)據(jù)塊,它包裹著請求數(shù)據(jù)交換的信息。
HTTP報文分請求報文和響應(yīng)報文,其結(jié)構(gòu)基本相同,分為:
- 起始行,它描述請求或響應(yīng)的基本信息
- 頭部,它使用關(guān)鍵詞-數(shù)值的形式詳細(xì)地說明報文
- 實體,即實際傳輸?shù)臄?shù)據(jù),可以使純文本,圖片,視頻等二進(jìn)制數(shù)據(jù)。
一個完整的HTTP報文如圖所示,需要特別注意的是,頭部和實體之間有一個空行。
請求行
請求報文的起始行稱為請求行,它簡要描述了客戶端想要如何操作服務(wù)器的資源。
請求行的構(gòu)成:
- 請求方法:GET/POST,表示對資源的操作。
- 請求目標(biāo),通常是一個URI,標(biāo)記了請求方法要操作的資源。
- 版本,表示報文使用的HTTP協(xié)議版本。
狀態(tài)行
響應(yīng)報文的起始行又稱為狀態(tài)行,主要用來標(biāo)識服務(wù)器響應(yīng)的狀態(tài)。
狀態(tài)行的構(gòu)成:
4. 版本,表示報文使用的HTTP協(xié)議版本。
5. 狀態(tài)碼,一個3位數(shù),用代碼的形式表示處理結(jié)果,比如200是成功,500是服務(wù)器錯誤。
6. 原因,作為數(shù)字狀態(tài)碼補充,是更詳細(xì)的解釋文字,幫助人理解原因。
總體架構(gòu)
系統(tǒng)主要由遠(yuǎn)程電腦主機、嵌入式終端設(shè)備組成,2者通過網(wǎng)線接入到同一局域網(wǎng)。
當(dāng)終端設(shè)備需要進(jìn)行程序升級時,在電腦主機端通過網(wǎng)頁登錄HTTP服務(wù)器,輸入用戶名和密碼進(jìn)入到程序升級網(wǎng)頁,然后選擇目標(biāo)程序文件并點擊升級按鈕,即可對設(shè)備程序進(jìn)行升級。
在嵌入式設(shè)備端,系統(tǒng)引導(dǎo)程序加載完畢后,首先檢查是否需要對設(shè)備程序進(jìn)行升級,若檢查到標(biāo)志位,則通過以太網(wǎng)接口接收目標(biāo)程序文件,校驗成功后燒寫到用戶應(yīng)用程序分區(qū)中,接著復(fù)位系統(tǒng),便可運行升級后的用戶應(yīng)用程序;若為檢測到標(biāo)志位,則直接運行用戶原來的應(yīng)用程序。
相比采用串口、USB、無線模塊等實現(xiàn)的在線升級功能,本方案對于設(shè)備維護人員來說,無需進(jìn)行復(fù)雜的接線操作,免去上位機繁瑣的安裝及設(shè)置過程,只要電腦主機和設(shè)備端位于同一局域網(wǎng)即可。
LwIP支持的通信協(xié)議較為完整,支持多種編程接口,開源免費,其流暢運行只需要40kB的存儲空間和幾十kB的運行內(nèi)存,消耗的硬件資源較少。
升級代碼由跳轉(zhuǎn)檢測代碼和用戶程序燒寫代碼2部分組成,當(dāng)檢測代碼識別到升級標(biāo)志位后,系統(tǒng)則等待網(wǎng)絡(luò)中傳來的程序文件。程序文件傳送完畢且校驗無誤后,隨機跳轉(zhuǎn)到用戶程序區(qū)燒寫代碼,完成終端設(shè)備的程序升級工作。
跳轉(zhuǎn)代碼
為了區(qū)別IAP模式與正常運行的用戶程序,系統(tǒng)在初始化完外圍器件后需要讀取一個狀態(tài)標(biāo)志位來確定是否進(jìn)行用戶程序升級。
使用內(nèi)部存儲區(qū)的某個特定區(qū)域來存放升級標(biāo)志位,當(dāng)程序讀取到該標(biāo)志位后便進(jìn)入IAP模式,否則直接運行用戶應(yīng)用程序。文章來源:http://www.zghlxwxcb.cn/news/detail-672130.html
當(dāng)跳轉(zhuǎn)程序檢查棧頂?shù)刂泛戏ê蟊阍O(shè)置用戶代碼區(qū)第二個字位程序開始地址,接著初始化應(yīng)用程序堆棧指針,最后跳轉(zhuǎn)到應(yīng)用程序,等待接收升級文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-672130.html
到了這里,關(guān)于HTTP模式下STM32程序遠(yuǎn)程升級設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!