文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.013
中文引用格式: 蔡伯峰,蔡偉達,王宜懷. KW01-ZigBee無線傳感網應用開發平臺的研制[J].電子技術應用,2017,43(3):55-58.
英文引用格式: Cai Bofeng,Cai Weida,Wang Yihuai. Design of KW01-ZigBee wireless sensor network application development platform[J].Application of Electronic Technique,2017,43(3):55-58.
0 引言
KW01是飛思卡爾公司2014正式推出的業內首款Sub-GHz芯片,是由基于ARM Cortex-M0+內核的微控制器KL26與SX1231-RF射頻模塊組成[1]。
無線傳感網(Wireless Sensor Network,WSN)已滲入到醫療、家居、交通等各種領域,但由于其應用開發涉及到網絡架構與方案、節點、RF通信電路、硬軟件構件的設計,以及通信協議、操作系統融入、程序編寫、可重用和移植性等知識和技術,所以門檻較高,導致WSN應用開發難度大、周期長、成本高,產品可維護性及移植性差。為解決這一現狀,茅正沖[2]等研究可配置嵌入式應用程序設計模式,范寧寧[3]等研究測控系統框架,曹敬瑜[4]等研究高效軟件構件化框架。但這些研究是通過設計構件來開發應用程序,并沒有設計出具有完整架構的開發平臺。為此本文研制了一款基于KW01-ZigBee 的層次架構清晰、接口豐富、驅動構件完備的相對通用實用易用的WSN應用開發平臺,極大方便了WSN應用開發,將會降低開發難度、縮短開發周期,并能增強產品的可維護性和可移植性。
1 開發平臺建模
WSN一般由若干個終端節點、帶路由功能的終端節點,以及多個網關節點(本文稱為PC節點)組成。本文研制的平臺用于WSN應用工程各節點的開發,采用如圖1所示的四層架構平臺模型。
硬件平臺層是由KW01-ZigBee開發板、寫入器和用于連接網關節點與PC的USB-TTL串口線組成的開發套件。為減少設計成本并保證穩定可靠的通信,WSN中所有節點的開發板均相同。
MCU方工程框架用于開發應用程序,由硬件抽象層、軟件構件層和應用層組成。硬件抽象層文件主要用于芯片上電復位和鏈接。軟件構件層包括底層驅動構件、應用構件和高層構件;應用層的用戶代碼包括用戶任務、主程序和中斷服務例程(Interrupt Service Routine,ISR)。為便于開發功能復雜的WSN應用工程,在框架中融入MQXLite實時操作系統(Real Time Operating System,RTOS),用于管理、調度、處理多任務[5,6]。
2 開發板及硬件構件設計
開發板應架構清晰、使用和維護方便,為此本文設計了KW01-ZigBee開發板,硬件結構框圖如圖2所示。KW01 MCU由KL26和RF收發器組成,擁有16 KB SRAM、128 KB Flash和UART、SPI、IIC、TSI、ADC、定時器等模塊,具有無線電性能高,傳輸速率快、距離遠,處理能力強,超低功耗等特點[7]。
構件是提高系統可重用性、可移植性的基礎和保障,用于組裝系統可提高開發效率。設計開發板時將各電路模塊設計成構件并提供功能明確的接口,可極大方便用戶使用。如硬件最小系統構件由程序運行所需最低規模外圍電路(如電源及濾波、復位、晶振等電路)組成;電源電路構件用于將5 V輸入轉換為3.3 V供芯片使用;RF前端電路構件用于連接射頻引腳RFIO與天線。
為便于實驗、科研及應用開發,將MCU除硬件最小系統引腳外的其他引腳封裝成各種構件,如UART接口、SWD寫入器接口、電池接口、對外接口等構件。圖3中標識的是引腳默認功能,可直接使用,而其他功能的使用,可按照NXP官方網站給出的KW01技術參考手冊[1]上的功能復用表進行引腳功能復用。
工程開發時,將外設模塊連接到相應接口構件并根據需要復用引腳功能,可極大提高開發效率。
3 底層驅動構件設計
KW01包括RF、GPIO、ADC等硬件模塊,編程時通過驅動程序操作對應的硬件模塊,但驅動程序只有封裝成底層驅動構件才便于重用移植,也才能方便用戶直接使用,從而降低應用開發難度。
限于篇幅,本文僅介紹RF驅動構件設計過程。按照構件設計思想,將RF模塊的初始化、接收數據、發送數據、檢測能量等基本操作封裝成獨立的功能函數即可,但從方便實際應用出發還應封裝帶參數初始化、CSMA/CA機制發送數據、設置通道號等函數。由于它們都涉及到對RF硬件底層寄存器操作,是底層驅動函數,因此將其按構件設計原則封裝,并集中存放在rf.c源文件中,同時配以rf.h存放相關宏定義、底層寄存器映射和驅動函數原型聲明。在構件設計中,重點要設計好底層驅動函數原型并給出詳細注釋,方便用戶使用。例如RF接收數據函數的功能是從FIFO隊列中接收一幀數據,并返回接收成功與否標志,因此需提供數據緩沖區地址以存放接收的數據,以及存放接收數據長度的指針單元和硬件過濾地址(即當前WSN應用工程中節點的硬件地址,用于過濾掉其他工程發送的數據包,同一工程各節點硬件地址相同)。這樣函數原型設計為:
//功能概要:RF接收數據幀
//參數說明:plen:接收數據長度指針,
//pbuf:接收數據緩沖區首地址, hw_adr:硬件過濾地址
//函數返回:=0,接收正常,=其他值,接收異常
uint_8 RFReceiveFrame(uint_8* pbuf, uint_8* plen,uint_8 hw_adr);
4 MCU方工程框架設計
MCU方工程框架用于為節點程序開發提供工程模板,以降低開發難度,提高開發效率。
4.1 工程框架設計的基本原則
遵循軟件工程可復用、可移植、易理解、易維護的基本思想,為縮短產品開發周期及提高開發效率打好基礎[8];以構件設計為基礎,通過各種構件的設計與應用,提高框架的可復用性、可移植性,降低應用開發難度[9];目錄結構合理分類,按照文件內容歸納整理、分類組織,提高軟件產品的可維護性。
4.2 工程框架的組織結構
根據軟件工程對工程框架必須滿足結構清晰、文件安排合理、具有可移植和易修改特點的要求,以及以上設計原則和圖1四層架構平臺模型的設計思想,構建了如表1所示的樹形結構統一MQXLite工程框架(All-in-one MQXLite FrameWork,AMQXLFW)。
4.3 AMQXLFW設計分析
除開發環境特有的文件夾外,工程框架包含的文件夾均相同,表1是基于Kinetis開發環境(Kinetis Development Studio,KDS)包含的12個文件夾,個數和名稱固定。存放文件原則如下:
01_Doc存放工程文檔,隨工程變化而更新。02_CPU和03_MCU分別存放內核、芯片相關的上電復位啟動文件,因內核廠家只負責設計維護內核及源代碼而不生產芯片,故分開存放便于移植更新。04_Linker_File存放提供程序代碼、中斷向量表、常變量的存放地址的鏈接腳本,隨開發環境修改。充足完備的構件可有效降低工程開發難度[10],05_Driver、06_App_Component、07_Soft_Component分類存放底層驅動、應用和高層構件便于構件融入、更新、移植,應用和高層構件的名稱和內容封裝后不允許更改。08_Source和09_MQXLite分別是無操作系統和有操作系統編程和調試的主要目錄,08_Source中各文件名固定、內容隨工程而修改,includes.h包含所有構件頭文件(有操作系統下使用01_app_include.h),isr.c包含RF接收中斷isr_gpio_cd()等。09_MQXLite包含內容見表2,isr.c仍然有效,因為有/無操作系統時中斷處理流程一致,但main.c用來初始化并啟動MQXLite,app是按照MQXLite任務設計要求增加的目錄,包含3個固定文件和若干用戶任務文件,其余文件夾文件從MQX或KDS安裝目錄提取,對文中開發板不必修改。
4.4 使用框架開發的流程及優越性
有了工程框架,只要遵循圖4所示流程就能方便快速地開發MCU方程序。不使用框架時,內核和芯片文件可從廠商獲得,鏈接文件可由環境生成,但工程中其余文件都需自己編寫,還需移植操作系統,開發難度大、效率低、周期長;使用框架時,只需修改或添加少量文件及代碼,就可完成開發任務,不同應用間移植也很容易。
5 開發平臺的應用實例
5.1 應用實例的基本功能
應用實例工程的硬件架構包括終端節點、PC節點和PC,PC節點與PC串口通信,終端節點與PC節點均采用KW01-ZigBee開發板,通過RF通信。實例的基本功能是:PC端下發采集芯片溫度命令數據包,經串口傳給PC節點,再經RF轉發給終端節點,收到后解幀,再通過KW01自帶溫度傳感器采集芯片溫度并組幀,經RF發給PC節點送PC顯示。
5.2 MCU方程序開發
根據終端節點要實現的功能,開發其MCU方程序只需設計1個ISR和3個任務:(1)RF接收中斷:接收來自PC節點數據包,并啟動RF接收任務,數據幀格式可自行定義。(2)RF接收任務:解析接收的數據包,數據命令啟動溫度采集任務,該任務文件已包含在框架中,只需根據任務文件中說明修改即可。(3)芯片溫度采集任務:通過AD通道采集芯片溫度并組幀,再啟動RF發送任務。(4)RF發送任務:將包含芯片溫度的數據包通過RF發送給PC節點,由PC節點傳給PC端。該任務文件已包含在框架中。
然后,在app中添加task_temp_ad.c,其采集溫度與組幀的代碼如下:
rf_sendBuf[0]=(uint_8)’T’;//幀頭
rf_sendBuf[1]=57;//有效幀長
rf_sendBuf[2]=(uint_8)hd_adr;//硬件過濾地址
//將下行幀的內容復制到上行幀中
for(i<=3;i<=58;i++) rf_sendBuf[i]= rf_revBuf[i];
//調用KW01的ADC構件ad_read()采集芯片的溫度
ADResult=ad_read(26);//從通道號26采集AD值
//物理回歸:根據芯片手冊上的公式計算出溫度值
Vtmp=(ADResult*3 300)>>16;//電壓采樣值mV
tmp=25-(Vtmp-706)/1.62;//計算溫度
//計算溫度的整數和小數部分并封裝在幀尾前兩字節中
rf_sendBuf[57]=(uint_8)tmp;
rf_sendBuf[58]=(uint_8)((tmp-(uint_8)tmp)*10+0.5);
rf_sendBuf[59]=(uint_8)'D';//幀尾
其余步驟按圖4工作流程和框架模板就可快速完成終端節點MCU方程序開發。PC節點的MCU方程序開發類似。
5.3 應用實例運行測試
借助VS2013開發PC端程序和測試界面,通過界面下發溫度采集命令,終端節點收到后將采集的芯片溫度封裝在應答幀有效數據的最后兩個字節中,通過RF送PC端顯示。通過反復運行測試,測試結果穩定;當給芯片加熱或降溫時,測試結果也相應改變。實例工程的開發和測試結果表明,用本文研制的開發平臺能快速完成開發工作,工程任務運行和調度正常,穩定性和實時性都能滿足工程要求。
6 結論
本文研制了一種能有效降低開發難度,提高開發效率的WSN應用開發平臺。通過將MCU硬件最小系統和各種對外接口、硬件底層驅動設計為構件供用戶使用;通過給出編程框架模板、應用方法等,用戶只要根據具體工程適當修改模板文件并增加任務,就能快速完成應用開發。在后續研究中將繼續加強對接口的設計研究,完善構件庫,優化工程框架結構,以提升復用性和可移植性。本文提出的研制方法對同類平臺的研制具有很好的借鑒作用。
參考文獻
[1] NXP.MKW01Z128 Reference Manual Rev.2[DB/OL].(2014-03-01)[2016-08-20].http://www.nxp.com/.
[2] 茅正沖,葉臻,黃芳,等.基于構件的可配置嵌入式應用程序設計模式[J].計算機測量與控制,2015,23(4):1432-1434,1437.
[3] 范寧寧,王宜懷,陳瑞杰.基于WSCN與E-Ethernet相結合的遠程測控系統框架研究[J].現代電子技術,2016,39(2):53-57,61.
[4] 曹敬瑜,柴瑋巖,王博,等.嵌入式分布計算環境下的高效軟件構件化框架研究[J].兵工學報,2013,34(4):451-458.
[5] NXP.MQXLite RTOS reference manual[DB/OL].(2014-09-10)[2016-08-20].http://www.nxp.com/.
[6] CHOVANEC M,SARAFIN P.Real-time schedule for mobile robotics and WSN aplications[J].FedCSIS,2015(5):1199-1202.
[7] NXP.MKW01 development hardware reference manual[DB/OL].(2014-03-01)[2016-08-20].http://www.nxp.com/.
[8] 王宜懷,朱仕浪,姚望舒.嵌入式實時操作系統MQX應用開發技術[M].北京:電子工業出版社,2014.
[9] 屈新懷,張先燏,丁必榮.可控嵌入式構件框架的研究與實現[J].計算機應用與軟件,2014,31(2):14-16,85.
[10] YAHLALI M,CHOUARFIA A.Towards a software component assembly evaluation[J].IET Software,2015,9(1):1-6.
作者信息:
蔡伯峰1,2,蔡偉達3,王宜懷1
(1.蘇州大學 計算機科學與技術學院,江蘇 蘇州215006;
2.泰州職業技術學院 信息技術學院,江蘇 泰州225300;3.西北工業大學 航天學院,陜西 西安710072)