摘 要: nRF24L01是Nordic公司推出的一款工作在2.4~2.5 GHz世界通用ISM頻段的新型高速無線收發(fā)器芯片,在中短距離無線通信領(lǐng)域應(yīng)用非常廣泛,其參數(shù)配置、模式轉(zhuǎn)換、數(shù)據(jù)收發(fā)等操作都是通過SPI總線完成的。采用硬件的方法,實(shí)現(xiàn)了通信系統(tǒng)真正意義上數(shù)據(jù)收和發(fā)的同時進(jìn)行,提高了數(shù)據(jù)傳輸?shù)膶?shí)時性。通過實(shí)驗(yàn)證明,基于FPGA的無線通信系統(tǒng)數(shù)據(jù),傳輸效率高、性能穩(wěn)定、可擴(kuò)展性強(qiáng),具有很高的應(yīng)用價值。
關(guān)鍵字: FPGA; nRF24L01; SPI總線; Verilog
中圖分類號: TN926?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)13?0036?03
Abstract:nRF24L01 is a new high?speed wireless transceiving chip, which is launched by Nordic Company, works at 2.4~2.5 GHz of universal ISM frequency band, and is widely used in the domain of medium or short distance wireless communication. Its parameter configuration, mode conversion and data transceiving are all completed by SPI bus. Hardware design method is adopted to realize communication system′s data transmitting and receiving in true sense at same time, and improve the real?time performance of data real time transmission. The experiment result proves that wireless communication system based FPGA has high transmission efficiency, stable performance, strong scalability and high application value.
Keywords: FPGA; nRF24L01; SPI bus; Verilog
0 引 言
在現(xiàn)代工業(yè)數(shù)據(jù)傳輸現(xiàn)場,有線電纜往往扮演著十分重要的角色,與此同時,也引來了很多有線傳輸束縛儀器作業(yè)的系列問題,因此數(shù)據(jù)無線通信系統(tǒng)的研制越來越受到關(guān)注。nRF24L01芯片是挪威Nordic公司的一款射頻收發(fā)器件,該芯片的數(shù)據(jù)傳輸速率可以高達(dá)2 Mb/s。nRF24L01芯片在提供較高數(shù)據(jù)傳輸速率的同時,只需要花較小的功耗,因此該芯片在中短距離的無線傳輸領(lǐng)域應(yīng)用十分廣泛。芯片的數(shù)字傳輸包括參數(shù)配置、模式轉(zhuǎn)換、數(shù)據(jù)收發(fā)在內(nèi)的操作都是通過SPI接口完成的。在目前的市場上,控制器件在控制芯片收發(fā)數(shù)據(jù)的時候大都采用軟件擴(kuò)展,利用I/O口通過軟件模擬SPI接口進(jìn)行數(shù)據(jù)交換。然而這種情況嚴(yán)重影響了無線芯片數(shù)據(jù)傳輸?shù)母咚傩阅埽萍s了無線通信系統(tǒng)的傳輸速率,類似問題在以單片機(jī)控制的無線通信系統(tǒng)里非常普遍,亟待解決。相比較單片機(jī)的控制,F(xiàn)PGA設(shè)計SPI總線只要對設(shè)計做簡單的改動,即可對SPI總線的數(shù)據(jù)位數(shù)、工作模式等進(jìn)行擴(kuò)展,因此基于FPGA設(shè)計的無線通信系統(tǒng),具有便于修改、可擴(kuò)展性強(qiáng)的特點(diǎn)。
根據(jù)nRF24L01PA芯片的讀寫時序可以知道SPI主模塊的工作模式應(yīng)該是在CPOL=0,CPHA=0模式下進(jìn)行的,本文選用的nRF24L01PA芯片模塊如圖1所示。整體的無線系統(tǒng)包括射頻模塊、控制模塊、SPI主模塊、串口模塊、計算機(jī)。其中控制模塊、SPI主模塊、串口模塊是通過FPGA設(shè)計實(shí)現(xiàn)的。
1 SPI_Master模塊的設(shè)計
圖2為nRF24L01芯片的引腳功能說明,其中CSN是芯片的輸入引腳,作為SPI從機(jī)的片選信號,由主機(jī)控制輸出。SCK為芯片的輸入引腳,作為SPI的時鐘信號。由此可以知道本文設(shè)計的SPI總線接口模塊應(yīng)為主機(jī), nRF24L01的SPI模塊為從機(jī)。
SPI時鐘生成模塊的設(shè)計如下:
module sck_generator(clk,reset,sclk_p,sclk_n,sclk);
reg [3:0] cnt; //cnt為計數(shù)寄存器
if(cnt== 4′b1111) sclk <=~sclk;
//產(chǎn)生16分頻的SPI時鐘信號
assign clk_div = (cnt == 4′b1111); //得到一個分頻時鐘
assign sclk_p = (clk_div sclk);
//通過兩個信號相與,產(chǎn)生SPI時鐘信號的上升沿
assign sclk_n = (clk_div (~sclk));
//通過兩個信號相與,產(chǎn)生SPI時鐘信號的下降沿
使能信號(en)是SPI_Master模塊的輸入信號,當(dāng)需要啟動SPI_Master模塊進(jìn)行SPI數(shù)據(jù)傳輸?shù)臅r候en置高,那么就需要設(shè)計一個模塊來檢測使能信號的變化情況。模塊設(shè)計如下:
module en_edge_check(clk,reset,en,en_edge_p,en_edge_n);
reg [2:0]en_edge;
en_edge <= {en_edge[1:0],en};
//設(shè)計en_edge寄存器來存取en信號為邊沿檢測做準(zhǔn)備
if(en_edge[2:1]==2′b01)
//當(dāng)en_edge寄存器第一位和第二位分別為0和1的時候
en_edge_p <= 1′b1;
//檢測到使能信號en的上升沿,將en_edge_p置高一個時鐘周期
if(en_edge[2:1]==2′b10)
//當(dāng)en_edge寄存器第一位和第二位分別為10的時候
en_edge_n <= 1′b1;
//檢測到使能信號en的上升沿,將en_edge_n置高一個時鐘周期
圖3為使能檢測模塊的RTL視圖。
if(sclk_p(count<8)en)
mosi <= shifter[7];
if(sclk_n(count<8)en)
shifter <= {shifter[6:0],miso};
if(count==8)
byte_end <= 1′b1;
每當(dāng)一個周期的SPI發(fā)送完成以后,計數(shù)器count加1。以此類推,后面7個周期的數(shù)據(jù)傳輸過程與第一個周期類似,當(dāng)全部8位數(shù)據(jù)傳輸完成之后,將字節(jié)傳輸完成信號byte_end置1。移位寄存器模塊的RTL視圖如圖4所示。至此,完成了整個SPI主模塊的設(shè)計,在Quartus Ⅱ軟件下對SPI主模塊進(jìn)行綜合與實(shí)現(xiàn)。
2 控制模塊的設(shè)計
在本文設(shè)計中,串口是計算機(jī)和FPGA進(jìn)行數(shù)據(jù)通信的橋梁。本文的設(shè)計中串口模塊包括發(fā)送模塊和接收模塊,波特率設(shè)計為115 200 b/s(可調(diào)),發(fā)送的數(shù)據(jù)幀格式為:1位起始位,8位數(shù)據(jù)位,無校驗(yàn)位,1位停止位。上位機(jī)是通過串口調(diào)試助手進(jìn)行調(diào)試的。通過FPGA設(shè)計的nRF24L01控制模塊主要工作是控制射頻模塊,協(xié)調(diào)SPI模塊和串口模塊完成數(shù)據(jù)的采集和發(fā)送。數(shù)據(jù)的發(fā)送和接收流程如圖5和圖6所示。
3 系統(tǒng)驗(yàn)證
該系統(tǒng)的設(shè)計進(jìn)行了最后的板級驗(yàn)證,使用ModelSim?Altera仿真工具對各個模塊進(jìn)行了仿真,實(shí)驗(yàn)證明設(shè)計的無線系統(tǒng)工作穩(wěn)定,數(shù)據(jù)的傳輸速率有了明顯的提高,達(dá)到了預(yù)期的目的。如圖7所示為基于FPGA實(shí)現(xiàn)的無線通信系統(tǒng)實(shí)物連接圖。其中EP2C5T144C8N開發(fā)板、USB轉(zhuǎn)串口模塊、nRF24L01PA模塊組成通信系統(tǒng)的一端。USB轉(zhuǎn)串口模塊負(fù)責(zé)電腦和開發(fā)板的數(shù)據(jù)傳送。
通過計算機(jī)向發(fā)送端傳輸1 056 KB的數(shù)據(jù)包,數(shù)據(jù)經(jīng)過串口模塊、控制模塊、SPI模塊、射頻模塊發(fā)送出去。接收端接收到有效數(shù)據(jù)后通過串口調(diào)試工具在計算機(jī)上顯示出來,實(shí)驗(yàn)證明接收到了1 056 KB數(shù)據(jù),數(shù)據(jù)正確,沒有發(fā)生掉包現(xiàn)象。另外,nRF24L01PA模塊設(shè)計了功率放大電路,經(jīng)過實(shí)驗(yàn)測試在室內(nèi)的情況下,整個無線通信系統(tǒng)的通信距離能達(dá)到15 m,證明該無線系統(tǒng)的實(shí)用性很強(qiáng)。
4 結(jié) 論
無線通信系統(tǒng)實(shí)用性強(qiáng),而高速率的無線收發(fā)芯片nRF24L01應(yīng)用十分廣泛,本文是在實(shí)際應(yīng)用的基礎(chǔ)上,提出了一種基于FPGA實(shí)現(xiàn)的無線通信系統(tǒng)的設(shè)計。經(jīng)驗(yàn)證該無線通信系統(tǒng)工作穩(wěn)定、數(shù)據(jù)傳輸效率高、可擴(kuò)展性強(qiáng),發(fā)揮了nRF24L01芯片高速通信的優(yōu)勢。
本文創(chuàng)新點(diǎn):根據(jù)SPI總線規(guī)范,采用硬件的方法擴(kuò)展SPI接口,用Verilog HDL設(shè)計并實(shí)現(xiàn)帶有移位寄存器的SPI總線模塊、nRF24L01PA控制模塊、串口模塊,使用仿真工具M(jìn)odelSim對其進(jìn)行仿真,并在FPGA上完成了下載與驗(yàn)證。采用EP2C5T144C8N完成整個系統(tǒng)的控制和數(shù)據(jù)采集功能,性能大大優(yōu)于傳統(tǒng)的單片機(jī)控制數(shù)據(jù)無線通信系統(tǒng)。該系統(tǒng)具有數(shù)據(jù)傳輸速率高、簡潔高效、便于修改、可擴(kuò)展性強(qiáng)、工作穩(wěn)定可靠等特點(diǎn),提高了nRF24L01芯片無線數(shù)據(jù)傳輸?shù)墓ぷ餍剩哂休^強(qiáng)的實(shí)用性。
參考文獻(xiàn)
[1] 李大江,崔建明.一種基于FPGA的可配置SPI Master接口設(shè)計實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2010,36(10):60?62.
[2] 周毅,朱超,吳武臣,等.基于FPGA的RFID無線通信系統(tǒng)的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(17):69?72.
[3] 王玨文,金偉信,蔡一兵,等.基于FPGA的SPI總線接口的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(14):102?104.
[4] 王松.基于FPGA的串行外圍接口SPI設(shè)計與實(shí)現(xiàn)[J].微計算機(jī)信息,2010(32):117?119.
[5] 楊承富,徐志軍.SPI總線接口的FPGA設(shè)計與實(shí)現(xiàn)[J].軍事通信技術(shù),2004,25(2):72?76.
[6] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2003.
[7] 梁祥,封吉平,安學(xué)軍.基于PC/104總線與CPLD的SPI接口設(shè)計[J].微計算機(jī)信息,2005(35):29?32.