《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式系統(tǒng)的ZigBee芯片的研究與應(yīng)用
基于嵌入式系統(tǒng)的ZigBee芯片的研究與應(yīng)用
來源:微型機(jī)與應(yīng)用2012年第2期
暢 達(dá),耿淑琴,侯立剛,吳武臣
(北京工業(yè)大學(xué) 電控學(xué)院集成電路與系統(tǒng)研究室,北京100124)
摘要: 分析了ZigBee的特點(diǎn),指出了以ARM-Linux嵌入式系統(tǒng)與CC2420組合作為ZigBee網(wǎng)絡(luò)中的全功能節(jié)點(diǎn)的特有優(yōu)勢(shì)。闡述了芯片工作原理與硬件系統(tǒng)組成方式,并且給出了CC2420與ARM底層通信機(jī)制SPI驅(qū)動(dòng)設(shè)計(jì)的方法,使得CC2420與系統(tǒng)間的數(shù)據(jù)交換得到保證,同時(shí)也是上層應(yīng)用的基礎(chǔ)。
Abstract:
Key words :

摘  要: 分析了ZigBee的特點(diǎn),指出了以ARM-Linux嵌入式系統(tǒng)與CC2420組合作為ZigBee網(wǎng)絡(luò)中的全功能節(jié)點(diǎn)的特有優(yōu)勢(shì)。闡述了芯片工作原理與硬件系統(tǒng)組成方式,并且給出了CC2420與ARM底層通信機(jī)制SPI驅(qū)動(dòng)設(shè)計(jì)的方法,使得CC2420與系統(tǒng)間的數(shù)據(jù)交換得到保證,同時(shí)也是上層應(yīng)用的基礎(chǔ)。
關(guān)鍵詞: ZigBee;CC2420;ARM-Linux;SPI驅(qū)動(dòng)

    隨著信息技術(shù)的不斷發(fā)展,無(wú)線傳感網(wǎng)絡(luò)逐漸得到認(rèn)同與應(yīng)用。無(wú)線傳感網(wǎng)絡(luò)是由大量傳感器節(jié)點(diǎn)通過無(wú)線通信的方式形成的一個(gè)多跳的自組織網(wǎng)絡(luò)系統(tǒng),它包括基本的傳感單元、處理單元、通信單元和電源部分。符合IEEE 802.15.4標(biāo)準(zhǔn)的ZigBee協(xié)議可以很好地支持網(wǎng)絡(luò)中的傳輸需要,將其與嵌入式系統(tǒng)相結(jié)合,可以形成無(wú)線傳感網(wǎng)的基本單元[1]。
    ARM嵌入式系統(tǒng)作為當(dāng)下最為流行的嵌入式系統(tǒng),其在功耗、體積、可靠性與便攜性方面都有很強(qiáng)的競(jìng)爭(zhēng)力,而CC2420作為TI推出的符合2.4 GHz IEEE 802.15.4的射頻收發(fā)器,為無(wú)線網(wǎng)絡(luò)提供了良好的射頻傳輸保證。在操作系統(tǒng)方面,嵌入式Linux系統(tǒng)憑借其開源性、穩(wěn)定性等特點(diǎn),成為眾多嵌入式系統(tǒng)的優(yōu)先選擇。所以,將ARM-Linux嵌入式系統(tǒng)與CC2420芯片相結(jié)合作為網(wǎng)絡(luò)中對(duì)硬件要求較高的具有完整功能的全功能設(shè)備,完全可以開發(fā)出基于ZigBee協(xié)議的無(wú)線傳感網(wǎng)絡(luò),它同時(shí)具有低成本、低功耗、低復(fù)雜度、高性能、高通用性與移植性等諸多優(yōu)勢(shì)。
1 ZigBee協(xié)議的特點(diǎn)分析
    ZigBee(紫蜂)是IEEE 802.15.4協(xié)議的兼容版本。IEEE 802.15.4協(xié)議是針對(duì)低速無(wú)線個(gè)人局域網(wǎng)設(shè)計(jì)的符合IEEE規(guī)范的官方標(biāo)準(zhǔn),工作在2.4 GHz頻段,最多支持16個(gè)傳輸速率為250 kb/s的信道。ZigBee是一種短距離、低功耗的無(wú)線通信技術(shù),支持星形、簇形和網(wǎng)狀三種拓?fù)浣Y(jié)構(gòu),具有短距離、低功耗、自組織、低成本、低速率和低復(fù)雜度的特點(diǎn)。ZigBee的網(wǎng)絡(luò)標(biāo)準(zhǔn)共分為4層,從上到下分別為應(yīng)用層、網(wǎng)絡(luò)層、多媒體訪問控制層(MAC)和物理層。每一層為它的上一層提供數(shù)據(jù)與管理服務(wù)。其中,物理層和MAC層采用了IEEE 802.15.4標(biāo)準(zhǔn),應(yīng)用層和網(wǎng)絡(luò)層則在此基礎(chǔ)上進(jìn)行了定制。
    ZigBee標(biāo)準(zhǔn)的物理層規(guī)定了3個(gè)有效頻段,分別是868 MHz、915 MHz和2.4 GHz。其中,在中國(guó)常用的2.4 GHz頻段上采用直接序列擴(kuò)頻技術(shù)進(jìn)行數(shù)據(jù)通信,從而提高了設(shè)備的抗干擾性。MAC層為傳輸提供可靠的數(shù)據(jù)通信鏈路與安全機(jī)制。在MAC層,不同的幀類型采用相同的結(jié)構(gòu),可以通過調(diào)用自定義的API函數(shù)構(gòu)造不同的幀。網(wǎng)絡(luò)層的主要功能是建立于管理網(wǎng)絡(luò),提供路由機(jī)制等。在應(yīng)用層中,每個(gè)節(jié)點(diǎn)具有16位的網(wǎng)絡(luò)地址和64位的IEEE地址,并且還有8位的應(yīng)用層入口地址對(duì)應(yīng)于應(yīng)用對(duì)象。
    相對(duì)于Wi-Fi、藍(lán)牙等其他無(wú)線通信技術(shù),ZigBee技術(shù)憑借其功耗和成本上的優(yōu)勢(shì),越來越廣泛地用于低速率、小范圍的網(wǎng)絡(luò)。
2 系統(tǒng)硬件原理
    圖1所示是系統(tǒng)硬件平臺(tái)的架構(gòu)示意圖。S3C2440A是三星公司推出的以ARM920T為核心的32位高性能嵌入式處理器。它憑借高性能、低價(jià)格、低功耗等優(yōu)勢(shì)廣泛應(yīng)用于嵌入式系統(tǒng)中,并且可以穩(wěn)定運(yùn)行于Linux和Windows CE等諸多嵌入式操作系統(tǒng)。S3C2440A內(nèi)置兩組SPI總線,每組SPI擁有兩個(gè)8位移位寄存器用于數(shù)據(jù)發(fā)送與接收。任意選取其中一組與CC2420連接即可完成微控制器與CC2420的數(shù)據(jù)傳輸[2]。

    CC2420作為TI推出的首款符合ZigBee協(xié)議的射頻芯片,可以與任何符合IEEE 802.15.4協(xié)議的設(shè)備實(shí)現(xiàn)無(wú)線互聯(lián)。CC2420通過SPI接口(SCLK、CSn、SO和SI)配置為從機(jī)。SPI上所有的地址和數(shù)據(jù)都是高位優(yōu)先發(fā)送。片選信號(hào)低有效,即當(dāng)CSn變低時(shí),意味著CC2420的新通信周期開始。
    CC2420共有50個(gè)寄存器,分別為33個(gè)16位配置寄存器、15個(gè)命令選通寄存器和2個(gè)用來訪問獨(dú)立發(fā)送和接收FIFO的8位寄存器。每個(gè)寄存器都被編址為一個(gè)6 bit地址,與第7位的RAM/Register選擇位和第6 bit的讀寫選擇位一起構(gòu)成一個(gè)8 bit地址。在每個(gè)寄存器讀寫周期中,共有24 bit數(shù)據(jù)被發(fā)送到SI上,包括8 bit地址和16 bit數(shù)據(jù)。在發(fā)送數(shù)據(jù)的同時(shí),SO線上將返回8 bit狀態(tài)用于調(diào)試。命令選通脈沖可以看作是CC2420的單字節(jié)指令,通過編址一個(gè)命令選通寄存器可以啟動(dòng)內(nèi)部序列。這些命令可以用于使能晶振、使能接收、啟動(dòng)解碼等。晶振必須被首先啟動(dòng)并且穩(wěn)定后才可以接收其他命令。命令選通與寄存器讀寫相似,只是沒有數(shù)據(jù)傳輸,在CSn有效的前提下,命令選通后可以繼續(xù)其他SPI操作。
    通過寄存器TXFIFO與RXFIFO可以存取發(fā)送FIFO和接收FIFO,且一次操作可以讀取多個(gè)FIFO字節(jié)。SFLUSHTX命令可以激活TXFIFO,SFLUSHRX可以激活RXFIFO。
    CC2420通過CCA、SDF、FIFO和FIFOP 4條信號(hào)將工作狀態(tài)反饋給微控制器。CCA信號(hào)用于清除通道,在接收狀態(tài)下,如果經(jīng)過8個(gè)符號(hào)周期后,信道內(nèi)仍然沒有數(shù)據(jù),則CCA信號(hào)激活;否則處于非激活狀態(tài)。SDF信號(hào)用于提供時(shí)序信息。在發(fā)送過程中,當(dāng)幀的起始分隔符被傳送后,SDF信號(hào)會(huì)被激活;當(dāng)整個(gè)數(shù)據(jù)包完成傳送后,SDF信號(hào)立刻處于非激活狀態(tài)。在接收過程中,當(dāng)檢測(cè)到有效的幀起始分隔符后,SDF信號(hào)激活;整個(gè)數(shù)據(jù)包接收完成后,該信號(hào)處于非激活狀態(tài)。FIFO信號(hào)用于檢測(cè)RXFIFO中是否有數(shù)據(jù),當(dāng)RXFIFO中存在至少一個(gè)數(shù)據(jù)時(shí),F(xiàn)IFO信號(hào)處于激活狀態(tài),直到RXFIFO為空。當(dāng)RXFIFO中存入的數(shù)據(jù)超過了可寫入的閾值時(shí),F(xiàn)IFOP信號(hào)會(huì)被激活,另外一種情況是,當(dāng)一個(gè)完整的數(shù)據(jù)包被接收到后,該信號(hào)會(huì)被激活,而有一個(gè)數(shù)據(jù)包從FIFO中讀出后,該信號(hào)將立刻處于非激活狀態(tài)。如果地址識(shí)別被允許,F(xiàn)IFOP信號(hào)會(huì)一直保持在非激活狀態(tài)直到被傳入的幀通過了地址識(shí)別,否則,即使RXFIFO中的數(shù)據(jù)超越了閾值,F(xiàn)IFOP信號(hào)仍然不會(huì)被激活[3]。

 


3 底層通信機(jī)制的驅(qū)動(dòng)設(shè)計(jì)
    在Linux系統(tǒng)中,上層應(yīng)用程序運(yùn)行在用戶空間,不能直接訪問硬件,只有通過系統(tǒng)調(diào)用將其調(diào)用到內(nèi)核空間,通過設(shè)備驅(qū)動(dòng)程序才能把應(yīng)用程序的需求傳遞給硬件。如圖2所示。CC2420憑借SPI接口與微處理器進(jìn)行通信,雖然某些2.6內(nèi)核版本的Linux給出了SPI驅(qū)動(dòng)程序,但是其針對(duì)性并不強(qiáng),所以,為CC2420設(shè)計(jì)更為合適的SPI驅(qū)動(dòng)更加有益于底層的通信,也更加利于開發(fā)和測(cè)試工作的進(jìn)行[4,5]。

    SPI驅(qū)動(dòng)的設(shè)計(jì)主要包含讀寫兩個(gè)操作。其中寫操作用于將上層空間的數(shù)據(jù)發(fā)送給內(nèi)核中的緩沖區(qū),并控制主SPI將數(shù)據(jù)發(fā)送給CC2420;讀操作將讀取SPI接收到的內(nèi)容,并將其發(fā)送到上層空間。每當(dāng)SPI完成一次數(shù)據(jù)傳輸,都會(huì)向系統(tǒng)發(fā)起一次中斷,中斷由中斷線進(jìn)入并且中斷CPU,從而通知內(nèi)核,以調(diào)用相關(guān)的中斷處理例程。
    驅(qū)動(dòng)程序內(nèi)部采用環(huán)形緩沖區(qū)作為數(shù)據(jù)收發(fā)的緩沖結(jié)構(gòu),如圖3所示。中斷機(jī)制采用上半部與下半部的處理方式,上半部只負(fù)責(zé)響應(yīng)中斷,而繁瑣的數(shù)據(jù)處理交由下半部完成,這樣可以大大提高代碼效率。驅(qū)動(dòng)程序的下半部采用tasklet機(jī)制,tasklet是一種較為特殊的軟中斷,工作在中斷上下文,并且有嚴(yán)格的順序執(zhí)行保障。另外,設(shè)計(jì)中采用了自旋鎖機(jī)制,從而有效地防止了臨界區(qū)的多重訪問問題,提高了驅(qū)動(dòng)程序的安全性。與此同時(shí),休眠機(jī)制的成功引入避免了由于緩沖區(qū)覆蓋所造成的數(shù)據(jù)丟失。

    對(duì)于寫操作,首先將所需發(fā)送的數(shù)據(jù)從上層空間拷貝到內(nèi)核中的發(fā)送數(shù)據(jù)結(jié)構(gòu),然后獲取禁止軟中斷但允許硬中斷的自旋鎖,進(jìn)而調(diào)用寫操作函數(shù)write將數(shù)據(jù)串行拷貝至相應(yīng)的發(fā)送環(huán)形緩沖區(qū)中,最后將數(shù)據(jù)依次寫入發(fā)送寄存器中,釋放自旋鎖,數(shù)據(jù)由硬件發(fā)送出去。圖4所示為寫操作基本流程圖。但是,如果發(fā)送環(huán)形緩沖區(qū)不為空,程序處于發(fā)送過程中,并且不需要寫臨界區(qū)時(shí),寫進(jìn)程就會(huì)被設(shè)計(jì)成休眠模式,休眠的進(jìn)程將在下半部tasklet中被喚醒。在tasklet中,發(fā)送環(huán)形緩沖區(qū)的尾指針會(huì)不斷自增,以表示數(shù)據(jù)正在被不斷發(fā)送出去,直到緩沖區(qū)為空后,tasklet會(huì)喚醒之前睡眠的進(jìn)程。

    對(duì)于讀操作,其流程大致與寫操作類似,如圖5所示。一旦SPI接收寄存器收到數(shù)據(jù),系統(tǒng)就會(huì)產(chǎn)生中斷,從而進(jìn)入中斷處理例程。tasklet將接收寄存器中的數(shù)據(jù)串行發(fā)送到接收環(huán)形緩沖區(qū),緩沖區(qū)頭指針自增,并喚醒進(jìn)程。然后進(jìn)程獲得自旋鎖,在判斷所需讀取的數(shù)據(jù)長(zhǎng)度不超過緩沖區(qū)的最大長(zhǎng)度后,將接收環(huán)形緩沖區(qū)的尾指針數(shù)據(jù)拷貝至內(nèi)核的接收數(shù)據(jù)結(jié)構(gòu),然后尾指針自增。最后將數(shù)據(jù)拷貝至上層空間。

    圖6所示為測(cè)試結(jié)果波形圖。從測(cè)試結(jié)果來看,在8個(gè)時(shí)鐘周期內(nèi)可以準(zhǔn)確地發(fā)送8位二進(jìn)制數(shù)0110_0110。完成底層通信機(jī)制SPI的驅(qū)動(dòng)以后,只需要將CC2420注冊(cè)設(shè)備、完成地址映射,再按照前面所述器件的工作原理發(fā)送相關(guān)命令與檢測(cè)信號(hào),就可以完成此系統(tǒng)的基本應(yīng)用功能,從而擁有了作為ZigBee網(wǎng)絡(luò)中重要節(jié)點(diǎn)的通信保證。另外,ARM嵌入式系統(tǒng)具有更強(qiáng)大的功能,在數(shù)據(jù)處理與網(wǎng)絡(luò)接入方面有很好的性能支持,可以作為全功能設(shè)備節(jié)點(diǎn)的良好選擇。

參考文獻(xiàn)
[1] 蔣挺,趙成林.紫蜂技術(shù)及其應(yīng)用[M].北京:北京郵電大學(xué)出版社,2007.
[2] SAMSUNG.S3C2440A user’s manual reltminary[EB/OL]. Revision0.14,2004.
[3] TI.CC2420_datasheet[EB/OL].(2004-06-09).Revision1.2,2007.
[4] 劉淼.嵌入式系統(tǒng)接口設(shè)計(jì)與Linux驅(qū)動(dòng)程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[5] CORBET J,RUBINI A,GREG K H.Linux device drivers[M].Sebastopol:O’Reilly Media 2005:274-278.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。