好吊视频一区二区三区-国产精品V欧美精品V日韩精品-老司机亚洲精品影院-国产精品视频免费播放

物聯傳媒 旗下網站
登錄 注冊
RFID世界網 >  技術文章  >  其他  >  正文

無線傳輸系統中nRF2401芯片數據丟失問題的研究

作者:郝衛亮
來源:電子技術應用
日期:2017-12-12 15:11:57
摘要:針對近距離無線傳輸系統中nRF2401芯片在實際應用中存在的數據丟失問題,提出一種對通信協議加以擴展的解決辦法,并在用單片機與該芯片設計的實驗電路上給予證明,給出了程序開發流程及硬件接口電路。實驗結果分析表明,此方法可以有效解決數據丟失的問題,實現可靠的無線數據傳輸。

  當前,近距離無線通信技術在越來越多的領域中得到應用,凡是布線繁雜或不允許布線的場合,如小型無線網絡、門禁系統、工業數據采集系統、非接觸RF智能卡等,都可以通過無線通信來滿足需求。在大量出現的射頻集成芯片中,由Nordic公司推出的無線收發一體芯片nRF2401,因其外圍電路簡單、通信速率高、通信質量穩定可靠、成本低、開發周期短等優點,在無線系統開發中得到廣泛應用。但該芯片內部通信協議僅包含差錯重傳機制,而沒有考慮實際應用中存在的數據丟失問題。本文用丟失重傳機制對其通信協議進行了擴展,并在用C8051F236微控制器與nRF2401設計的簡單通信電路上,對所提解決方案的正確性加以實驗證明。

  1 芯片工作原理

  nRF2401工作原理可概括為:一個配置字、兩種通信模式、兩個通道和四種狀態[1]。

  一個配置字:nRF2401的各種參數,都由控制器通過一個3線接口(CLK、DR和DATA)寫入一個單獨的配置寄存器。該配置寄存器共144位,稱為狀態字。

  兩種通信模式:Direct Mode(直接模式)和ShockBurstTM Mode(突發模式" title="突發模式">突發模式)。直接模式的使用與其他傳統射頻收發器的原理一樣,需要通過軟件在發送端添加校驗碼和地址碼,在接收端判斷是否為本機地址,并檢查數據是否傳輸正確。突發模式使用芯片內部的先入先出堆棧區,數據可從低速微控制器送入,高速發射出去,地址和校驗碼由硬件自動添加和刪除。

  兩個通道:控制器與nRF2401通過由CLK、DR和DATA組成的兩個通道交換傳輸數據,通道1(CLK1、DR1、DATA)可接收和發送數據,通道2(CLK2、DR2和DOUT2)只能接收數據,并且接收頻道2的頻率只有在比頻道1高8MHz的情況下才能保證正確接收。

  四種狀態:分別為Active(RX/TX)(激活狀態)、Configuration(配置狀態)、Stand_by(等待狀態)、Power down(掉電狀態),通過3個引腳PWR_UP、CE、CS控制。

  nRF2401工作時,首先置2401為配置狀態,由控制器中寫入狀態字;而后,在激活狀態下,使用狀態字中指定的通道,進行數據收發,收發過程中進行交互時一方進入等待狀態;如全部數據都傳送完畢,則進入掉電狀態。

  2 RF協議擴展

  nRF2401在其設計時,把多數單元如:頻率合成器、晶體振蕩器、調制器和數模轉換器等都進行了集成,因而外圍電路簡單。其內部通信協議中的差錯重傳機制對發送的每個數據幀" title="數據幀">數據幀在接收方進行片內CRC校驗,以保證接收數據的正確性。但在實際應用中[2],往往因為各種因素,如來自應用電路和外界的噪聲干擾,或者元器件老化導致的信號衰減等,導致傳輸過程中的數據丟失。

  為有效解決上述問題,可用丟失重傳機制對其通信協議加以擴展,即由發送方對數據進行預封裝處理。具體做法是:發方將待發送數據分組,計算出每組的CRC校驗值,封裝于預先定義好的包內,分若干幀發送出去。收方要對每次接收到的數據幀及發方定義的數據包進行兩次CRC校驗,通過幀CRC校驗確認接收數據的正確性,通過包CRC校驗判斷是否發生數據包丟失。在丟失發生的情況下,收方有3次請求重傳的機會,收發雙方用ACK信號進行交互。

  2.1 數據分組

  將待發送數據進行分組時,要考慮兩個因素:數據幀的格式及狀態字設置。在突發傳遞模式下,nRF2401的數據幀格式如表1。

無線傳輸系統中nRF2401芯片數據丟失問題的研究

  其中,幀頭Pre-amble、收方地址address、crc分別占8、32、16位,由于突發模式下數據幀長度不能超過256位,所以數據部分Payload的最大長度是:256-(Pre-amble:8位+Address:32位+CRC:16位)=200位(25B),即每幀的payload部分可以為1~25B。下面的實驗中,由狀態字設置數據部分長度為20B。所以,對待傳送數據分組時,每組長度取20B的整數倍。本系統按每組60B進行分組。其中,高58位為數據,兩個低字節用于存放由58B數據計算出的CRC校驗值。這樣,每個數據包(組)分3個數據幀發送。

  需要指出的是,在每次發送完一個數據封裝包后,收發雙方的交互要進行兩次收發狀態的轉換,會占用數據傳輸的時間,但nRF2401有一個優勢在于:它只需要改變配置字的最低位RXEN就可進行收發方式(RXEN=0 TX;RXEN=1 RX)轉換,而不必重置整個配置字。每進行一次轉換,需要控制器通過CE、CS引腳改變nRF2401的工作狀態,由nRF2401的時序可知,會有兩個最長5μs的延時,兩次狀態轉換共有20μs的延時。由于實際應用中一次傳輸的數據量比較少,而且數據丟失發生的幾率很小,所以不會對傳輸速度有太大的影響。

  2.2 適用范圍

  不同的應用,需要一次性傳輸的數據量也不同,上述方法適用于傳輸數據量為KB以上的情況。為了減少發生數據丟失時重傳的代價,當傳輸數據量少于KB時,可以按實際情況,調整狀態字中設置的Payload段的長度,對數據進行靈活分組。例如:如果待傳輸數據為560B,可以設置Payload段的長度為10B,按每組30B封裝,這樣,所有數據分20個組,分60幀傳送完畢。

  另外,如果待傳輸數據量為100B左右,顯然沒有分組的必要,但為了保證不發生數據丟失,可以在封裝時去掉CRC段,加一個1B的head字段,作為傳輸數據的序號,每個封裝包用1個數據幀發送。接收端通過檢查head字段,確定是否發生數據丟失。

  3 實驗設計

  3.1 硬件設計

  硬件實現電路如圖1。由單片機C8051F236控制nRF2401進行數據傳輸。由于單片機與nRF2401的供電電壓分別為1.9~3.6V和5V,設計中采用MAX232芯片進行電平轉換。另外,在發送端和接收端采用幾乎完全對稱的設計。

無線傳輸系統中nRF2401芯片數據丟失問題的研究

  將C8051F236的P2.5、P2.6、P2.7配置為通用I/O引腳[3],與nRF2401的CE、CS、PWR_UP連接,控制nRF2401的工作狀態。系統上電時,首先置nRF2401為配置狀態,寫入狀態字。隨后置nRF2401為激活方式。P0.2-0.7也配置成通用I/O引腳,與nRF2401的CLK1、DR1、DATA(通道1)、CLK2、DR2、DOUT2(通道2)連接,進行數據收發。當需要發送數據時,單片機置CE為1,通過通道1將數據寫入nRF2401,而后置CE為0,由nRF2401將數據發送出去。如果封裝包的所有數據都發送完畢,切換到接收狀態。接收方用兩個通道同時接收數據。

  3.2 軟件設計

  程序開始時對C8051F236及nRF2401狀態字進行配置,隨后進入激活方式。本系統狀態字配置接收端值為:0x8E08.1CA0.A000.0000.00CC.0000.0000.CC23.CF41。配置后nRF2401每次發送的數據長度為160bit(20B),地址段長度32bit,通道1、2硬件地址0xCC,16位CRC校驗段,以突發模式進行雙通道接收,通信速率250Kbps,晶振頻率16MHz,輸出功率0dBm,工作頻段2440~2448MHz,接收狀態。發送端值為:0x8E08.1CA0.A000.0000.00CC.0000.0000.CC23.CF40,發送狀態。

  進入激活狀態后,收發雙方行為描述如下:

  第一步:定義一個數據包結構,發方將待發送數據分組,計算出數據包CRC校驗值,然后將數據封裝、發送。發送完一個封裝包(共60B)后,停止發送,切換到接收狀態,等待ACK信號到來。收方接收完一個封裝包后,切換到發送狀態,同時計算接收到的數據包的CRC校驗值,如果與包內的CRC值相符,則說明數據接收正確,收方置ACK值為0;如不一致,則說明發生數據包丟失,收方置ACK值為1。

  第二步:收方發送ACK信號給發方,發方根據ACK值決定繼續發送數據包(ACK=0)還是重新發送數據包(ACK=1)。

  第三步:收發雙方再次重新配置,繼續數據傳輸。

  第四步:在發生數據包丟失的情況下,收方對要求重發次數用count進行計數,如果三次重發請求所收到的數據仍不正確,則不再要求重發,切換到Stand_by狀態。

  軟件流程圖如圖2。

無線傳輸系統中nRF2401芯片數據丟失問題的研究

  數據包可定義為結構體:

  Struct PACKAGE {

  Char head;//1B數據序號(可選)

  Char DATA[57];//58B數據

  Char CRC[1];//2BCRC校驗值

  ……

  } package;

  除收發程序外,收發雙方對包封裝、包檢測及包的CRC值計算定義相應的函數。發方對數據分組時,如未發送數據不足60B,則在高位補0。

  3.3 實驗與結果分析

  向單片機中載入程序后,nRF2401工作模式配置為雙通道突發模式,控制程序采用C語言編寫。用評估參數BLER(塊錯誤),對實驗中數據傳輸過程中的數據丟失情況進行評估:

  BLER=丟失塊數/傳輸的總塊數

  實驗方案:在允許的距離范圍(10~30米)內,分不同傳輸距離,分別發送1000個數據包,每個距離發送3次,BLER值取3次的平均值。為了進一步說明問題,首先以未擴展的協議進行收發,然后再以擴展協議進行收發,并分別記下相應BLER值。實驗數據如表2。

無線傳輸系統中nRF2401芯片數據丟失問題的研究

  由表2可知,進行協議擴展后,BLER值僅為0.0%~0.14%,這充分說明本文提出的協議擴展方法能夠實現更加可靠的數據傳輸。實驗時數據傳輸速度為120kbps,主要原因是受單片機讀寫速度的限制,更換高速單片機可提高傳輸速率。

  本文用擴展協議的方法,解決了無線收發芯片nRF2401在實際應用中存在的數據丟失問題。實驗結果表明,本文給出的方法可以有效提高nRF2401無線傳輸的可靠性,傳輸速率符合不同應用領域的要求,而且該方法具有通用性和靈活性的特點,可在nRF2401芯片的所有應用及其他無線通信系統中推廣。