摘 要: nRF24L01是Nordic公司推出的一款工作在2.4~2.5 GHz世界通用ISM頻段的新型高速無線收發器芯片,在中短距離無線通信領域應用非常廣泛,其參數配置、模式轉換、數據收發等操作都是通過SPI總線完成的。采用硬件的方法,實現了通信系統真正意義上數據收和發的同時進行,提高了數據傳輸的實時性。通過實驗證明,基于FPGA的無線通信系統數據,傳輸效率高、性能穩定、可擴展性強,具有很高的應用價值。
關鍵字: FPGA; nRF24L01; SPI總線; Verilog
中圖分類號: TN926?34 文獻標識碼: 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 引 言
在現代工業數據傳輸現場,有線電纜往往扮演著十分重要的角色,與此同時,也引來了很多有線傳輸束縛儀器作業的系列問題,因此數據無線通信系統的研制越來越受到關注。nRF24L01芯片是挪威Nordic公司的一款射頻收發器件,該芯片的數據傳輸速率可以高達2 Mb/s。nRF24L01芯片在提供較高數據傳輸速率的同時,只需要花較小的功耗,因此該芯片在中短距離的無線傳輸領域應用十分廣泛。芯片的數字傳輸包括參數配置、模式轉換、數據收發在內的操作都是通過SPI接口完成的。在目前的市場上,控制器件在控制芯片收發數據的時候大都采用軟件擴展,利用I/O口通過軟件模擬SPI接口進行數據交換。然而這種情況嚴重影響了無線芯片數據傳輸的高速性能,制約了無線通信系統的傳輸速率,類似問題在以單片機控制的無線通信系統里非常普遍,亟待解決。相比較單片機的控制,FPGA設計SPI總線只要對設計做簡單的改動,即可對SPI總線的數據位數、工作模式等進行擴展,因此基于FPGA設計的無線通信系統,具有便于修改、可擴展性強的特點。
根據nRF24L01PA芯片的讀寫時序可以知道SPI主模塊的工作模式應該是在CPOL=0,CPHA=0模式下進行的,本文選用的nRF24L01PA芯片模塊如圖1所示。整體的無線系統包括射頻模塊、控制模塊、SPI主模塊、串口模塊、計算機。其中控制模塊、SPI主模塊、串口模塊是通過FPGA設計實現的。
1 SPI_Master模塊的設計
圖2為nRF24L01芯片的引腳功能說明,其中CSN是芯片的輸入引腳,作為SPI從機的片選信號,由主機控制輸出。SCK為芯片的輸入引腳,作為SPI的時鐘信號。由此可以知道本文設計的SPI總線接口模塊應為主機, nRF24L01的SPI模塊為從機。
SPI時鐘生成模塊的設計如下:
module sck_generator(clk,reset,sclk_p,sclk_n,sclk);
reg [3:0] cnt; //cnt為計數寄存器
if(cnt== 4′b1111) sclk <=~sclk;
//產生16分頻的SPI時鐘信號
assign clk_div = (cnt == 4′b1111); //得到一個分頻時鐘
assign sclk_p = (clk_div sclk);
//通過兩個信號相與,產生SPI時鐘信號的上升沿
assign sclk_n = (clk_div (~sclk));
//通過兩個信號相與,產生SPI時鐘信號的下降沿
使能信號(en)是SPI_Master模塊的輸入信號,當需要啟動SPI_Master模塊進行SPI數據傳輸的時候en置高,那么就需要設計一個模塊來檢測使能信號的變化情況。模塊設計如下:
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};
//設計en_edge寄存器來存取en信號為邊沿檢測做準備
if(en_edge[2:1]==2′b01)
//當en_edge寄存器第一位和第二位分別為0和1的時候
en_edge_p <= 1′b1;
//檢測到使能信號en的上升沿,將en_edge_p置高一個時鐘周期
if(en_edge[2:1]==2′b10)
//當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;
每當一個周期的SPI發送完成以后,計數器count加1。以此類推,后面7個周期的數據傳輸過程與第一個周期類似,當全部8位數據傳輸完成之后,將字節傳輸完成信號byte_end置1。移位寄存器模塊的RTL視圖如圖4所示。至此,完成了整個SPI主模塊的設計,在Quartus Ⅱ軟件下對SPI主模塊進行綜合與實現。
2 控制模塊的設計
在本文設計中,串口是計算機和FPGA進行數據通信的橋梁。本文的設計中串口模塊包括發送模塊和接收模塊,波特率設計為115 200 b/s(可調),發送的數據幀格式為:1位起始位,8位數據位,無校驗位,1位停止位。上位機是通過串口調試助手進行調試的。通過FPGA設計的nRF24L01控制模塊主要工作是控制射頻模塊,協調SPI模塊和串口模塊完成數據的采集和發送。數據的發送和接收流程如圖5和圖6所示。
3 系統驗證
該系統的設計進行了最后的板級驗證,使用ModelSim?Altera仿真工具對各個模塊進行了仿真,實驗證明設計的無線系統工作穩定,數據的傳輸速率有了明顯的提高,達到了預期的目的。如圖7所示為基于FPGA實現的無線通信系統實物連接圖。其中EP2C5T144C8N開發板、USB轉串口模塊、nRF24L01PA模塊組成通信系統的一端。USB轉串口模塊負責電腦和開發板的數據傳送。
通過計算機向發送端傳輸1 056 KB的數據包,數據經過串口模塊、控制模塊、SPI模塊、射頻模塊發送出去。接收端接收到有效數據后通過串口調試工具在計算機上顯示出來,實驗證明接收到了1 056 KB數據,數據正確,沒有發生掉包現象。另外,nRF24L01PA模塊設計了功率放大電路,經過實驗測試在室內的情況下,整個無線通信系統的通信距離能達到15 m,證明該無線系統的實用性很強。
4 結 論
無線通信系統實用性強,而高速率的無線收發芯片nRF24L01應用十分廣泛,本文是在實際應用的基礎上,提出了一種基于FPGA實現的無線通信系統的設計。經驗證該無線通信系統工作穩定、數據傳輸效率高、可擴展性強,發揮了nRF24L01芯片高速通信的優勢。
本文創新點:根據SPI總線規范,采用硬件的方法擴展SPI接口,用Verilog HDL設計并實現帶有移位寄存器的SPI總線模塊、nRF24L01PA控制模塊、串口模塊,使用仿真工具ModelSim對其進行仿真,并在FPGA上完成了下載與驗證。采用EP2C5T144C8N完成整個系統的控制和數據采集功能,性能大大優于傳統的單片機控制數據無線通信系統。該系統具有數據傳輸速率高、簡潔高效、便于修改、可擴展性強、工作穩定可靠等特點,提高了nRF24L01芯片無線數據傳輸的工作效率,具有較強的實用性。
參考文獻
[1] 李大江,崔建明.一種基于FPGA的可配置SPI Master接口設計實現[J].電子技術應用,2010,36(10):60?62.
[2] 周毅,朱超,吳武臣,等.基于FPGA的RFID無線通信系統的實現[J].現代電子技術,2010,33(17):69?72.
[3] 王玨文,金偉信,蔡一兵,等.基于FPGA的SPI總線接口的實現[J].現代電子技術,2010,33(14):102?104.
[4] 王松.基于FPGA的串行外圍接口SPI設計與實現[J].微計算機信息,2010(32):117?119.
[5] 楊承富,徐志軍.SPI總線接口的FPGA設計與實現[J].軍事通信技術,2004,25(2):72?76.
[6] 夏宇聞.Verilog數字系統設計教程[M].北京:北京航空航天大學出版社,2003.
[7] 梁祥,封吉平,安學軍.基于PC/104總線與CPLD的SPI接口設計[J].微計算機信息,2005(35):29?32.