999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種無線代碼可靠更新系統的研究與設計

2016-03-15 19:47:06陳瑞杰王宜懷李會
現代電子技術 2016年4期

陳瑞杰 王宜懷 李會

摘 要:傳感節點投入運行后,遇到軟件錯誤或功能升級都需要更新節點的程序,但是傳統的現場燒寫方式比較繁瑣。為了解決該問題,以ARM Cortex M0+內核的MKW01Z128無線射頻芯片為基礎,設計了一套成本低、實時性好、可靠性高的無線代碼更新系統。該系統采用串口和無線射頻相結合的通信技術,對片上FLASH進行合理劃分,設計了Bootloader對傳感節點程序進行代碼更新,同時增加了通信幀格式和丟幀重傳機制來確保數據傳輸的可靠性。對更新系統的性能進行了測試,測試結果表明該系統能可靠地實現空曠環境下200 m內的無線代碼更新,具有較好的應用前景。

關鍵詞: MKW01Z128; 無線代碼更新; Bootloader; 丟幀重傳; 可靠更新系統

中圖分類號: TN925+.92 文獻標識碼: A 文章編號: 1004?373X(2016)04?0067?05

Abstract:When sensor nodes are put into operation, a program of firmware updating is needed for any software malfunction or function upgrade. The tradition solution to program in the field is inconvenient and usually hard to achieve. To solve this problem, a low?cost, well real?time performance and highly reliable wireless code update system was designed, which is based on a RF chip MKW01Z128 with RF Cortex MO+core. This chip is made by Freescale Semiconductor in 2013. With the communication technology combining serial port with RF, the Flash memory is reasonably partitioned in the system. Bootloader was designed to update the code of sensor node program. A communication frame format and a lost frame retransmission mechanism were added to make sure the reliability of data transmission. Performance of the update system was tested. The test result shows that the system can achieve reliable wireless code updating within 200 m radius in the open field. Thus it has a good application prospect.

Keywords: MKW01Z128; wireless code update; Bootloader; lost frame retransmission; reliable update system

0 引 言

隨著物聯網技術的快速發展,在無線傳感器網絡等領域,無線代碼更新技術愈發顯得必不可少[1]。傳感節點投入運行后,難免會出現軟件錯誤或要進行程序升級,此時在線升級需要大量的人力、物力,比較麻煩。而且傳統的遠程代碼更新系統涉及GPRS、ZigBee、以太網等多種技術[2?3],設計周期長、研發成本高、代碼更新的時間較長。對于很多近距離的無線傳感節點程序更新來說,例如LED屏控制芯片的程序更新、水質監測芯片的程序更新等,簡單、高效、可靠的近距離無線代碼更新系統顯得格外重要。基于此,本文深入剖析機器碼格式、Bootloader機制、數據傳輸丟幀等技術要點,在基于ARM Cortex M0+內核的MKW01Z128芯片的無線傳感節點上設計了Bootloader。無線接收到的代碼先存放于更新程序區,丟幀重傳機制確保數據的準確接收,最后在接收到代碼更新指令后將存儲到更新程序區中代碼復制到MCU FLASH的指定位置,并通過PC指針跳轉來實現代碼更新。

1 系統介紹

本文搭建了一套集串口和無線射頻等技術為一體的無線代碼可靠更新系統。該系統通過PC機上位機軟件實現一點對多點地更新空曠情況下200 m內的無線傳感節點程序,系統組成如圖1所示。這里,無線代碼更新需關注的是PC機上位機軟件、傳感節點端的Bootloader、PC機與根節點的通信、根節點與傳感節點的通信等細節。更新程序流程為:PC機上位機軟件解析待更新程序的機器碼(.HEX文件),提取出有效數據通過串口發送根節點,根節點對數據進行適當處理后存入片上FLASH中。當接收到上位機的更新代碼命令后,根節點讀取FLASH內容,通過無線射頻技術將數據發送給無線傳感器節點,無線傳感器節點校驗接收正確后更新代碼。

本系統中,根節點和無線傳感節點都采用KW01芯片。該芯片是飛思卡爾公司2013年推出的基于ARM Cortex M0+內核、運行速率為48 MHz的低功耗無線射頻芯片。芯片內部集成了Freescale公司的KL26芯片(控制芯片,M0+內核)和Semtech公司的SX1233芯片(無線收發器),擁有128 KB的FLASH(ROM),16 KB的RAM,可實現200 m內數據的無線收發。

2 PC端軟件設計方案

PC機代碼更新軟件主要功能為提取機器碼(.HEX文件)中有效數據,組幀后通過串口發送給根節點。下面主要分析.HEX文件記錄格式,給出提取有效數據的方法及過程。

2.1 .HEX文件介紹

.HEX(Intel HEX)文件[4]是由一行行符合Intel HEX文件格式的文本構成的ASCII文本文件。.HEX文件以行為單位,每一行是一個HEX記錄,由十六進制數的機器碼或數據常量組成。.HEX文件經常被用于將程序或數據傳輸存儲到ROM,EPROM;大多數編程器和模擬器使用.HEX文件。每行HEX記錄由6個部分組成[5],如表1所示。

2.2 .HEX文件有效數據提取

.HEX文件有效數據提取的流程圖如圖2所示。將提取.HEX文件中的所有類型為00記錄的有效數據、數據內容存儲在image.data[ ]數組中,在相同下標的image.flag[ ]數組中標記其是否為有效數據(1為有效;0為無效),其中數組下標為數據在主控芯片FLASH中的地址即.HEX記錄中的地址段。此外,用戶代碼中不可避免地會出現程序跳轉,.HEX文件中的地址會出現跳變,而被跳過的地址中存儲的內容是無意義的,故給其賦值0xFF,但在代碼更新時仍將其作為有效數據進行傳輸以簡化傳輸過程。

3 傳感節點端Bootloader設計

對于嵌入式系統,Bootloader是指系統啟動后運行在用戶應用程序之前的一段代碼,用來初始化硬件設備、建立內存空間映射圖,為調用用戶應用程序準備好正確的環境[6]。Bootloader的設計對程序代碼的更新至關重要,主要包括中斷向量表重定位和鏈接文件中內存設計。

3.1 中斷向量表重定位

中斷向量表是按照中斷源的中斷向量號順序存放中斷服務程序入口地址的一段存儲區域[7]。程序執行的第一條指令的地址以中斷向量的形式給出,因此重定位中斷向量表是設計Bootloader的第一步。如圖3所示為中斷向量表重定位示意圖。

圖3中左邊為芯片存儲空間映像[8?9],中間圖將芯片的FLASH區劃分為三個部分:Bootloader區、用戶程序區和更新程序區。Bootloader區包括Bootloader代碼和中斷向量表,用戶程序區包括用戶代碼和中斷向量表,更新程序區用來臨時存放接收到的待更新程序。更新的代碼先放入更新程序區,待更新完畢校驗成功后,覆蓋到用戶程序區,最后通過PC指針跳轉,轉入用戶程序區執行程序。

Bootloader的中斷向量表起始地址為0x00000000,Cortex M0+內核機制中,復位時,MCU讀取向量表的前2個字(前8 B),第一個字為MSP的初始值,第二個字為復位向量(即程序執行的起始地址),程序執行從復位向量處開始[10]。

在這里,中斷向量表重定位指的是將本處于0x00000000地址處用戶應用程序的中斷向量表搬運到用戶程序區的起始地址0x00008000處。事實表明,用戶應用程序與中斷向量表重定位后的用戶應用程序的代碼完全一致,區別只是代碼在FLASH中的存儲位置不同,它們之間的轉換公式為:

重定位后的用戶代碼=0x00008000+用戶代碼

同時,0x00008000也是中斷向量表起始地址寄存器SCB?>VTOR中定義的中斷向量表的起始地址。

3.2 鏈接文件中內存設計

鏈接文件提供了在鏈接過程中所需要的參數信息。在整個鏈接過程中,代碼和數據的基本單位是“段”。用戶將不同屬性的內容放入不同的段中,鏈接器識別這些段,按照用戶指定將各個段放入相應的存儲單元中,完成鏈接。

此處,需根據FLASH區的劃分對傳感器節點Bootloader和應用程序的鏈接文件進行合理設計。

Bootloader的中斷向量表從FLASH的起始地址(0x00000000)開始存放,ROM的起始地址為0x00000410。因為該Bootloader代碼量小于32 KB,故其在FLASH中的結束地址小于0x00008000。因此,將應用程序的中斷向量表從0x00008000開始存放是可行的,此時應用程序從FLASH的0x00008410地址處開始存放。這樣通過對鏈接文件中內存的劃分,Bootloader與應用程序就能合理地分布在MCU的FLASH中。

4 通信及代碼更新

4.1 PC機與根節點通信

PC機程序要將更新代碼通過串口線發送給根節點,再通過根節點將更新代碼發送給某個無線傳感節點。為了確保通信數據的準確性,本文設計了PC機與根節點間的通信幀格式。

4.1.1 通信幀格式

PC機程序的幀格式需與根節點的幀格式一致,本文制定了通用的命令幀格式如表4所示,基于通用命令幀格式設計了應用信息預處理幀、代碼幀、應答幀、校驗幀和更新幀五種幀。

應用信息預處理幀(AppInfoMsg):傳送有效代碼字節數和包號以供無線傳感節點接收與校驗,命令字為CMD_APP_INFO,6~9 B為有效代碼總字節數,10~11 B為更新代碼總包號。

代碼幀(AppTransDataMsg):傳輸燒入到FLASH中的更新代碼,命令字為CMD_TRANS_DATA,6~7 B為包號,8~n-3 B為有效代碼總字節數。

應答幀(Response):傳送應答信息,命令字為CMD_RESPONSE,6~9 B為當前幀包號。

校驗幀(AppVerificationMsg):用于保證數據傳輸的正確性,命令字為CMD_VERIFICATION,6~9 B為有效代碼總字節數。

更新幀(AppUpdateMsg):“通知”根節點開始發送更新代碼給某個具體的傳感節點,啟動代碼更新,命令字為CMD_UPDATE,6~7 B為更新節點的編號,最多可更新65 536(216)個傳感節點,8~11 B為有效代碼總字節數。

4.1.2 通信流程

根節點FLASH的扇區大小為1 024 B,加上幀頭、幀長等字節,因此本文設計的代碼幀長n為1 033 B。其中,代碼幀的幀數等于PC機軟件解析出的.HEX有效數據總字節數除以扇區大小為1 024 B。PC機與根節點通信步驟如下:

(1) PC機首先發送AppInfoMsg幀,該幀將代碼的總字節數和總包數傳遞給根節點并由根節點寫入片上FLASH指定位置處,以供校驗幀校驗時使用。根節點返回Response幀,若該幀出錯則重發AppInfoMsg幀。

(2) PC機發送AppTransDataMsg幀,根節點根據該幀的校驗碼校驗該幀,若正確則寫入FLASH相應地址處;若出錯,則返回當前應接收幀的包號以要求PC機重發該幀。此外,若PC機收不到應答幀則重發該幀,該過程持續到代碼幀正確發送完畢。

(3) PC機發送AppVerificationMsg幀,該幀在代碼幀發送完畢后發送,其記錄了所有代碼的32 b累加校驗和,若從FLASH中讀取的所有代碼幀的32 b累加校驗和與此相等,則校驗成功,否則由應答幀攜帶出錯信息,請求PC機重發該幀。此外,若PC機收不到該幀的應答幀則重發該幀。

(4) PC機發送AppUpdateMsg幀,根節點讀取出FLASH中的數據發送給某個具體的傳感節點,傳感節點接收代碼驗證無誤后更新程序。

前3步執行完,更新代碼已正確存儲于根節點的FLASH中,斷電不會丟失,此時只需在PC機軟件上寫入相應編號(或編號范圍)執行第(4)步即可完成代碼更新。若要對不同編號的傳感節點更新相同的代碼,只需執行第(4)步即可,這樣就無需PC軟件每次發送機器碼給根節點,提高了代碼更新的速度。

4.2 根節點與傳感節點通信

當PC機發送更新幀時,根節點需要通過無線射頻技術向傳感節點發送更新代碼,但傳感節點不能保證數據100%的接收,故本文設計了一種簡單高效的丟幀重傳機制來保證通信的可靠性。

根節點將更新代碼分組發送給傳感節點,傳感節點無需每幀都回發確認(ACK)幀,只要最后回發一幀包含丟幀信息的數據,根節點收到該幀重發丟失的幀數據。

傳感節點判斷丟幀方法:設置大小為50 B的緩沖區,最多可記錄2萬幀數據接收狀態,緩沖區第1個字節的第7位flag_buf[0].7代表第1幀數據,flag_buf[0].6代表第2幀數據,flag_buf[0].0代表第8幀數據,以此類推。緩沖區初始化為0,成功接收到該幀數據時相應位置1,如表5所示。

4.3 代碼更新

傳感節點接收到的更新代碼先存放在更新程序區,校驗無誤后通過調用FLASH_ErasePage驅動函數對FLASH空間中的用戶程序區的扇區進行擦除,并讀取更新程序區的代碼數據,使用FLASH_Write函數將其逐扇區寫入到用戶程序區。寫入正確后,需重設主堆棧指針、PC指針跳轉實現程序跳轉到更新代碼處執行。跳轉函數代碼如下:

5 測試結果

對本文設計的無線代碼更新機制進行測試實驗,實驗使用3個ID,設為1,2,3的無線傳感節點,通過2種更新場景進行實驗,測試代碼更新的時間開銷、實時性及可靠性。更新1,在main函數中,使用Light_Init函數對小燈進行初始化;更新2,在main函數中,增加UART_Init函數對串口進行初始化,開串口中斷,增加串口的中斷服務例程。測試更新時間方法為設置傳感節點一引腳為低電平,在Bootloader開始時將其拉高,結束時將其拉低,用示波器觀察高電平持續的時間即為代碼更新的時間。每種更新實驗進行3組,每組重復5次,取平均時間為實驗結果,測試結果如表6所示。

測試更新效果方法為:更新1中觀察小燈亮暗變化;更新2中通過串口線查看打印出的消息是否正確,串口發送數據查看進入中斷服務例程是否正確。測試結果:更新1中小燈閃爍情況與程序中設計一樣;更新2中串口打印正常,可正常進入中斷服務例程。同時,也對不同距離無線更新的可靠性進行測試,測試方法為調整根節點和無線傳感節點間的距離,更新20次,查看PC機軟件顯示的重傳幀數,如表7所示。

6 結 語

本文設計的無線代碼更新機制運用了串口與無線射頻相結合的通信技術,設計了Bootloader、丟幀重傳機制等可實現一點對多點的無線傳感節點程序更新。與傳統的在線燒寫程序相比,簡單方便、實時性強;與傳統的無線更新系統相比,研發周期短、成本低、更新速度快。整套系統具有極強的可移植性與通用性。目前,該方案已成功應用于無線LED控制系統中,經測試表明,該機制穩定可靠、可成功實現空曠情況下200 m內的無線代碼更新。

參考文獻

[1] 況曉輝,許飛,劉麗.無線傳感器網絡遠程代碼更新技術研究進展[J].計算機科學,2013,40(6A):255?261.

[2] 吳曉,杜鵬雷,江涌,等.無線傳感網中代碼更新機制的研究與設計[J].計算機應用,2010(4):857?859.

[3] 彭燕.基于ZigBee的無線傳感器網絡研究[J].現代電子技術,2011,34(5):49?51.

[4] 黃海寶,吳學杰,高艷艷.基于STM32F103局域網遠程更新技術的實現[J].工業控制計算機,2012,25(12):97?98.

[5] 王宜懷,朱仕浪,郭蕓.嵌入式技術基礎與實踐[M].3版.北京:清華大學出版社,2013.

[6] 蘭婧,朱怡安,袁磊.基于PXA270嵌入式系統的Bootloader研究與實現[J].計算機工程與設計,2009,30(21):4881?4883.

[7] 石晶,王宜懷,蘇勇,等.基于ARM Cortex?M4的MQX中斷機制分析與中斷程序框架設計[J].計算機科學,2013,40(6):41?44.

[8] Freescale Semiconductor. MKW01Z128 Sub 1 GHz low power transceiver plus microcontroller reference manual [EB/OL]. [2014?03?12]. http://www.cache.freescale.com/files/microcontrollers/doc/ref_manual/MKW01xxRM.

[9] Freescale Semiconductor. MKW01Z128 Sub 1 GHz Low Power Transceiver plus Microcontroller Data Sheet [EB/OL]. [2014?03?20]. http://cache.freescale.com/files/microcontrollers/doc/data_

sheet/MKW01Z128.

[10] YIU J.ARM Cortex?M0權威指南[M].吳常玉,魏軍,譯.北京:清華大學出版社,2013.

主站蜘蛛池模板: 国产精品女熟高潮视频| 一区二区午夜| 美女亚洲一区| 国产亚洲精久久久久久无码AV| 久无码久无码av无码| 久久精品只有这里有| 国产国产人成免费视频77777| 亚洲av无码牛牛影视在线二区| 一本大道香蕉中文日本不卡高清二区| 国产精品jizz在线观看软件| 日本高清有码人妻| 久久婷婷五月综合色一区二区| 国产欧美另类| 999福利激情视频| 国产精品对白刺激| 国产主播福利在线观看| 69国产精品视频免费| 秘书高跟黑色丝袜国产91在线| 野花国产精品入口| 欧美激情视频一区| 国产91精品久久| 真实国产乱子伦视频| 久久女人网| 久久亚洲国产最新网站| 亚洲天堂网2014| 久久精品国产精品一区二区| 中文字幕无码中文字幕有码在线| 92午夜福利影院一区二区三区| 熟妇丰满人妻| 波多野衣结在线精品二区| 国产精品冒白浆免费视频| 2048国产精品原创综合在线| 亚洲免费福利视频| 久久狠狠色噜噜狠狠狠狠97视色| 日韩精品一区二区三区视频免费看| 全色黄大色大片免费久久老太| 成人夜夜嗨| 她的性爱视频| 亚洲国产精品成人久久综合影院| 亚洲一级无毛片无码在线免费视频| 成人中文字幕在线| 在线观看的黄网| 日韩久久精品无码aV| 日韩欧美中文字幕一本| 日本欧美精品| 香蕉蕉亚亚洲aav综合| 另类综合视频| 日本三级精品| 国产91小视频在线观看| 婷婷激情亚洲| 在线播放真实国产乱子伦| 国产性猛交XXXX免费看| 久久永久免费人妻精品| 九色免费视频| 狠狠色丁香婷婷| 好吊色妇女免费视频免费| 亚洲精品午夜天堂网页| 欧美精品二区| 国产爽妇精品| 亚洲女人在线| 亚洲高清无在码在线无弹窗| 中文字幕人妻av一区二区| AV无码一区二区三区四区| 国产尤物在线播放| 性喷潮久久久久久久久| 欧美在线一二区| 久久网综合| 久草网视频在线| 国内嫩模私拍精品视频| 一级毛片免费的| 亚洲二三区| 情侣午夜国产在线一区无码| 丁香婷婷激情网| 99视频在线免费| 少妇人妻无码首页| 亚洲视频在线观看免费视频| 2021国产精品自产拍在线观看| 黑色丝袜高跟国产在线91| 免费一看一级毛片| 亚洲精品成人福利在线电影| 亚洲AV无码乱码在线观看裸奔| 亚洲天堂.com|