歐陽(yáng)朝兵,劉宏,宗云鵬
(湖北汽車工業(yè)學(xué)院 電氣與信息工程學(xué)院,湖北十堰442002)
VANET(Vehicular Ad-hoc Network)是一種由在道路上行駛的車輛組成的臨時(shí)性的開放式無(wú)線自組織網(wǎng)絡(luò),具有自組織、無(wú)中心、多跳傳輸以及節(jié)點(diǎn)高速移動(dòng)等特點(diǎn)。VANET的主要應(yīng)用方向?yàn)榻煌ò踩悜?yīng)用和交通狀況告知類應(yīng)用。VANET的作用主要是實(shí)現(xiàn)將交通安全信息或交通狀況信息快速發(fā)送至一定區(qū)域內(nèi)盡量多的節(jié)點(diǎn)。在VANET體系中車輛間(Vehicle-to-Vehicle)通信占有重要地位,但是至今,支持IEEE 802.11p協(xié)議的硬件系統(tǒng)還較少,不利于此類車載系統(tǒng)的應(yīng)用及普及。本系統(tǒng)應(yīng)用IEEE 802.15.4協(xié)議作為車輛間通信標(biāo)準(zhǔn),對(duì)射頻芯片的驅(qū)動(dòng)進(jìn)行了分析和設(shè)計(jì),此驅(qū)動(dòng)在基于廣播多跳路由算法中得以應(yīng)用,實(shí)現(xiàn)了車輛間緊急的信息告知與共享。
LR-WPAN(Low-rate Wireless Personal Area Network)網(wǎng)絡(luò)是一種結(jié)構(gòu)簡(jiǎn)單、成本低廉的無(wú)線通信網(wǎng)絡(luò),它使得在低電能和低吞吐量的應(yīng)用環(huán)境中使用無(wú)線連接成為可能。與WLAN相比,LRWPAN網(wǎng)絡(luò)需要的基礎(chǔ)設(shè)施少,有些情況甚至不需要基礎(chǔ)設(shè)施。IEEE802.15.4標(biāo)準(zhǔn)為L(zhǎng)R-WPAN網(wǎng)絡(luò)制定了物理層和MAC子層協(xié)議[1]。
IEEE802.15.4協(xié)議提供2種物理層的選擇(868/915MHz和2.4GHz),物理層與MAC層的協(xié)作擴(kuò)大了網(wǎng)絡(luò)應(yīng)用的范疇。這2種物理層都采用直接序列擴(kuò)頻(DSSS)技術(shù),降低了數(shù)字集成電路的成本,并且都使用相同的包結(jié)構(gòu),以便低作業(yè)周期、低功耗地運(yùn)作。2.4 G物理層的數(shù)據(jù)傳輸率為250 kb·s-1,868/915 MHz物理層的數(shù)據(jù)傳輸率分別是20 kb·s-1、40 kb·s-1[2]。
IEEE802.15.4MAC層的特征是:聯(lián)合,分離,確認(rèn)幀傳遞,通道訪問(wèn)機(jī)制,幀確認(rèn),保證時(shí)隙管理,和信令管理。MAC子層提供2個(gè)服務(wù)與高層聯(lián)系,即通過(guò)2個(gè)服務(wù)訪問(wèn)點(diǎn)(SAP)訪問(wèn)高層。通過(guò)MAC通用部分子層SAP(MCPS-SAP)訪問(wèn)MAC數(shù)據(jù)服務(wù),用MAC層管理實(shí)體SAP(MLME-SAP)訪問(wèn)MAC管理服務(wù)。這2個(gè)服務(wù)為網(wǎng)絡(luò)層和物理層提供了一個(gè)接口。
支持IEEE802.15.4協(xié)議的芯片較多,本協(xié)議選擇ATMEL公司的AT86RF230。AT86RF230芯片是真正的SPI到天線的解決方案,通過(guò)SPI和GPIO與CPU連接,使用IRQ中斷使CPU進(jìn)行異步事件處理。
AT86RF230 通過(guò) SPI接口(MISO、MOSI、SCLK和SEL)進(jìn)行數(shù)據(jù)交換,同時(shí)通過(guò)GPIO接口(RST和SLP_TR)控制AT86RF230的工作狀態(tài),通過(guò)IRQ管腳將異步事件通知CPU。連接圖[3]如圖1所示。
圖1 AT86RF230與CPU連接圖
AT86RF230使用標(biāo)準(zhǔn)的雙向同步串行總線SPI接口,CPU必須配置為主機(jī)模式來(lái)讀寫AT86RF230的數(shù)據(jù)。
/RST是低電平有效的控制管腳,用于對(duì)AT86RF230芯片的復(fù)位,CPU必須把這個(gè)管腳配置為輸出,當(dāng)CPU輸出為低時(shí)芯片復(fù)位。
SLP_TR是高電平有效的控制管腳,用于對(duì)AT86RF230芯片工作狀態(tài)的改變,CPU必須把這個(gè)管腳配置為輸出,當(dāng)CPU輸出為高時(shí)AT86RF230根據(jù)自己當(dāng)前的狀態(tài)進(jìn)行狀態(tài)轉(zhuǎn)換。
/IRQ管腳是上升沿觸發(fā)的中斷輸入口,當(dāng)AT86RF230有異步事件發(fā)生時(shí),將產(chǎn)生一個(gè)上升沿。CPU必須配置該管腳為高電平輸入狀態(tài)。
根據(jù)IEEE 802.15.4協(xié)議和AT86RF230操作方式,將整個(gè)驅(qū)動(dòng)框架的實(shí)現(xiàn)分為讀寫驅(qū)動(dòng)和MAC操作2個(gè)部分。讀寫驅(qū)動(dòng)主要包括對(duì)SPI的初始化和GPIO初始化,并根據(jù)AT86RF230寄存器操作模式,完成對(duì)8bit寄存器和子寄存器的讀寫功能。MAC操作主要包括通過(guò)對(duì)AT86RF230寄存器的操作完成IEEE802.15.4協(xié)議的數(shù)據(jù)幀的發(fā)送和接收。其框架結(jié)構(gòu)如圖2所示。
圖2 驅(qū)動(dòng)框架結(jié)構(gòu)
在驅(qū)動(dòng)框架設(shè)計(jì)中加入了對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)的支持。嵌入式實(shí)時(shí)操作系統(tǒng)的主要功能就是通過(guò)特定算法對(duì)任務(wù)進(jìn)行調(diào)度,同時(shí)操作系統(tǒng)提供信號(hào)量、郵箱、隊(duì)列和事件標(biāo)志組等功能完成任務(wù)間的通信與同步。應(yīng)用操作系統(tǒng)可以將整個(gè)軟件系統(tǒng)劃分為多個(gè)任務(wù),每個(gè)單獨(dú)任務(wù)處理固定的事件,任務(wù)間使用系統(tǒng)服務(wù)進(jìn)行通信。
該驅(qū)動(dòng)通過(guò)配置為無(wú)操作系統(tǒng)方式和支持操作系統(tǒng)方式。無(wú)操作系統(tǒng)方式中使用的延時(shí)和信息監(jiān)測(cè)一般通過(guò)軟件延時(shí)和標(biāo)志位監(jiān)測(cè)實(shí)現(xiàn)。支持操作系統(tǒng)方式使用到由操作系統(tǒng)提供的服務(wù),在延時(shí)中采用操作系統(tǒng)提供的延時(shí)服務(wù),中斷判斷和中斷處理中使用操作系統(tǒng)提供的信號(hào)量和郵箱進(jìn)行各個(gè)服務(wù)功能的同步與通信。
3.2.1 寄存器的讀寫方式
寄存器的操作包括2種:一種是8 bit寬度寄存器;另一種是只需要操作8 bit寬度寄存器中某幾位數(shù)據(jù)的子寄存器。寫操作大體過(guò)程如下:對(duì)地址進(jìn)行mask操作,關(guān)閉系統(tǒng)中斷、SPI使能,通過(guò)SPI傳送寄存器地址,SPI傳送給寄存器所要賦值內(nèi)容,SPI使能關(guān)閉,開啟系統(tǒng)中斷,寄存器的讀取操作與寫寄存器基本類似,從子寄存器讀取回來(lái)的數(shù)據(jù)進(jìn)行mask和移位等操作。
3.2.2 AT86RF230狀態(tài)轉(zhuǎn)換
AT86RF230具有2種狀態(tài)模式:基本運(yùn)行模式(Basic Operating Mode)和擴(kuò)展運(yùn)行模式(Extended Operating Mode)[4]。
AT86RF230 如下?tīng)顟B(tài):SLEEP、TRX_OFF、PLL_ON、RX_ON、BUSY_RX、BUSY_TX、BUSY_RX_AACK、RX_AACK_ON、TX_ARET_ON、BUSY_TX_ARET等狀態(tài),狀態(tài)之間可以通過(guò)設(shè)置寄存器TRX_STATE和設(shè)置管腳SLP_TR來(lái)轉(zhuǎn)換。
通過(guò)讀取AT86RF230狀態(tài)寄存器可以獲得其工作狀態(tài),AT86RF230有2組工作狀態(tài):一組包括簡(jiǎn)單的收發(fā)狀態(tài),可以直接通過(guò)對(duì)工作狀態(tài)寄存器的寫入或者通過(guò)SLP_TR管腳的狀態(tài)改變而改變;另一組包括所有在AT86RF230進(jìn)行數(shù)據(jù)收發(fā)或者上電時(shí)的臨時(shí)狀態(tài)。
3.2.3 AT86RF230初始化
初始化流程圖(圖3)需要初始化CPU的SPI外設(shè)、GPIO配置為輸出和上升沿中斷使能。AT86RF230上電后進(jìn)入P_ON模式,通過(guò)CPU對(duì)AT86RF230初始化進(jìn)入收發(fā)關(guān)閉(TRX_OFF)模式。
上電后 CPU 需要等待 510 μs[4]使得AT86RF230的PLL工作穩(wěn)定,然后對(duì)/RST和SLP_TR管腳進(jìn)行置低,延時(shí)6 μs后釋放/RST管腳。這時(shí)AT86RF 230進(jìn)入工作狀態(tài),輸出AT86RF230的器件編號(hào)和版本號(hào)。為了防止意外的中斷發(fā)生,在芯片工作之前關(guān)閉芯片所有的中斷,并通過(guò)讀取中斷狀態(tài)寄存器(IRQ_STATUS)進(jìn)行檢驗(yàn),然后使芯片進(jìn)入TRX_OFF狀態(tài),完成了芯片的初始化。具體流程圖如圖3所示。
3.2.4 AT86RF230中斷處理
AT86RF230有6種中斷分別為PLL鎖定中斷、PLL失鎖中斷、開始接收中斷、發(fā)送結(jié)束中斷、緩沖超載中斷和低壓報(bào)警中斷,中斷使能可以通過(guò)往中斷控制寄存器中寫入控制字完成。
圖3 AT86RF230初始化流程圖
系統(tǒng)使用EINT3_IRQHandler中斷入口程序來(lái)處理各個(gè)中斷,當(dāng)有中斷發(fā)生時(shí)AT86RF230IRQ管腳產(chǎn)生一個(gè)上升沿,CPU的中斷處理模塊響應(yīng)中斷并進(jìn)入EINT3_IRQHandler中斷處理程序。在中斷處理程序中,首先讀取出中斷寄存器的值以判斷中斷源而進(jìn)行響應(yīng)的處理,處理完畢一個(gè)中斷后還要判斷有沒(méi)有其他中斷需要處理,直到所有中斷都處理完畢。
為了實(shí)現(xiàn)對(duì)AT86RF230多中斷源的處理,在中斷處理程序中使用了循環(huán)查詢方法,其流程圖如圖4所示。
圖4 多中斷源處理流程圖
3.3.1 數(shù)據(jù)幀的接收與發(fā)送
當(dāng)AT86RF230接收到幀同步字段后,由原來(lái)的RX_ON狀態(tài)轉(zhuǎn)換到BUSY_RX,然后產(chǎn)生接收開始中斷,這時(shí)必須等待32 μs再去讀取幀長(zhǎng)度,使用幀長(zhǎng)度來(lái)計(jì)算延時(shí)時(shí)間,延時(shí)后讀取數(shù)據(jù)并產(chǎn)生接收完畢中斷,在中斷中讀取緩沖區(qū)數(shù)據(jù)或者進(jìn)行應(yīng)答。AT86RF230將BUSY_RX狀態(tài)轉(zhuǎn)換到RX_ON。將保存在數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)通過(guò)frame_read函數(shù)進(jìn)行查詢讀取。
在AT86RF230芯片中定義了2種觸發(fā)信息傳送的方法[4]:寫命令寄存器;SLP_TR管腳產(chǎn)生一個(gè)上升沿。在數(shù)據(jù)發(fā)送剛開始,必須保證SLP_TR管腳保持65ns的高電平,用于探測(cè)該管腳的上升沿。在發(fā)送數(shù)據(jù)前要讀取AT86RF230寄存器是否處于BUSY_TX狀態(tài),如果是則等待160μs以后再次進(jìn)行狀態(tài)判斷,否則進(jìn)行數(shù)據(jù)發(fā)送。將數(shù)據(jù)發(fā)送的功能定義為frame_write函數(shù)向上層提供函數(shù)接口。
3.3.2 數(shù)據(jù)接收與發(fā)送
為了能使用該驅(qū)動(dòng)進(jìn)行大數(shù)據(jù)量的收發(fā),在MAC層操作中定義了read和write函數(shù)[5]。
在write函數(shù)中,通過(guò)對(duì)數(shù)據(jù)的分包,使用frame_write函數(shù)對(duì)數(shù)據(jù)進(jìn)行連續(xù)發(fā)送,實(shí)時(shí)檢測(cè)發(fā)送狀態(tài)記錄錯(cuò)誤事件返回錯(cuò)誤事件類型。
read函數(shù)中使用frame_read函數(shù)查詢保存在CPU緩沖區(qū)的數(shù)據(jù),根據(jù)frame_read函數(shù)的返回結(jié)果進(jìn)行數(shù)據(jù)有效性判斷并進(jìn)行相應(yīng)的讀取操作。
數(shù)據(jù)的接收與發(fā)送函數(shù)是本驅(qū)動(dòng)向應(yīng)用層提供的接口,應(yīng)用層任務(wù)通過(guò)該接口實(shí)現(xiàn)對(duì)IEEE 802.15.4數(shù)據(jù)包的讀寫。
車輛間的通信方式是基于廣播路由的一種多跳網(wǎng)絡(luò),無(wú)線多跳網(wǎng)絡(luò)是一種無(wú)固定基礎(chǔ)設(shè)施的自組織網(wǎng)絡(luò),其特點(diǎn)是無(wú)網(wǎng)絡(luò)控制中心、多跳路由、網(wǎng)絡(luò)自組性、動(dòng)態(tài)拓?fù)涞取>W(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都可以發(fā)送和接收信號(hào),每個(gè)節(jié)點(diǎn)都可以與一個(gè)或者多個(gè)對(duì)等節(jié)點(diǎn)進(jìn)行直接通信。由于無(wú)線信道的鏈路共享、衰落和干擾等特點(diǎn),在無(wú)線多跳網(wǎng)絡(luò)中的各協(xié)議層之間存在著相互影響。為了減少鏈路共享、衰落和干擾對(duì)通信的影響,在IEEE 802.15.4傳輸中使能了自動(dòng)重傳和應(yīng)答等機(jī)制。
本驅(qū)動(dòng)應(yīng)用于多跳信息的傳輸,測(cè)試場(chǎng)景選擇了總長(zhǎng)度為415 m的道路上,節(jié)點(diǎn)1發(fā)送,節(jié)點(diǎn)2、3收到后轉(zhuǎn)發(fā),測(cè)試場(chǎng)景如圖5所示。根據(jù)各個(gè)節(jié)點(diǎn)收到的信息進(jìn)行解析和判斷,測(cè)試系統(tǒng)運(yùn)行情況,節(jié)點(diǎn)1發(fā)送信息后,節(jié)點(diǎn)4收到的信息如圖6所示。
圖5 測(cè)試場(chǎng)景圖
圖6 節(jié)點(diǎn)4收到的信息圖
通過(guò)實(shí)驗(yàn)測(cè)試表明,該射頻芯片硬件驅(qū)動(dòng)具有較好的移植性和較好的程序接口。該驅(qū)動(dòng)信息傳輸速率能夠達(dá)到IEEE 802.15.4定義的250 Kb·s-1的最高速率,滿足車輛間緊急信息告知與共享的應(yīng)用。
[1]IEEE.IEEE Standard for Part 15.4∶Wireless Medium Access Control(MAC)and Physical Layer(PHY)Specifications for Low-Rate Wireless Personal Area Networks(WPANs),IEEE Std 802.15.4[K/OL].(2003-10-01)[2011-10-05].http∶//ieeexplore.ieee.org/ielD/4152702/4152703/04152704.pdf.
[2]李曉維.無(wú)線傳感器網(wǎng)絡(luò)技術(shù)[M].北京:北京理工大學(xué)出版社,2007.
[3]王思山,吳黎兵.基于IEEE 802.15.4的車輛間通信系統(tǒng)硬件設(shè)計(jì)[J].湖北汽車工業(yè)學(xué)院學(xué)報(bào),2011,25(1):30-33.
[4]ATMEL.Atmel IEEE802.15.4 Transceiver AT86RF230 Datasheet[K/OL].(2007-12-03)[2011-10-05].http∶//www.atmel.com/dyn/resources/prod_documents/doc5131.pdf.
[5]ATMEL.AVR2009∶AT86RF230 – Software Programming Model[K/OL].(2005-08)[2011-10-05].http∶//www.atmel.com/dyn/resources/prod_documents/doc8099.pdf.