国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于STM32的程序遠程升級設(shè)計與實現(xiàn)

2016-09-08 01:35張巖松葛俊鋒胡文月
電子設(shè)計工程 2016年1期
關(guān)鍵詞:堆棧微控制器以太網(wǎng)

張巖松,葛俊鋒,葉 林,胡文月

(華中科技大學(xué) 自動化學(xué)院,湖北 武漢 430074)

基于STM32的程序遠程升級設(shè)計與實現(xiàn)

張巖松,葛俊鋒,葉 林,胡文月

(華中科技大學(xué) 自動化學(xué)院,湖北 武漢430074)

隨著各類嵌入式設(shè)備的廣泛應(yīng)用,對嵌入式設(shè)備程序升級的需求也愈發(fā)強烈。文中在闡述“在應(yīng)用中編程(In Application Program,IAP):原理的基礎(chǔ)上,以STM32為平臺,設(shè)計了通過以太網(wǎng)升級程序的方案,實現(xiàn)了以STM32為代表的嵌入式設(shè)備程序固件的實時升級,滿足了相關(guān)需求,更為物聯(lián)網(wǎng)和智能化設(shè)備的功能完善提供了指導(dǎo)和幫助。

IAP;STM32;程序遠程升級;物聯(lián)網(wǎng)

IAP是除ICP和ISP外一種方便快捷的應(yīng)用程序更新方法。用戶可以在遠程無需通過機械操作實現(xiàn)對目標板程序的實時更新操作,通信方式可以選擇串口、以太網(wǎng)、WIFI等多種方式,可以有效解決在遠程苛刻條件下用戶程序不能及時更新的問題。該技術(shù)提高了嵌入式系統(tǒng)的可拓展性與可維護性,在物聯(lián)網(wǎng)項目中具有實際應(yīng)用價值。文中首先介紹了IAP的工作原理、程序流程及燒寫細節(jié),并以此為基礎(chǔ),分別對STM32系列微控制器的互聯(lián)型和非互聯(lián)型兩大類MCU產(chǎn)品設(shè)計了遠程程序升級方案,實現(xiàn)了對STM32全產(chǎn)品類的程序升級支持,即可通過以太網(wǎng)遠程實時升級STM32上的用戶程序。

表1 STM32啟動模式Tab.1 Start mode of STM32

圖1 儲存器映像Fig.1 Memory map

1 IAP原理

1.1儲存結(jié)構(gòu)

STM32是一種32位微處理器[1],共有4GB線性地址空間,分為8個主要存儲塊,每個塊512MB。其中第一塊為代碼區(qū),內(nèi)部包括嵌入式閃存、系統(tǒng)存儲區(qū)、選項字節(jié)等。第二塊內(nèi)部包含嵌入式SRAM區(qū)等。系統(tǒng)的外設(shè)地址及廠商定制的外設(shè)地址分布在其余存儲塊中。

對于STM32,可以通過BOOT[1:0]引腳選擇3種不同啟動模式。

一般來說,程序的代碼文件及常量存儲在閃存存儲器,程序的變量、堆棧存儲在SRAM區(qū)。程序文件的大小受閃存及SARM的限制,用戶程序的代碼文件及常量占用存儲區(qū)的大小要小于閃存存儲區(qū)總?cè)萘?,用戶的變量及堆棧占用?nèi)存的大小要小于STM32的SARM容量。否則,程序不能運行或運行時發(fā)生崩潰。

表2 互聯(lián)型STM32儲存器組織結(jié)構(gòu)Tab.2 Memory structure of the STM32 connectivity line

不同型號的STM32閃存儲存器容量不同[2],分為小容量(16K-32K)、中容量(64K-128K)、大容量(256K-512K)以及互聯(lián)型(105及107系列微控制器);而按照不同容量,儲存器組織成32個1K字節(jié)/頁(小容量)、128個1K字節(jié)/頁(中容量)、128個2K字節(jié)/頁(互聯(lián)型)、256個2K字節(jié)/頁(大容量)的主存儲器塊和一個信息塊。

1.2基本原理

IAP即是在正在運行程序的微控制器上對其閃存區(qū)部分進行燒寫[3],燒寫完成后,微控制器的程序指針及堆棧指針重定向,指向新寫入的程序代碼段和重新初始化的堆棧,執(zhí)行新程序,從而實現(xiàn)程序的在線升級。要實現(xiàn)IAP功能,需要兩個項目程序代碼,第一個項目程序代碼可以定義為裝載程序,第二個項目程序代碼可以定義為用戶程序。兩個項目程序文件分別存儲在人為劃分的兩個不同閃存存儲器存儲區(qū)。特別的,也可以同時存在多個用戶程序文件,分別存儲在由人為劃分的閃存存儲器的不同分區(qū)中。當閃存存儲區(qū)存儲多個程序文件時,微控制器在同一時刻只能單獨執(zhí)行一個項目程序,當需要升級用戶程序或要執(zhí)行其他用戶項目程序時,需要微控制器執(zhí)行跳轉(zhuǎn),執(zhí)行目標程序代碼。

2 IAP實現(xiàn)

2.1裝載程序

IAP的實現(xiàn)有賴于一個邏輯清晰、代碼簡明的裝載程序,負責(zé)管理和更新用戶程序。微控制器上電或者復(fù)位后,系統(tǒng)首先執(zhí)行啟動程序,啟動程序的工作即是初始化堆棧及微控制器內(nèi)核,對于STM32來說,即是其CM-3內(nèi)核,完成初始化工作后,系統(tǒng)開始執(zhí)行main函數(shù),在main函數(shù)中,首先判斷在閃存中指定地址設(shè)置的標志位是否被改寫[4],若已被改寫,則說明用戶程序文件已成功燒寫至指定閃存存儲器區(qū),則接下來執(zhí)行程序跳轉(zhuǎn),程序指針重定向并指向用戶程序文件起始地址,堆棧指針指向用戶堆棧的起始地址,對于實現(xiàn)IAP功能的微控制器來說,裝載程序與用戶程序共用同一段SARM空間,所以在執(zhí)行程序跳轉(zhuǎn)過程中,在確定堆棧指針指向堆棧起始位置的同時,要清空堆棧以留出空間供用戶程序使用。若閃存中指定地址設(shè)置的標志位未被改寫,則說明需要對用戶程序進行更新,則下一步執(zhí)行時鐘和外設(shè)的初始化,完成初始化后開始接收待更新的用戶程序文件,直至接收完成。完成對用戶程序文件的接收后則開始在預(yù)先人為設(shè)定的位置燒寫用戶程序文件至閃存存儲器。確定燒寫完成且無誤后,改寫在指定地址設(shè)置的標志位,執(zhí)行軟件復(fù)位。微控制器復(fù)位后重新對標志位進行判斷,這時閃存中指定地址設(shè)置的標志位已被改寫,系統(tǒng)跳轉(zhuǎn)執(zhí)行新的用戶程序,整個程序更新工作完成。

圖2 裝載程序流程圖Fig.2 Flow chart of the boot software design

程序跳轉(zhuǎn)的代碼如下:

//定義pFunction為函數(shù)指針數(shù)據(jù)類型

typedef void(*pFunction)(void);

//取出閃存指定地址中的數(shù)據(jù)

//判斷取出數(shù)據(jù)是否與設(shè)定標志位數(shù)據(jù)相同

//判斷用戶代碼的堆棧地址是否落在 0x20000000~ 0x2001ffff區(qū)間中,即小于RAM的128K容量

//取堆棧的棧頂?shù)刂?/p>

//取復(fù)位地址

//強制類型轉(zhuǎn)換為程序指針

//將用戶代碼的棧頂?shù)刂吩O(shè)為棧頂指針

//設(shè)置程序指針為復(fù)位地址

其中,USER_FLASH_FLAG_PAGE_ADDRESS為用戶設(shè)定的閃存存儲器指定標志位地址,USER_FLASH_FLAG_ VALUE為用戶設(shè)定的閃存標志位數(shù)據(jù)內(nèi)容,USER_FLASH_FIRST_PAGE_ADDRESS為用戶設(shè)定的燒寫用戶程序文件到指定的閃存存儲區(qū)的起始地址。STM32上電后后檢測BOOT引腳的電平來決定程序指針的位置,如BOOT設(shè)置為FLASH啟動,啟動后微處理器會先取兩個地址:一個是棧頂?shù)刂?,另一個是復(fù)位地址。

2.2用戶程序

用戶程序除了負責(zé)實現(xiàn)用戶目標功能外,還要配合裝載程序,在接收升級命令后實現(xiàn)對裝載程序的跳轉(zhuǎn)[5]。一般地,當一個項目程序開始響應(yīng)一個中斷后,系統(tǒng)會自動定位一張向量表,并且根據(jù)中斷號從表中找出中斷服務(wù)程序的入口地址,然后跳轉(zhuǎn)過去執(zhí)行。而在這里的用戶程序中,中斷向量表的起始地址與原閃存中存儲的中斷向量表已發(fā)生偏移,所以中斷向量表需要重定向,即配置向量表偏移量寄存器,使之指向新的向量表。在用戶程序的開始首先完成中斷向量表的重定向,接著對系統(tǒng)進行初始化,然后完成用戶程序目標功能,在這個過程中,用戶程序利用中斷或者輪詢一直在監(jiān)聽串口命令,若得到升級程序命令則擦除閃存存儲器中指定位置設(shè)置的標志位,進而執(zhí)行軟件復(fù)位,使系統(tǒng)開始執(zhí)行裝載程序。

圖3 用戶程序流程圖Fig.3 Flow chart of the user software design

要實現(xiàn)系統(tǒng)軟件復(fù)位,一般有3種方法:看門狗超時引起復(fù)位、軟件復(fù)位、自編匯編代碼。3種方法本質(zhì)上相同,這里具體介紹利用庫函數(shù)軟件復(fù)位的方法:

__set_FAULTMASK(1);

NVIC_SystemReset();

__set_FAULTMASK()是系統(tǒng)封裝的匯編代碼,參數(shù)為1時執(zhí)行FAULTMASK復(fù)位;FAULTMASK是一個只有1個位的寄存器。當它置1時,只有NMI中斷才能響應(yīng),所有其他的異常,包括硬fault中斷都被屏蔽。NVIC_SystemReset()是STM32庫函數(shù),實現(xiàn)系統(tǒng)軟件復(fù)位。STM32為實現(xiàn)軟件復(fù)位專門劃出了一個寄存器用來做這種軟件復(fù)位功能,即SCB-> AIRCR寄存器。我們只需置位該寄存器的SYSRESETREQ位即可把內(nèi)核送往系統(tǒng)復(fù)位發(fā)生器的請求線置為有效,從而引起整個芯片系統(tǒng)的復(fù)位。一般從SYSRESETREQ被置為有效,到復(fù)位發(fā)生器執(zhí)行復(fù)位命令,往往會有一個延時。在此延時期間,處理器仍然可以響應(yīng)中斷請求。為防止處理器進入其他中斷服務(wù)程序,最好在發(fā)出復(fù)位請求前,先把FAULTMASK置位。

2.3程序文件的生成和燒寫

裝載程序和用戶程序的代碼經(jīng)過編譯、鏈接生成可執(zhí)行文件,而最終燒寫進閃存中的程序文件一般需要特定的文件格式。hex文件和bin文件是燒寫程序常用的兩種文件格式,其中hex文件包含地址等信息,而bin文件只包含數(shù)據(jù)本身,所以在燒寫hex文件時,一般不需指定地址,而燒寫bin文件時,需要指定燒寫的地址。

由于hex文件用ASCII來表示數(shù)據(jù),且文件中包含其他附加信息,hex文件一般大于bin文件。在升級程序時,用戶程序一般采用bin文件格式。一般通過MDK軟件可以直接生成hex文件以及.axf文件,利用MDK軟件自帶的格式轉(zhuǎn)換工具fromelf.exe,可以實現(xiàn).axf文件到.bin文件的轉(zhuǎn)換。當然也可以通過J-Flash ARM軟件轉(zhuǎn)換文件格式,在轉(zhuǎn)換為bin文件時,可以看到bin文件的起始地址和終止地址,以及在文件各個地址中存儲的數(shù)據(jù)。

對STM32內(nèi)部閃存進行燒寫,需要遵循以下流程:閃存解鎖,清除相關(guān)標志位,擦除閃存,寫入閃存,鎖定閃存。程序文件的燒寫與標志位的燒寫本質(zhì)上相同,都是按照規(guī)范的流程進行文件的擦除和燒寫,其中程序文件在全部接收后燒寫到指定閃存存儲區(qū),而標志位由用戶指定,在程序頭文件中定義,燒寫至裝載程序和用戶程序占用存儲區(qū)域之外的特定地址,一般為閃存存儲區(qū)末端,這樣可以有效的避免程序文件覆蓋標志位的情況出現(xiàn)。

3 程序遠程升級方案

STM32系列微控制器分為非互聯(lián)型及互聯(lián)型,主要區(qū)別在于互聯(lián)型內(nèi)部集成了以太網(wǎng)模塊,可以利用片上運行的嵌入式TCP/IP協(xié)議棧進行網(wǎng)絡(luò)數(shù)據(jù)包的收發(fā)。針對兩種型號存在的差異,分別設(shè)計了合適的方案。

3.1非互聯(lián)型方案

本方案采用大容量STM32作為實驗平臺,預(yù)留一路串口作為升級程序的命令及接受文件的通信通道,通過TTL轉(zhuǎn)RS232或者RS485的芯片轉(zhuǎn)換為RS232或RS485信號,進而與網(wǎng)絡(luò)模塊的通信,對于非互聯(lián)型的STM32,要實現(xiàn)遠程的通信,一定要借助相應(yīng)的網(wǎng)絡(luò)模塊或網(wǎng)絡(luò)芯片,將串口數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡(luò)數(shù)據(jù)再聯(lián)入以太網(wǎng)[6]。相關(guān)芯片如Wiznet的W5100、W5500系列芯片,內(nèi)嵌TCP/IP協(xié)議棧,可以通過SPI與微控制器通信,并可外接RJ45聯(lián)通網(wǎng)絡(luò)。相關(guān)模塊也有較多的公司開發(fā),如聯(lián)創(chuàng)科技公司的TCP-232模塊。模塊的另一端通過RJ45連接網(wǎng)絡(luò)雙絞線聯(lián)入以太網(wǎng),也可與終端PC直連,終端PC有相應(yīng)的通訊上位機。

本方案適合已經(jīng)在廣泛應(yīng)用中的非互聯(lián)型STM32,可以通過串口與聯(lián)網(wǎng)模塊通信,從而實現(xiàn)通過以太網(wǎng)升級用戶程序。應(yīng)該注意的是,由于芯片的型號不同,芯片的閃存大小和內(nèi)存大小也不盡相同,設(shè)計時要考慮清楚。

3.2互聯(lián)型方案

對于互聯(lián)型STM32,微處理器本身內(nèi)置以太網(wǎng)模塊支持通過以太網(wǎng)收發(fā)數(shù)據(jù),包括一個符合802.3協(xié)議的MAC(介質(zhì)訪問控制器)和專用的DMA控制器。該模塊支持默認的獨立于介質(zhì)的接口(MII)和精簡的獨立于介質(zhì)的接口(RMII),可以與外接的物理層(PHY)芯片直連,外部以太網(wǎng)PHY芯片與標準RJ45接口連接,目標板可以直接以網(wǎng)絡(luò)雙絞線接入以太網(wǎng)。在另一端,連接終端PC的網(wǎng)絡(luò)雙絞線聯(lián)入同一網(wǎng)絡(luò),即可實現(xiàn)終端PC對目標板的實時程序更新[7]。

LWIP協(xié)議是瑞典計算機科學(xué)院開發(fā)的開源輕量型TCP/ IP協(xié)議棧。LWIP協(xié)議棧支持UDP、TCP等協(xié)議。LWIP協(xié)議減少了內(nèi)存使用率和代碼大小,使LWIP協(xié)議適合在資源有限的嵌入式系統(tǒng)中應(yīng)用[8]。

移植到STM32內(nèi)的LWIP協(xié)議棧可以完成方案所需的通訊需要。在本方案中,利用應(yīng)用層協(xié)議HTTP(超文本傳輸)協(xié)議,以微控制器所在硬件平臺為Web服務(wù)器,而終端PC作為Web客戶端,通過網(wǎng)頁瀏覽器實現(xiàn)對微控制器用戶程序文件的升級。

無論是非互聯(lián)型方案還是互聯(lián)型方案,其程序升級的原理、裝載程序與用戶程序的流程以及程序固件的燒寫在本質(zhì)上是相同的。在考慮了芯片的存儲結(jié)構(gòu)、硬件差異之后,該方案同樣適用于其他類型的微控制器。

4 結(jié) 論

本文介紹了STM32系列控制器的儲存結(jié)構(gòu)、IAP的基本原理,并以此為基礎(chǔ)對STM32系列微控制器的互聯(lián)型及非互聯(lián)型產(chǎn)品都相應(yīng)的設(shè)計實現(xiàn)了通過以太網(wǎng)更新程序的方案。此種方式具有方便靈活,簡單易用的優(yōu)點。未來,在物聯(lián)網(wǎng)、可穿戴智能設(shè)備上該技術(shù)有更廣泛的應(yīng)用前景。

[1]Joseph Yiu.宋巖譯.ARM Cortex-M3權(quán)威指南[M].北京:北京航空航天大學(xué)出版社,2009.

[2]意法半導(dǎo)體 (中國)投資有限公司.STM32參考手冊[EB/ OL].www.stmcu.org,2010.

[3]姜曉梅,李祥和,任朝榮,等.基于ARM的IAP在線及遠程升級技術(shù)[J].計算機應(yīng)用,2008(2):519-521.

[4]闕凡博.基于stm32的程序遠程升級設(shè)計[J].儀器儀表用戶,2013(5):90-92.

[5]李興鶴,蔡亮,宋吉波,等.STM32用戶基于IAP的程序更新技術(shù)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012(1):74-75.

[6]張舞杰,南亦民.基于STM32F103VB的應(yīng)用編程技術(shù)的實現(xiàn)[J].計算機應(yīng)用,2009(10):2820-2822.

[7]Qingqing Xu.A design and implement of IAP based on HTTP[J].2011 International Conference on Computer Science and Service System,2011(6):1918-1922.

[8]Adam Dunkels.Design and Implementation of the lwIP TCP/ IP Stack[J].Swedish Institute of Computer Science,2001.

[9]董昊,石九龍,劉錦高.基于STM32F103的貼片機控制系統(tǒng)的設(shè)計與實現(xiàn) [J].電子設(shè)計工程,2014(4):158-161,165.

[10]江洋,劉宇紅,韓云杰.基于STM32的智能家居系統(tǒng)應(yīng)用研究[J].電子科技,2014(4):105-107,111.

[11]蔡光昭,洪遠泉,周永明.基于STM32的超聲波測速測距系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2014(24):87-89.

Design and implementation of remote program upgrade based on STM32

ZHANG Yan-song,GE Jun-feng,YE Lin,HU Wen-yue
(Department of Automation,Huazhong University of Science and technology,Wuhan 430074,China)

With the wide application of the embedded device,the demand for upgrading the program for embedded devices is increasingly strong.In this paper,a new method to upgrade program in STM32 by the network is proposed after introducing the principle of the IAP.In this method,the firmware of Embedded devices such as STM32 can be upgraded in real time.IAP not only meets the relevant needs,but also provides the guidance and assistance to the improvement of Internet of Things and the intelligent equipment.

IAP;STM32;remote program upgrade;Internet of Things

TN98

A

1674-6236(2016)01-0131-04

2015-05-27稿件編號:201505244

國家自然科學(xué)基金資助項目(61104202);中央高?;究蒲袠I(yè)務(wù)費專項資金資助項目(2014QN170)

張巖松(1991—),男,遼寧北票人,碩士研究生。研究方向:傳感器與智能檢測技術(shù)。

猜你喜歡
堆棧微控制器以太網(wǎng)
基于行為監(jiān)測的嵌入式操作系統(tǒng)堆棧溢出測試*
基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設(shè)計與實現(xiàn)
TASKING針對英飛凌第三代AURIX微控制器推出多核開發(fā)環(huán)境
物聯(lián)網(wǎng)技術(shù)在微控制器實驗教學(xué)中的應(yīng)用
用于高品質(zhì)電動汽車的分布式并行計算
基于堆棧自編碼降維的武器裝備體系效能預(yù)測
談實時以太網(wǎng)EtherCAT技術(shù)在變電站自動化中的應(yīng)用
淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應(yīng)用
萬兆以太網(wǎng)在連徐高速公路通信系統(tǒng)改造中的應(yīng)用
可視化的微控制器分析平臺設(shè)計*
舟曲县| 烟台市| 合江县| 古浪县| 德保县| 鄂托克前旗| 沽源县| 平原县| 海兴县| 增城市| 玛曲县| 乐亭县| 安丘市| 弥渡县| 中超| 元氏县| 手游| 东辽县| 西城区| 延边| 汉中市| 班戈县| 莱芜市| 怀仁县| 鹤庆县| 新乡县| 阳城县| 蒙山县| 镇沅| 诏安县| 伊宁市| 盐津县| 青海省| 克什克腾旗| 扶余县| 潜山县| 平安县| 娱乐| 金山区| 太和县| 法库县|