1 引言
由于無(wú)線(xiàn)數(shù)據(jù)通信不用布線(xiàn),快速布局,,因此具有有線(xiàn)數(shù)據(jù)通信無(wú)法比擬的便捷性,,在特殊場(chǎng)合具有不可替代性,。然而,傳統(tǒng)的由基本射頻集成電路搭建的無(wú)線(xiàn)數(shù)據(jù)通信系統(tǒng)存在電路復(fù)雜,,成本高,,傳輸速率低,,可靠性差等缺點(diǎn),。為此,Nordic公司推出一款工業(yè)級(jí)內(nèi)置硬件鏈路層協(xié)議的低成本單芯片nRF24L01型無(wú)線(xiàn)收發(fā)器件,。該器件采用GFSK調(diào)制,,128個(gè)頻點(diǎn)自動(dòng)跳頻,片內(nèi)自動(dòng)生成報(bào)頭和CRC校驗(yàn)碼,,具有出錯(cuò)自動(dòng)重發(fā)功能,,這些特性使得由nRF24L0l構(gòu)建的無(wú)線(xiàn)數(shù)據(jù)傳輸系統(tǒng)具有成本低,速率高,,傳輸可靠等優(yōu)點(diǎn),。
2 nRF24L01簡(jiǎn)介
圖l給出nRF24L0l的引腳排列。nRF24L01工作于2.4~2.5 GHz ISM頻段,,內(nèi)置頻率合成器,、功率放大器、晶體振蕩器,、調(diào)制器等功能模塊,,并融合了Enhanced ShoekBurst技術(shù)。其中,,輸出功率,、通信頻道、自動(dòng)重發(fā)次數(shù)等參數(shù)可通過(guò)編程設(shè)置,。內(nèi)置的SPI接口,,其速率為0~8Mb/s,MCU通過(guò)SPI接口控制nRF 24L0l,。nRF24L01的特點(diǎn)如下:①功耗低,。能夠在以一6 dBm的功率發(fā)射時(shí),工作電流只有9 mA,;在以0 dBm的功率發(fā)射時(shí),,工作電流僅11.3 mA;而在接收時(shí),,工作電流僅12.3 mA,,因此具有掉電和空閑多種低功率工作模式。②體積小,,采用QFN20封裝,。③供電電壓為1.9~3.6 V,,可方便集成到各種電子器件。
3 LPC214x簡(jiǎn)介
IPC214x系列是Philips公司的基于ARM7內(nèi)核的高性能器件,,與LPC213x系列器件相兼容,,并增加了一些新功能,性能得到了大大的提升,。LPC214x系列器件最大特色是內(nèi)置2kB終端RAM的USB 2.0全速控制器,,1個(gè)(LPC2141/42)或2個(gè)(LPC2144/46/48)10位A/D轉(zhuǎn)換器,多個(gè)串行接口,,包括2個(gè)UART,、2個(gè)高速I(mǎi)2C總線(xiàn)、SPI和具有緩沖作用及可變數(shù)據(jù)長(zhǎng)度的SSP,。LPC214x系列器件采用單電源供電,,具有上電復(fù)位(POR)和掉電檢測(cè)(BOD)電路。相對(duì)于普通ARM7來(lái)說(shuō),,LPC214x還提升了I/O端口的速度,,并且內(nèi)置8—40 KB的靜態(tài)RAM和32~512 KB的高速Flash存儲(chǔ)器;工作頻率高達(dá)60MHz,;采用超小型LQFP64封裝,。
4 系統(tǒng)硬件設(shè)計(jì)
該系統(tǒng)采用模塊化設(shè)計(jì),主要由LPC2144,、nRF24L01,、射頻功放和天線(xiàn)模塊組成。其中,,射頻功放采用臺(tái)灣K一BEST公司的2.4 G雙向功放模塊,。圖2是系統(tǒng)總體設(shè)計(jì)圖。上位機(jī)為PC機(jī),,LPC2144與nRF24L01連接,,根據(jù)需要配置2.4 G功放和增益天線(xiàn)模塊。如果配置0.5 W功放和高增益天線(xiàn),,則傳輸距離可達(dá)5~10 km,。下位機(jī)為嵌入式平臺(tái),該嵌入式平臺(tái)可以是單片機(jī),、ARM,、DSP和FPGA,nRF24L0l可通過(guò)SPI接口直接與嵌入式平臺(tái)連接,。
圖3給出LPC2144與nRF24L0l的硬件接口設(shè)計(jì),。配置LPC2144的P0.2、P1.19作為GPIO端口分別與nRF24L0l的CE和CSN連接,;配置LPC2144的P0.4,、P0.5,、P0.6作為SPIO端口分別與nRF24L0l的SCK、MISO,、MOSI連接:配置LPC2144的P0.16作為EINT0端口與nRF24L0l的IRQ連接,。
5 系統(tǒng)軟件設(shè)計(jì)
發(fā)送端LPC214x完成初始化后,把nRF24L01配置成PTX工作模式,。若從上位機(jī)接收到數(shù)據(jù),,則啟動(dòng)nRF24L01發(fā)送數(shù)據(jù)。若發(fā)送成功,,則產(chǎn)生TX_DS中斷,;若重發(fā)超限,,則產(chǎn)生MAX_RT中斷,;若發(fā)送成功,則繼續(xù)發(fā)送,,否則進(jìn)行出錯(cuò)處理,。接收端LPC214x完成初始化后,把nRF24L0l配置成PRX工作模式,。當(dāng)正確接收數(shù)據(jù)時(shí),,nRF24L0l產(chǎn)生接收中斷標(biāo)志,LPC214x從nRF24L01讀取數(shù)據(jù)并向下位機(jī)發(fā)送,。圖4給出軟件流程圖,。軟件開(kāi)發(fā)環(huán)境為ADSl.2。
5.1 nRF24L01的初始化
nRF24L01通過(guò)SPI接口和外部控制器件如MCU,、ARM,、DSP進(jìn)行數(shù)據(jù)交換,其SPI協(xié)議是MSB在前,,LSB在后,。如果要讀寫(xiě)多個(gè)字節(jié),先讀寫(xiě)低字節(jié),。如果外部控制器件沒(méi)有SPI接口,,可用普通I/O接口模擬。這里選用帶SPI接口且可方便地與nRF24L0l連接的LPC21440表l給出nRF24L0l的命令表,。
由表可見(jiàn),,通過(guò)SPI接口傳入nRF24L01的第一個(gè)字節(jié)是命令字,nRF24L0l的各種命令字都只有一個(gè)字節(jié),,分為讀寄存器,、寫(xiě)寄存器、讀數(shù)據(jù)接收緩沖區(qū),、寫(xiě)發(fā)送數(shù)據(jù)緩沖區(qū)等,。在輸入任意命令字的同時(shí),,MISO輸出的都是STATUS寄存器的內(nèi)容。nRF24L0l的數(shù)據(jù)傳輸模式有ShockBurst和Enhanced ShockBurst兩種數(shù)據(jù)包,。后者比前者多了一個(gè)確認(rèn)數(shù)據(jù)傳輸?shù)男盘?hào),,保證數(shù)據(jù)傳輸?shù)目煽啃浴T撈骷?nèi)部完成需要高速處理的RF協(xié)議,,發(fā)送數(shù)據(jù)時(shí)只需將數(shù)據(jù)放入發(fā)送數(shù)據(jù)緩沖區(qū),,器件會(huì)自行產(chǎn)生前導(dǎo)字符和CRC數(shù)據(jù),并將這些數(shù)據(jù)地址和地址信息,、發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)等組成一個(gè)數(shù)據(jù)包發(fā)送出去,。圖5給出兩種模式的數(shù)據(jù)包格式。
現(xiàn)按后一種模式初始化,。在配置為接收數(shù)據(jù)時(shí),,nRF24L01接收到數(shù)據(jù)包后,由硬件解析地址數(shù)據(jù)和信息數(shù)據(jù),,當(dāng)接收到有效信息數(shù)據(jù)后,,在IRQ引腳產(chǎn)生中斷,并通知外部處理器讀取數(shù)據(jù),。在配置為發(fā)送數(shù)據(jù)時(shí),,nRF24L0l發(fā)送數(shù)據(jù)包后,自動(dòng)切換到接收模式已接收返回的確認(rèn)信號(hào),,當(dāng)收到確認(rèn)信號(hào)后,,IRQ引腳產(chǎn)生數(shù)據(jù)發(fā)送完成中斷,如果沒(méi)有握手信號(hào)返回,,則表示發(fā)送失敗,,器件自動(dòng)重新發(fā)送,如果重新發(fā)送的次數(shù)超過(guò)在ARC_CNT寄存器中的設(shè)定值時(shí),,會(huì)在IRQ引腳產(chǎn)生重發(fā)次數(shù)超限中斷,。MCU查詢(xún)STATUS寄存器的值,即可判斷是發(fā)送完成中斷,,還是重發(fā)次數(shù)超限中斷,。
當(dāng)發(fā)送端nRF24L0l配置成PTX模式時(shí),配置nRF24L01工作在后一種發(fā)送模式下,,重新發(fā)送的等待時(shí)間為250μs,,重新發(fā)送次數(shù)為10次,地址是TX_AW,,輸出功率為0 dBm,,速度為2 Mb/s,并且使能發(fā)送完成和重發(fā)送次數(shù)超限兩種中斷,,CRC校驗(yàn)位為2字節(jié),,nRF24L01處于POWER_UP狀態(tài),。函數(shù)中WRITE_REG為寫(xiě)命令基地址0x20。程序如下:
當(dāng)接收端nRF24L01模塊配置成PRX模式時(shí),,配置nRF24L0l工作在接收模式下,,地址是RX_AW,負(fù)載數(shù)據(jù)寬度是TX_PL_W,,使能接收完數(shù)據(jù)中斷,,CRC校驗(yàn)位為2字節(jié),nRF24L01處于POWER_UP狀態(tài),。程序如下:
5.2 nRF24L01的數(shù)據(jù)收發(fā)
(1)發(fā)送數(shù)據(jù) 當(dāng)nRF24L0l模塊配置成發(fā)送模式后,,向發(fā)送FIFO輸入數(shù)據(jù)即可啟動(dòng)傳輸。發(fā)送8 Byte的程序如下:
(2)接收數(shù)據(jù) 當(dāng)nRF24L0l模塊配置成接收模式后,,在接收到數(shù)據(jù)中斷發(fā)生時(shí),,從接收FIFO讀取數(shù)據(jù)。接收8字節(jié)的程序如下:
6 結(jié)語(yǔ)
介紹了基于ARM和nRF24L0l的無(wú)線(xiàn)數(shù)字傳輸系統(tǒng)的硬軟件設(shè)計(jì),。該系統(tǒng)已應(yīng)用于微型飛行器的實(shí)時(shí)圖像傳輸和遙測(cè)中,。在實(shí)際應(yīng)用中,,可根據(jù)需要,,將nRF24LOl組成一對(duì)一、一對(duì)多,、多對(duì)多的結(jié)構(gòu),。該系統(tǒng)還可廣泛應(yīng)用于無(wú)線(xiàn)測(cè)控、文件傳輸?shù)阮I(lǐng)域,。