摘要:主要介紹基于MSP430F133 單片機和RFW 模塊的短距離無線數據通信,重點說明了 RFW 模塊的RFW-D100 和RFW102 的特點和實際應用,文中給出了相關的硬件設計。無線數據 通信的實現是基于CSMA 協議,在固件編程有所體現。
1 前言 隨著信息技術的不斷發展,人們對通信技術的需求越來越強,擺脫有線網絡的束縛實現 無線通信始終是大家關心的問題,當今無線通信研究越來越熱,應用非常廣泛,使人與人之 間的通信更加方便快捷,更具有市場發展前景。 2 硬件設計 本設計主要實現短距離無線數據通信,由兩個部分組成:發送終端,接收終端。無線數 據的收發是通過串口來實現的,通過串口給無線發送端送數據,無線接收端再通過串口將接 收的數據傳給PC。發送終端和接收終端的硬件設計是一樣的,只不過是在固件編程時有所 不同。系統實現框圖,如圖一所示。
圖一系統實現框圖 設計中采用的處理器為MSP430F133,它是一種超低功耗的混合信號控制器,具有16 位RISC 結構,CPU 中的16 個寄存器和常數產生器使MSP430 能達到最高的代碼效率。單 片機通過采用不同的時鐘源工作可以使器件滿足不同功耗要求,適當選擇時鐘源,可以讓器 件的功耗達到最小。外設資源豐富。支持匯編和C 語言。此次開發利用的是IAR 公司提供 的Embedded Workbench 集成開發環境。 下面介紹一下RFW 模塊。RFW 模塊是由RFWaves 公司開發的,RFWaves 是一家以色 列公司,主要是提供短距離RF 應用的解決方案。首先介紹一下RFW102,它是一個可靠而 耐用的短距離RF 收發器芯片組。它是一個物理層RF 收發器,工作在2.4GHz,包含一個印 在印制板上的天線,無需外部天線。工作電壓很寬:2.7~3.6V,適合不同的電池供電;功 耗低:待機電流僅1µA,喚醒時間20µs。模塊提供一個擴頻脈沖管作通信用,速率達到1Mbps。 有效室內距離可達25 米,在RF 前端增加一個功率放大器可將有效范圍擴展到100 米。 RFW102 芯片組包括RFW24,RFW488C 和RFW488R 三個芯片。RFW24 完成所有時序、 放大、切換、發送和接收功能;RFW488C 是一個完全非差分無源器件,是DSSS(直接序列擴 頻技術)擴頻和去擴頻的基本單元,實現4 引腳SAW 相關器;RFW488R 是單端口SAW 諧振器, 諧振頻率為488MHZ,可作為系統的CW 諧振源。RFW-D100 是對RFW-102 的補充,使得能 夠在MCU 上實現無線通信協議。RFW-D100 主要特點是提供輸入輸出緩存,對數據包地址 進行濾波,循環冗余碼校驗,看門狗定時器,工作頻率為6-24M,低功耗模式:后臺處理和 電源關閉模式,提供網絡載波偵聽,對RFW-D100 的發送和接收的時鐘漂移進行補償,提供中斷,用于載波偵聽機制的無線電信號增強指示器(RSSI)。在RFWaves 的應用中,MCU 主要負責MAC 層協議。RFWD-100 可以緩解MCU 處理MAC 協議實時的要求。RFW-D100 在MCU 和RFW-102 提供了一個并行接口,它可以把快速連續輸入的數據轉為8-bit 字,這 樣就非常適合8-bit 的MCU 進行處理,它采用16 個字節的FIFO 對輸入的數據進行緩存, 提高了MCU 使用RFWD-100 的效率。并不是一個中斷讀一個字節,每一個中斷MCU 可以 讀16 個字節,這就減少了MCU 處理數據的開銷。 無線數據通信的收發硬件設計是一樣的。基于電路的復雜性,下面給出電路圖得主要連 線。如圖二所示

圖二系統硬件實現的主要連接圖 硬件設計中對MCU 提供雙晶振系統,低頻晶振32.768K 為RS232 接口提供頻率支持, 高頻晶振8M 為系統運行的主時鐘,P1 口的8 位為RFW-D100 的8 根數據線,P4.0~P4.4 為 RFW-D100 5 根地址線,P2 口與P3 口部分管腳為RFW-D100 的控制腳。由于MSP430 系統 無對外開放總線,故MSP430 對RFW-D100 的讀寫是通過模擬實現的。RFW-D100 主要實 現對數據的輸入輸出緩沖,其內部的寄存器標志著發送和接收時各種事件的發生。RFW102 主要完成對數據的無線發送和接收。
3 軟件設計 3.1CSMA 協議 局域網一般采用共同的介質的方法,為此當多個站點同時要訪問介質時,就要進行控制。 CSMA(載波偵聽多路訪問)就是常用的一種方式。當網中站臺要發送數據時,先檢測是否 有別的站臺占用了傳輸媒體?方法是先進行載波偵聽,如果發現介質(媒體)空間,就立刻 發送數據;否則就根據不同的策略退避重發。
3.2 數據包結構介紹 在介紹具體軟件設計之前學要了解一下基于CSMA 協議數據包結構。如表一所示:

表一:數據包的結構 1. Preamble:RFW-D100 發送PREAMBLE 的目的是為了使接收機和發送相同步。20 位長,高四位為1111,由RFW-D100 自動產生,對RFW102 的接收段進行初始化。其它16 位由PRE—L 和PRE—H 決定。發送順序為從高到低。
2. Network:4 個字節,指明數據包屬于哪一個網絡。
3. Dst/Src:1 個字節。由節點發送到主控制器,叫做源段;由主控制器向節點發送叫目的段。源段的值是指由節點向主控制器發送的ID 號;目的段值是指由主控制器向節點發 送的ID 號。
4. Sequence:1 個字節。這個段包括兩個值。高四位表示數據序號;低四位表示應答包的 序號。包的類型由這個段值決定,低四位都為0 表示這是一個數據包,高四位都為0 表示這是一個應答包。如果都不為0 則表示既是數據包又是應答包。
5. Size:1 個字節。這個段說明包的大小。包的結構有兩種類型由PPR[5](Packet ParameterRegister)決定。
6. Payload:包含來自上層軟件層的數據
7. CRC:2 個字節。RFW-D100 在發送端給每個包增加CRC 信息,使得接收機對接收的數 據進行檢測。接收端的CRC 計算的結果和接收到的包的CRC 段相比較,如果CRC 的比較結果相同,接收機認為包接收正確;如果CRC 的比較結果不等,則接收機認為接收到的包不正確。CRC 通過PPR[3:4]來配置。需要注意的是,RWF-D100 對每一個接收的包進行CRC 計算,CRC 的值并不放在RX_FIFO 中,只把計算結果放在RX_FIFO中,作為包的最后一個字節。0X55 表示CRC 接收正確;0XAA 表示CRC 接收錯誤。可通過讀SSR[0](System Status Register)來判斷。
3.3 固件編程 1. 對RFWD-100 和REW102 初始化,包括復位,啟動RFW102 等操作。主要是對RFD_RST、 IDLE_RST、WDT_RST、POWER_DOWN、IDLE_MODE、WDT 進行相關設置。
2. 主程序初始化,包括啟動晶振,看門狗以及串口初始化。主要是對BCSCTL2設定選定主 系統時鐘為XT2;對UCTL0設定串口數據位為8位,低頻晶體為串口提供工作頻率,設定波特率寄存器UBR和波特率調整寄存器UMCTL0,使得串口的數據傳輸率為4800bps,并設定模塊使能寄存器在發送端接收模塊使能在接收端發送模塊使能,通過功能選擇寄存器設定P3.4為發送,P3.5為接收。
3. 無線發送端:啟動RFW-D100設置為發送狀態,其中READ()為讀RFW-D100數據,WRITE ()為向RFW-D100寫數據。 WRITE(SCR4,3); //RF_active,開放所有中斷 WRITE(SCR2,0x1c); //D100處于接收狀態,RX_FIFO復位 WRITE(BLR,18); //位長為18+6=24 WRITE(PPR,0x3A); //發送包為固定大小, WRITE(PSR,12); //PSR(Packet Size Register)設定包的大小為12個字節 WRITE(PRE_H,0x55); WRITE(PRE_L,0xBB);//PREAMBLE=0X55BB WRITE(IER,0x10);//IER中斷使得寄存器設定TX_EMPTY=1 WRITE(SCR3,128);//SCR3(系統控制寄存器)LOW_MODE=1 WRITE(SCR4,0); READ(TFSR,REG1);//TFSR(Transmit FIFO Status Register)
4. 無線接收端:啟動RFW-D100為接收狀態 WRITE(SCR2,0x0c);//初始化RFW-D100為接收模式,接受緩沖區復位 WRITE(BLR,18); WRITE(PSR,12); WRITE(PPR,0x3A); WRITE(PRE_H,0xF5); WRITE(PRE_L,0xBB); WRITE(SCR4,0x03);//RF_ACTIVE=1,所有的中斷使能 WRITE(IER,0x02);//LOCK_OUT中斷使能,表示如果包正常接收則則引發LOCK_OUT中斷 WRITE(SCR2,0x62);//PREAMBLE尋找使能
5. CSMA協議要求一個節點在發送之前先偵聽通道,如果通道中有其它節點在使用通道,則 隨機等待一段時間再發送。載波偵聽協議使得通道帶寬利用率更加有效,每一個節點的 功耗更低。RFW-D100提供兩種技術進行載波偵聽,一個是RSSI(Radio Signal Strength Indicator),另一個是網絡載波偵聽算法。本設計中使用RSSI技術,使用內部比較器 來檢測發射功率是否超過一個門限值,這個門限值由外部電阻來確定,當檢測到強的發 送信號時則停止發送。通過設置SCR1[5](COMP_EN)來使能或禁止RSSI比較器,比較輸 出的結果在SSR[7](COMP_IN)中。可以通過以下程序來實現。 WRITE(SCR1,0x20); do { READ(SSR,REG1); }
while(REG1&SSR_COMP_IN); 4 結論 先把設計的兩塊板通過串口與PC機相連,一塊作為發送端,另一塊作為接收端,這兩塊 板之間有一定的距離,沒有任何連線,通過串口給無線發送端送數據,與無線接收端相連的 PC機正確顯示相應的數據,則實現了無線數據通信。這時再加入另一塊發送端,同樣彼此相 隔一定的距離,中間沒有任何連線,也在發送數據,這就存在著競爭信道,發生碰撞,導致 數據不能傳送的可能性,軟件設計中采用了CSMA協議,設定的數據包長度為12位,在接收端 輪流正確顯示兩塊發送端的12位數據。 在USB接口應用比較廣泛的今天我們也可以使用USB接口來實現無線通信,同樣還可以實 現無線語音通信。 參考文獻: 1.泰龍編著,MSP430單片機應用系統開發典型實例,中國電力出版社,2005 2.胡大可編著,MSP430系列單片機C語言程序設計與開發,北京航空航天大學出版社,2003 3.鄭少仁王海濤趙志峰米志超黎寧編著,Ad Hoc 網絡技術,人民郵電出版社,2005 |