文獻標識碼: A
文章編號: 0258-7998(2010)12-0124-04
近些年來,隨著集成電路技術的發展,ISM頻段單芯片的無線數據通信IC的性能日益提高,短距離無線應用領域也在不斷地擴大,其中包括消費電子、工業控制、安防、自動抄表等諸多領域。數據的無線收發在無線產品設計中占有很大的比重。為縮短產品設計周期以及提高產品的穩定性,使產品設計工程師在設計過程中只需關注系統應用的設計,而將數據收發交付一種成熟穩定的收發系統來完成。為此,本文設計了一種基于SI4432+STM32F103的高性能無線收發平臺。
1 STM32F103和SI4432芯片簡介
STM32系列是采用ARM CortexTM-M3 內核的閃存微控制器,所有功能都具有業界最優的功耗水平。在結合了高性能(最高72 MHz頻率)、低功耗(睡眠、停機和待機模式)和低電壓(可2.0 V~3.6 V供電)特性[1]的同時保持了高度的集成性能和簡易的開發特性,為用戶提供最大程度的靈活性。
SI4432是Silicon Labs公司的ISM頻段收發一體芯片,最大輸出功率達到了+20 dBm(100 mW),具有“距離之王”的美譽(空曠距離可達2 000 m)。SI4432具有特有的連續頻率覆蓋范圍(240 MHz~960 MHz)、寬工作電壓(+1.8 V~+3.6 V)、高靈敏度(在BER<0.1%, 數據速率2.0 kb/s時為-118 dBm)等特點,還集成了一些可節省應用成本的特性,如喚醒定時器、溫度傳感器、發射和接收數據FIFO、高性能ADC[2],這些特性可大幅簡化系統設計師的工作,并允許使用低端的微控制器。高集成度使得外圍僅需一個30 MHz的晶體和幾個用于匹配/濾波的無源器,因此非常適用于對尺寸和成本敏感的大批量生產中的應用。
2 硬件設計
該平臺主要由微處理器ARM7 STM32F103(以下簡稱STM32)和RF收發芯片SI4432組成。STM32通過SPI接口對SI4432進行初始化配置、數據收發控制等,而SI4432通過nIRQ腳將相應的中斷發送至STM32。該平臺采用單天線進行數據的收發,所以必須采用RF收發切換開關用于對SI4432的收發狀態進行切換, 其中GPIO1控制RF切換開關為發送狀態,GPIO2控制RF切換開關為接收狀態[2]。系統硬件組成如圖1所示。
為滿足用戶各種不同的設計需求,該平臺還提供串口、通用IO口和AD轉化接口。其中,AD轉化接口可以用于需要處理模擬信號的系統,如有各種傳感器的環境監控系統。
3 軟件設計
軟件編程采用模塊化設計思想,系統中各主要功能模塊均編成獨立的函數由主程序調用。功能模塊包括:初始化程序(初始化SPI、 SI4432)、無線發送程序和無線接收程序等。
3.1狀態轉化
為了最大限度地降低功耗,軟件設計中采用SI4432的自動喚醒功能,在沒有數據收發時芯片處于空閑狀態,定時一段時間后將狀態切換至發送或是接收,檢查是否有數據的收發。SI4432主要有四種狀態:關閉、空閑、發送和接收,這些狀態在滿足一定的條件時可實現相互轉移,狀態轉移如圖2所示。在關閉狀態下功耗最低,空閑次之。空閑狀態有五種不同的模式,用戶可以根據不同的應用靈活選擇。這些狀態或模式可以在操作模式和功能控制寄存器07H中設定,通過在寄存器07H中設定txon/rxon控制位可以從空閑狀態中的任一模式自動轉移到發送/接收狀態。不同模式/狀態下轉換需要的時間和功耗都不相同,可以根據系統需要選擇最佳的狀態和模式。
3.2 無線發送程序流程
無線發送程序負責寫入數據載荷,并根據通信協議為數據載荷加上前導碼、同步字、數據載荷長度等,形成數據包并將其發送出去,其流程如圖3所示。在完成 SPI和 SI4432 的初始化后,通過配置 SI4432 的寄存器3EH來設置包的長度,然后清除發送FIFO,并通過SPI連續寫寄存器7FH將待發送數據寫入發送 FIFO(字節數小于64 B),最后打開“發送完中斷允許”標志,將其他中斷都禁止。完成中斷使能后,使能發送功能,數據開始發送。當數據包發送完時,引腳nIRQ會被拉低產生一個低電平并通知STM32數據包已發送完畢,當nIRQ引腳變為低時讀取中斷狀態并拉高 nIRQ,否則繼續等待。一次數據發送成功后,關閉發送使能,進入下一次數據循環發送狀態。
3.3 無線接收程序流程
無線接收程序負責獲取有效載荷數據長度,并讀取接收FIFO中的有效數據,其流程如圖4所示。在程序完成SPI和SI4432的初始化后,打開“有效包中斷”和“同步字檢測中斷”,將其他中斷都禁止,并使能接收功能。等待nIRQ引腳因中斷產生而被拉低,讀取中斷標志位拉高nIRQ引腳。若引腳 nIRQ 變成低電平,表示接收到有效數據包,通過寄存器4 BH讀取包長度信息,并通過SPI訪問寄存器7 FH從接收 FIFO中讀取接收到的數據,之后關閉接收使能,進入下一次數據接收狀態。
4 高性能應用設計
在實際的產品應用中,通常采用ACK握手信號、載波監聽多路訪問/沖突防止(CSMA/CA)等機制來保證數據收發的高效、穩定、可靠。而SI4432硬件不支持這些機制。為了增加本系統的高效適應性,設計了以下高性能通信機制。
4.1 基于ACK的雙向通信
在無線數據傳輸過程中,為了確保發送過程的可靠性,發送端需要一應答信號以確保發送數據已被準確無誤接收。本設計中,接收端也可以通過ACK數據包發送有效數據至發送端,大大提高了信道的使用率。應答信號數據包格式如圖5所示。
圖5中,ACK控制字節的數據格式如圖6所示。如果發送節點需要一反饋以判斷數據包是否到達目的地,則需要將應答請求位(ACKRQ位)置1。發送完數據包以后,自動轉為接收狀態,等待ACK狀態的到來并接收應答信號數據包。如果接收節點接收到有效數據包且檢測到ACK控制字節中的ACKRQ位為1,則會自動產生應答信號并且發送至發送節點。應答信息數據包中,ACK控制字節中的應答標志位(ACK位)被置1,并且有效數據為接收節點發給發送方的數據(當不需要發送有用數據時,全部用0x00填充),同時源地址和目的地址相互交換。具體通信過程如圖7所示。
程序中,為了防止發送節點長時間地等待,設定只需等待固定的時間,等待的時間長短主要由實際的網絡參數決定:是否使能了包轉發、實際的數據速率等。若在規定的時間內,發送方未能接收到ACK數據包,則進入ACK接收錯誤狀態;若成功接收將進入休眠、發送或是空閑狀態。
使用ACK信號可以實現收發節點的雙向通信,能很好地解決手動切換無線收發狀態導致雙方互相等待的問題,同時只在需要ACK信號的應用中才附帶應答有效信息,減少不必要的通信過程,大大提高了系統的穩定性和高效性。
4.2 精簡的CSMA/CA發送機制
在無線通信過程中,在一個通信域內可能存在幾十個乃至幾百個無線終端同時工作。在這樣復雜的無線網絡中,無線數據發送頻繁,發生碰撞不可避免。當數據發送發生碰撞時,意味著有數據幀丟失。為了盡可能地避免由于發送數據時發生碰撞而導致數據幀的丟失,必須引入一種可以避免發送碰撞的機制。
設計中參考了802.15.4中CSMA/CA的相關原理,采用非信標的方式實現符合系統要求的精簡的CSMA/CA發送機制[3]。非信標的方式即:結點若有數據要發送,需要先通過CSMA/CA機制進行信道監測,也就是在等待一個隨機時間后,對當前信道進行監聽,若監測到信道空閑,就可以開始傳送數據;若監測到信道忙,則需要重新等待一個隨機時間,然后再繼續監聽信道,具體實現流程如圖8[4-5]所示。步驟如下:
(1)在開始發送數據之前先監聽信道0.5 ms。如果在這段時間內信道是空閑的(通過讀取寄存器26 H的接收信號強度(RSSI)值,則與設定的信道空閑閾值做比較來判斷,發送節點將隨機延時0或1個時隙(1時隙為1 ms)。如果信道仍然是空閑的就開始發送數據;若信道變得忙碌,則跳到第(3)步驟。
(2)如果在0.5 ms內信道為忙,則發送節點每隔0.5 ms采樣一次RSSI值,直到RSSI值小于設定的門閾值或是采樣次數達到10次。如果采樣次數達到10次,則跳轉到步驟(5)。
(3)若信道仍然為忙,則發送方將再等待一隨機時間,等待時間的大小是由下式確定:
RandomTime = n×time[1:0]
其中,n是0~15中的一個隨機數,time[1:0]可以設定為固定的時間(0.25 ms、0.5 ms、1 ms、2 ms),可以根據應用的需要選擇不同的值。
(4)如果在這段時間內信道是空閑的,則發送數據;若忙碌則跳轉到步驟(5)。
(5)若嘗試的次數超出限定值(MAX_TRY_NUMBER),則跳轉到步驟(6)。
(6)如果由于信道忙無法發出數據,則發送節點將返回信道忙錯誤。
為了驗證精簡CSMA/CA發送機制的性能,在空曠場地進行了多節點(1個接收4個發送節點)數據收發測試,發送5 000次,MAX_TRY_NUMBER=4,實驗結果如表1所示。
由表1可以看出,當距離近、傳輸速率低時,兩種情況丟包率為0;當距離遠且傳輸速率高時,未使用CSMA/CA的丟包率隨著距離和速率的增加而大幅增加,而使用CSMA/CA的丟包率則很小,其性能最大可提高28倍。因此,使用精簡的CSMA/CA發送機制可以大大減少由于數據沖突而產生的丟包概率,從而提高了通信吞吐率。
5 低功耗處理
STM32和SI4432是模塊的耗電“大戶”,但它們都提供了低功耗運行功能。STM32支持三種省電模式:睡眠、停機和待機,并帶有自動喚醒功能。在本系統中STM32的常態為待機,在接收到任何中斷時,將從待機狀態切換到正常狀態,在執行完任務后,立即從正常狀態切換回待機狀態。而SI4432中集成了一個基于內部32.768 kHz RC振蕩器的定時喚醒器,可以從睡眠模式定期喚醒芯片,而且SI4432內部集成的功放(PA)的輸出功率是可編程的,工作電流與發射功率成正比,可根據RSSI的值來動態調整輸出功率的值,當RSSI的值大時可減小輸出功率;反之,則可增大輸出功率[2]。
本文設計的無線收發模塊可用于一對一、一對多以及網狀網近距離無線通信環境中,系統工作穩定可靠,具有很好的通用性。因STM32自帶ADC,SI4432自帶溫度傳感器,稍作改動就可以應用到安防、自動抄表、傳感器網絡、無線遙控等一些短距離無線通信場合。該平臺具有較高的應用價值,為無線數據傳輸提供了一個很好的解決方案。
參考文獻
[1] STMicroelectronics Inc. STM32F10xxx_reference_manual[R]. 2008.
[2] Silicon Laboratories Inc. Si4432 user′s manual[R].2009.
[3] IEEE Std 802. part 15.4: wireless medium access control (MAC) and physical layer(PHY) specifications for lowrate wirelesspersonal area networks(WPANs)[S]. IEEE, 2006.
[4] Silicon Laboratories Inc. EZMACPRO user′s guide[R]. 2009.
[5] 鄭朝霞,鄒雪城,姜天杰,等. WSN中CSMA/CA協處理器的軟硬協同設計[J]. 固體電子學研究與進展,
2009,29(1):132-137.