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