《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信与网络 > 业界动态 > 无线传输系统中nRF2401芯片数据丢失问题的研究

无线传输系统中nRF2401芯片数据丢失问题的研究

2008-07-03
作者:郝卫亮

??? 摘 要: 針對(duì)近距離無線傳輸系統(tǒng)中nRF2401芯片在實(shí)際應(yīng)用" title="實(shí)際應(yīng)用">實(shí)際應(yīng)用中存在的數(shù)據(jù)丟失" title="數(shù)據(jù)丟失">數(shù)據(jù)丟失問題,提出一種對(duì)通信協(xié)議" title="通信協(xié)議">通信協(xié)議加以擴(kuò)展的解決辦法,并在用單片機(jī)與該芯片設(shè)計(jì)的實(shí)驗(yàn)電路上給予證明,給出了程序開發(fā)流程及硬件接口電路。實(shí)驗(yàn)結(jié)果分析表明,此方法可以有效解決數(shù)據(jù)丟失的問題,實(shí)現(xiàn)可靠的無線數(shù)據(jù)傳輸。
??? 關(guān)鍵詞: nRF2401芯片,無線傳輸,數(shù)據(jù)丟失

?

??? 當(dāng)前,近距離無線通信技術(shù)在越來越多的領(lǐng)域中得到應(yīng)用,凡是布線繁雜或不允許布線的場合,如小型無線網(wǎng)絡(luò)、門禁系統(tǒng)、工業(yè)數(shù)據(jù)采集系統(tǒng)、非接觸RF智能卡等,都可以通過無線通信來滿足需求。在大量出現(xiàn)的射頻集成芯片中,由Nordic公司推出的無線收發(fā)一體芯片nRF2401,因其外圍電路簡單、通信速率高、通信質(zhì)量穩(wěn)定可靠、成本低、開發(fā)周期短等優(yōu)點(diǎn),在無線系統(tǒng)開發(fā)中得到廣泛應(yīng)用。但該芯片內(nèi)部通信協(xié)議僅包含差錯(cuò)重傳機(jī)制,而沒有考慮實(shí)際應(yīng)用中存在的數(shù)據(jù)丟失問題。本文用丟失重傳機(jī)制對(duì)其通信協(xié)議進(jìn)行了擴(kuò)展,并在用C8051F236微控制器與nRF2401設(shè)計(jì)的簡單通信電路上,對(duì)所提解決方案的正確性加以實(shí)驗(yàn)證明。
1 芯片工作原理
??? nRF2401工作原理可概括為:一個(gè)配置字、兩種通信模式、兩個(gè)通道和四種狀態(tài)[1]。
??? 一個(gè)配置字:nRF2401的各種參數(shù),都由控制器通過一個(gè)3線接口(CLK、DR和DATA)寫入一個(gè)單獨(dú)的配置寄存器。該配置寄存器共144位,稱為狀態(tài)字。
??? 兩種通信模式:Direct Mode(直接模式)和ShockBurstTM Mode(突發(fā)模式" title="突發(fā)模式">突發(fā)模式)。直接模式的使用與其他傳統(tǒng)射頻收發(fā)器的原理一樣,需要通過軟件在發(fā)送端添加校驗(yàn)碼和地址碼,在接收端判斷是否為本機(jī)地址,并檢查數(shù)據(jù)是否傳輸正確。突發(fā)模式使用芯片內(nèi)部的先入先出堆棧區(qū),數(shù)據(jù)可從低速微控制器送入,高速發(fā)射出去,地址和校驗(yàn)碼由硬件自動(dòng)添加和刪除。
??? 兩個(gè)通道:控制器與nRF2401通過由CLK、DR和DATA組成的兩個(gè)通道交換傳輸數(shù)據(jù),通道1(CLK1、DR1、DATA)可接收和發(fā)送數(shù)據(jù),通道2(CLK2、DR2和DOUT2)只能接收數(shù)據(jù),并且接收頻道2的頻率只有在比頻道1高8MHz的情況下才能保證正確接收。
??? 四種狀態(tài):分別為Active(RX/TX)(激活狀態(tài))、Configuration(配置狀態(tài))、Stand_by(等待狀態(tài))、Power down(掉電狀態(tài)),通過3個(gè)引腳PWR_UP、CE、CS控制。
??? nRF2401工作時(shí),首先置2401為配置狀態(tài),由控制器中寫入狀態(tài)字;而后,在激活狀態(tài)下,使用狀態(tài)字中指定的通道,進(jìn)行數(shù)據(jù)收發(fā),收發(fā)過程中進(jìn)行交互時(shí)一方進(jìn)入等待狀態(tài);如全部數(shù)據(jù)都傳送完畢,則進(jìn)入掉電狀態(tài)。
2 RF協(xié)議擴(kuò)展
??? nRF2401在其設(shè)計(jì)時(shí),把多數(shù)單元如:頻率合成器、晶體振蕩器、調(diào)制器和數(shù)模轉(zhuǎn)換器等都進(jìn)行了集成,因而外圍電路簡單。其內(nèi)部通信協(xié)議中的差錯(cuò)重傳機(jī)制對(duì)發(fā)送的每個(gè)數(shù)據(jù)幀" title="數(shù)據(jù)幀">數(shù)據(jù)幀在接收方進(jìn)行片內(nèi)CRC校驗(yàn),以保證接收數(shù)據(jù)的正確性。但在實(shí)際應(yīng)用中[2],往往因?yàn)楦鞣N因素,如來自應(yīng)用電路和外界的噪聲干擾,或者元器件老化導(dǎo)致的信號(hào)衰減等,導(dǎo)致傳輸過程中的數(shù)據(jù)丟失。
??? 為有效解決上述問題,可用丟失重傳機(jī)制對(duì)其通信協(xié)議加以擴(kuò)展,即由發(fā)送方對(duì)數(shù)據(jù)進(jìn)行預(yù)封裝處理。具體做法是:發(fā)方將待發(fā)送數(shù)據(jù)分組,計(jì)算出每組的CRC校驗(yàn)值,封裝于預(yù)先定義好的包內(nèi),分若干幀發(fā)送出去。收方要對(duì)每次接收到的數(shù)據(jù)幀及發(fā)方定義的數(shù)據(jù)包進(jìn)行兩次CRC校驗(yàn),通過幀CRC校驗(yàn)確認(rèn)接收數(shù)據(jù)的正確性,通過包CRC校驗(yàn)判斷是否發(fā)生數(shù)據(jù)包丟失。在丟失發(fā)生的情況下,收方有3次請(qǐng)求重傳的機(jī)會(huì),收發(fā)雙方用ACK信號(hào)進(jìn)行交互。
2.1 數(shù)據(jù)分組
??? 將待發(fā)送數(shù)據(jù)進(jìn)行分組時(shí),要考慮兩個(gè)因素:數(shù)據(jù)幀的格式及狀態(tài)字設(shè)置。在突發(fā)傳遞模式下,nRF2401的數(shù)據(jù)幀格式如表1。

??? 其中,幀頭Pre-amble、收方地址address、crc分別占8、32、16位,由于突發(fā)模式下數(shù)據(jù)幀長度不能超過256位,所以數(shù)據(jù)部分Payload的最大長度是:256-(Pre-amble:8位+Address:32位+CRC:16位)=200位(25B),即每幀的payload部分可以為1~25B。下面的實(shí)驗(yàn)中,由狀態(tài)字設(shè)置數(shù)據(jù)部分長度為20B。所以,對(duì)待傳送數(shù)據(jù)分組時(shí),每組長度取20B的整數(shù)倍。本系統(tǒng)按每組60B進(jìn)行分組。其中,高58位為數(shù)據(jù),兩個(gè)低字節(jié)用于存放由58B數(shù)據(jù)計(jì)算出的CRC校驗(yàn)值。這樣,每個(gè)數(shù)據(jù)包(組)分3個(gè)數(shù)據(jù)幀發(fā)送。
??? 需要指出的是,在每次發(fā)送完一個(gè)數(shù)據(jù)封裝包后,收發(fā)雙方的交互要進(jìn)行兩次收發(fā)狀態(tài)的轉(zhuǎn)換,會(huì)占用數(shù)據(jù)傳輸?shù)臅r(shí)間,但nRF2401有一個(gè)優(yōu)勢(shì)在于:它只需要改變配置字的最低位RXEN就可進(jìn)行收發(fā)方式(RXEN=0 TX;RXEN=1 RX)轉(zhuǎn)換,而不必重置整個(gè)配置字。每進(jìn)行一次轉(zhuǎn)換,需要控制器通過CE、CS引腳改變nRF2401的工作狀態(tài),由nRF2401的時(shí)序可知,會(huì)有兩個(gè)最長5μs的延時(shí),兩次狀態(tài)轉(zhuǎn)換共有20μs的延時(shí)。由于實(shí)際應(yīng)用中一次傳輸?shù)臄?shù)據(jù)量比較少,而且數(shù)據(jù)丟失發(fā)生的幾率很小,所以不會(huì)對(duì)傳輸速度有太大的影響。
2.2 適用范圍
??? 不同的應(yīng)用,需要一次性傳輸?shù)臄?shù)據(jù)量也不同,上述方法適用于傳輸數(shù)據(jù)量為KB以上的情況。為了減少發(fā)生數(shù)據(jù)丟失時(shí)重傳的代價(jià),當(dāng)傳輸數(shù)據(jù)量少于KB時(shí),可以按實(shí)際情況,調(diào)整狀態(tài)字中設(shè)置的Payload段的長度,對(duì)數(shù)據(jù)進(jìn)行靈活分組。例如:如果待傳輸數(shù)據(jù)為560B,可以設(shè)置Payload段的長度為10B,按每組30B封裝,這樣,所有數(shù)據(jù)分20個(gè)組,分60幀傳送完畢。
??? 另外,如果待傳輸數(shù)據(jù)量為100B左右,顯然沒有分組的必要,但為了保證不發(fā)生數(shù)據(jù)丟失,可以在封裝時(shí)去掉CRC段,加一個(gè)1B的head字段,作為傳輸數(shù)據(jù)的序號(hào),每個(gè)封裝包用1個(gè)數(shù)據(jù)幀發(fā)送。接收端通過檢查head字段,確定是否發(fā)生數(shù)據(jù)丟失。
3 實(shí)驗(yàn)設(shè)計(jì)
3.1 硬件設(shè)計(jì)
??? 硬件實(shí)現(xiàn)電路如圖1。由單片機(jī)C8051F236控制nRF2401進(jìn)行數(shù)據(jù)傳輸。由于單片機(jī)與nRF2401的供電電壓分別為1.9~3.6V和5V,設(shè)計(jì)中采用MAX232芯片進(jìn)行電平轉(zhuǎn)換。另外,在發(fā)送端和接收端采用幾乎完全對(duì)稱的設(shè)計(jì)。


??? 將C8051F236的P2.5、P2.6、P2.7配置為通用I/O引腳[3],與nRF2401的CE、CS、PWR_UP連接,控制nRF2401的工作狀態(tài)。系統(tǒng)上電時(shí),首先置nRF2401為配置狀態(tài),寫入狀態(tài)字。隨后置nRF2401為激活方式。P0.2-0.7也配置成通用I/O引腳,與nRF2401的CLK1、DR1、DATA(通道1)、CLK2、DR2、DOUT2(通道2)連接,進(jìn)行數(shù)據(jù)收發(fā)。當(dāng)需要發(fā)送數(shù)據(jù)時(shí),單片機(jī)置CE為1,通過通道1將數(shù)據(jù)寫入nRF2401,而后置CE為0,由nRF2401將數(shù)據(jù)發(fā)送出去。如果封裝包的所有數(shù)據(jù)都發(fā)送完畢,切換到接收狀態(tài)。接收方用兩個(gè)通道同時(shí)接收數(shù)據(jù)。
3.2 軟件設(shè)計(jì)
??? 程序開始時(shí)對(duì)C8051F236及nRF2401狀態(tài)字進(jìn)行配置,隨后進(jìn)入激活方式。本系統(tǒng)狀態(tài)字配置接收端值為:0x8E08.1CA0.A000.0000.00CC.0000.0000.CC23.CF41。配置后nRF2401每次發(fā)送的數(shù)據(jù)長度為160bit(20B),地址段長度32bit,通道1、2硬件地址0xCC,16位CRC校驗(yàn)段,以突發(fā)模式進(jìn)行雙通道接收,通信速率250Kbps,晶振頻率16MHz,輸出功率0dBm,工作頻段2440~2448MHz,接收狀態(tài)。發(fā)送端值為:0x8E08.1CA0.A000.0000.00CC.0000.0000.CC23.CF40,發(fā)送狀態(tài)。

??? 進(jìn)入激活狀態(tài)后,收發(fā)雙方行為描述如下:
??? 第一步:定義一個(gè)數(shù)據(jù)包結(jié)構(gòu),發(fā)方將待發(fā)送數(shù)據(jù)分組,計(jì)算出數(shù)據(jù)包CRC校驗(yàn)值,然后將數(shù)據(jù)封裝、發(fā)送。發(fā)送完一個(gè)封裝包(共60B)后,停止發(fā)送,切換到接收狀態(tài),等待ACK信號(hào)到來。收方接收完一個(gè)封裝包后,切換到發(fā)送狀態(tài),同時(shí)計(jì)算接收到的數(shù)據(jù)包的CRC校驗(yàn)值,如果與包內(nèi)的CRC值相符,則說明數(shù)據(jù)接收正確,收方置ACK值為0;如不一致,則說明發(fā)生數(shù)據(jù)包丟失,收方置ACK值為1。
??? 第二步:收方發(fā)送ACK信號(hào)給發(fā)方,發(fā)方根據(jù)ACK值決定繼續(xù)發(fā)送數(shù)據(jù)包(ACK=0)還是重新發(fā)送數(shù)據(jù)包(ACK=1)。
??? 第三步:收發(fā)雙方再次重新配置,繼續(xù)數(shù)據(jù)傳輸。
??? 第四步:在發(fā)生數(shù)據(jù)包丟失的情況下,收方對(duì)要求重發(fā)次數(shù)用count進(jìn)行計(jì)數(shù),如果三次重發(fā)請(qǐng)求所收到的數(shù)據(jù)仍不正確,則不再要求重發(fā),切換到Stand_by狀態(tài)。
??? 軟件流程圖如圖2。

?

??? 數(shù)據(jù)包可定義為結(jié)構(gòu)體:
??? Struct PACKAGE {
??? Char head;//1B數(shù)據(jù)序號(hào)(可選)
??? Char DATA[57];//58B數(shù)據(jù)
??? Char CRC[1];//2BCRC校驗(yàn)值
??? ……
??? } package;
??? 除收發(fā)程序外,收發(fā)雙方對(duì)包封裝、包檢測及包的CRC值計(jì)算定義相應(yīng)的函數(shù)。發(fā)方對(duì)數(shù)據(jù)分組時(shí),如未發(fā)送數(shù)據(jù)不足60B,則在高位補(bǔ)0。
3.3 實(shí)驗(yàn)與結(jié)果分析
??? 向單片機(jī)中載入程序后,nRF2401工作模式配置為雙通道突發(fā)模式,控制程序采用C語言編寫。用評(píng)估參數(shù)BLER(塊錯(cuò)誤),對(duì)實(shí)驗(yàn)中數(shù)據(jù)傳輸過程中的數(shù)據(jù)丟失情況進(jìn)行評(píng)估:
??? BLER=丟失塊數(shù)/傳輸?shù)目倝K數(shù)
??? 實(shí)驗(yàn)方案:在允許的距離范圍(10~30米)內(nèi),分不同傳輸距離,分別發(fā)送1000個(gè)數(shù)據(jù)包,每個(gè)距離發(fā)送3次,BLER值取3次的平均值。為了進(jìn)一步說明問題,首先以未擴(kuò)展的協(xié)議進(jìn)行收發(fā),然后再以擴(kuò)展協(xié)議進(jìn)行收發(fā),并分別記下相應(yīng)BLER值。實(shí)驗(yàn)數(shù)據(jù)如表2。

??? 由表2可知,進(jìn)行協(xié)議擴(kuò)展后,BLER值僅為0.0%~0.14%,這充分說明本文提出的協(xié)議擴(kuò)展方法能夠?qū)崿F(xiàn)更加可靠的數(shù)據(jù)傳輸。實(shí)驗(yàn)時(shí)數(shù)據(jù)傳輸速度為120kbps,主要原因是受單片機(jī)讀寫速度的限制,更換高速單片機(jī)可提高傳輸速率。
本文用擴(kuò)展協(xié)議的方法,解決了無線收發(fā)芯片nRF2401在實(shí)際應(yīng)用中存在的數(shù)據(jù)丟失問題。實(shí)驗(yàn)結(jié)果表明,本文給出的方法可以有效提高nRF2401無線傳輸?shù)目煽啃?,傳輸速率符合不同?yīng)用領(lǐng)域的要求,而且該方法具有通用性和靈活性的特點(diǎn),可在nRF2401芯片的所有應(yīng)用及其他無線通信系統(tǒng)中推廣。
參考文獻(xiàn)
[1] nRF2401 Datasheet Nordic VLSI ASA[EB/OL].http://www.nvlsi.no.2003,3.
[2] 王博,李迅,馬宏緒.基于nRF2401的無線數(shù)據(jù)傳輸系統(tǒng).電子工程師,2004,(8).
[3] C8051F2xx Datasheet.http://www.21icsearch.com/searchpdf/default.asp?.2004-2.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容