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