傳感器網(wǎng)絡(luò)操作系統(tǒng)平臺(tái)TinyOS下CC2420驅(qū)動(dòng)組件的設(shè)計(jì)
圖3 HPL體系結(jié)構(gòu)
HPLCC2420FIFOM模塊文件實(shí)現(xiàn)了HPLCC2420FIFO接口,完成了對(duì)發(fā)送、接收數(shù)據(jù)緩存區(qū)的讀寫(xiě)控制工作,主要接口函數(shù)如下:
//將一串?dāng)?shù)據(jù)寫(xiě)入發(fā)送緩存區(qū)TXFIFO, 完成后告知TXFIFODone()函數(shù)
async command result_t HPLCC2420FIFO.writeTXFIFO(uint8_t len,uint8_t *msg);
//讀取接收緩存區(qū)RXFIFO中的數(shù)據(jù),完成后告知RXFIFODone()函數(shù)
async command result_t HPLCC2420FIFO.readRXFIFO(uint8_t len,uint8_t *msg);
HPLCC2420M模塊文件實(shí)現(xiàn)了3個(gè)接口:
① StdControl接口,完成ATmega128L中與CC2420相連的硬件引腳端口電平設(shè)置及硬件SPI接口相關(guān)寄存器的初始化工作。
② HPLCC2420接口,實(shí)現(xiàn)CC2420內(nèi)部寄存器的讀寫(xiě)功能。CC2420有33個(gè)控制/狀態(tài)寄存器、15個(gè)命令選通寄存器和2個(gè)訪問(wèn)FIFO緩存區(qū)的寄存器。
③ HPLCC2420RAM接口,實(shí)現(xiàn)對(duì)CC2420內(nèi)部RAM的讀寫(xiě)功能。CC2420的內(nèi)部RAM分為3塊--128字節(jié)的發(fā)送FIFO緩存區(qū)、128字節(jié)的接收FIFO緩存區(qū)以及112字節(jié)的用于保存設(shè)備地址、密鑰等信息的存儲(chǔ)區(qū)。
主要接口函數(shù)如下:
//寫(xiě)CC2420的命令選通寄存器
async command uint8_t HPLCC2420.cmd(uint8_t addr)
//寫(xiě)寄存器
async command result_t HPLCC2420.write(uint8_t addr, uint16_t data)
//CC2420內(nèi)部RAM讀寫(xiě)接口函數(shù)
async command result_t HPLCC2420RAM.write(uint16_t addr, uint8_t length, uint8_t* buffer);
async command result_t HPLCC2420RAM.read(uint16_t addr, uint8_t length, uint8_t* buffer);
//讀寫(xiě)完成向上調(diào)用的事件通知
async event result_t writeDone(uint16_t addr, uint8_t length, uint8_t* buffer);
async event result_t readDone(uint16_t addr, uint8_t length, uint8_t* buffer);
HPLCC2420InterruptM模塊文件實(shí)現(xiàn)了HPLCC2420Interrupt、HPLCC2420Capture接口,主要完成中斷捕捉功能。CC2420使用SFD、FIFO、FIFOP和CCA四個(gè)引腳表示收發(fā)數(shù)據(jù)狀態(tài),當(dāng)引腳電平變化時(shí),觸發(fā)ATmega128L硬件中斷。TinyOS平臺(tái)下,根據(jù)事件驅(qū)動(dòng)機(jī)制,向上調(diào)用HPLCC2420Interrupt(類(lèi)似HPLCC24240Capture)接口中的事件通告函數(shù) result_t fired (void)進(jìn)行上層處理。HPLCC2420Interrupt接口中使用result_t startWait(bool low_to high)函數(shù)設(shè)置觸發(fā)方式(上升沿還是下降沿),使用result_t disable(void)函數(shù)禁止中斷使能。HPLCC2420InterruptM模塊文件還調(diào)用了HPLTimer1M.nc和TimerC.nc文件中的Timer接口函數(shù),完成相關(guān)的底層中斷處理。
3.2 HAL組件
HAL組件使用HPL組件HPLCC2420C提供的源接口,在CC2420所提供的基本功能的基礎(chǔ)上進(jìn)一步抽象,形成CC2420初始化、設(shè)備地址設(shè)置、收發(fā)模式設(shè)置、發(fā)送接收消息等復(fù)雜功能,同時(shí)以組件接口的形式進(jìn)行封裝供上層HIL組件調(diào)用。HAL體系結(jié)構(gòu)如圖4所示。HAL組件包括兩個(gè)模塊文件CC2420RadioM.nc和CC2420Control.nc,最后由配置文件CC2420RadioC.nc裝配起來(lái)。
CC2420ControlM模塊文件使用SplitControl接口完成CC2420的寄存器初始化、啟動(dòng)等工作,主要函數(shù)如下:
command result_t SplitControl.init();//CC2420寄存器初始化
command result_t SplitControl.start();//開(kāi)啟1.8 V穩(wěn)壓源供電,將復(fù)位RSTN引腳置為高電平,啟動(dòng)CC2420晶振
CC2420ControlM模塊文件還實(shí)現(xiàn)了CC2420Control接口,實(shí)現(xiàn)對(duì)CC2420的一些控制功能:
command result_t CC2420Control.TunePreset(uint8_t chnl);//通信頻道設(shè)置
async command result_t CC2420Control.TxMode();//設(shè)為發(fā)送模式
async command result_t CC2420Control.RxMode();//設(shè)為接收模式
async command result_t CC2420Control.OscillatorOn();//開(kāi)啟晶振
async command result_t CC2420Control.enableAutoAck();//自動(dòng)應(yīng)答幀功能使能
async command result_t CC2420Control.enableAddrDecode();//地址識(shí)別功能使能
command result_t CC2420Control.setShortAddress(uint16_t addr);//設(shè)置設(shè)備地址
CC2420RadioM使用BareSendMsg接口發(fā)送消息,使用ReceiveMsg接口接收消息:
command result_t BareSendMsg.Send(TOS_MsgPtr msg);//發(fā)送消息
event result_t BareSendMsg.sendDone(TOS_MsgPtr msg,result_t success);//發(fā)送完成
event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr m);//接收消息事件通告
圖4 HAL體系結(jié)構(gòu)
結(jié)語(yǔ)
首先以TinyOS操作系統(tǒng)為軟件平臺(tái),根據(jù)網(wǎng)絡(luò)節(jié)點(diǎn)的硬件模塊功能及其接口電路的特點(diǎn),在硬件抽象體系結(jié)構(gòu)的原則下,對(duì)CC2420無(wú)線收發(fā)模塊在TinyOS 平臺(tái)下的驅(qū)動(dòng)組件設(shè)計(jì)作了深入的研究。實(shí)驗(yàn)表明,節(jié)點(diǎn)在滿足指標(biāo)要求的同時(shí)運(yùn)行穩(wěn)定可靠。
評(píng)論