完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > nrf2401
nRF2401是單片射頻收發(fā)芯片,工作于2.4~2.5GHz ISM頻段,芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊,輸出功率和通信頻道可通過(guò)程序進(jìn)行配置。
nRF2401是單片射頻收發(fā)芯片,工作于2.4~2.5GHz ISM頻段,芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊,輸出功率和通信頻道可通過(guò)程序進(jìn)行配置。芯片能耗非常低,以-5dBm的功率發(fā)射時(shí),工作電流只有10.5mA,接收時(shí)工作電流只有18mA,多種低功率工作模式,節(jié)能設(shè)計(jì)更方便。其DuoCeiverTM技術(shù)使nRF2401可以使用同一天線,同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù)。nRF2401適用于多種無(wú)線通信的場(chǎng)合,如無(wú)線數(shù)據(jù)傳輸系統(tǒng)、無(wú)線鼠標(biāo)、遙控開(kāi)鎖、遙控玩具等。
nRF2401(最新版本為nRF2401A,nRF2401AG為無(wú)鉛工藝版本)是由Nordic公司出品的單芯片無(wú)線收發(fā)芯片,工作于2.4GHz~2.5GHz的全球免申請(qǐng)(ISM)頻率。芯片包括一個(gè)完全集成的頻率合成器,功率放大器,晶體振蕩器和調(diào)制器。發(fā)射功率和工作頻率等工作參數(shù)可以很容易的通過(guò)3線SPI端口完成。極低的電流消耗,在-5dBm的輸出功率時(shí)僅為10.5mA,在接收模式時(shí)僅為18mA。掉電模式可以很容易的實(shí)現(xiàn)低功耗需求。
nRF2401是單片射頻收發(fā)芯片,工作于2.4~2.5GHz ISM頻段,芯片內(nèi)置頻率合成器、功率放大器、晶體振蕩器和調(diào)制器等功能模塊,輸出功率和通信頻道可通過(guò)程序進(jìn)行配置。芯片能耗非常低,以-5dBm的功率發(fā)射時(shí),工作電流只有10.5mA,接收時(shí)工作電流只有18mA,多種低功率工作模式,節(jié)能設(shè)計(jì)更方便。其DuoCeiverTM技術(shù)使nRF2401可以使用同一天線,同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù)。nRF2401適用于多種無(wú)線通信的場(chǎng)合,如無(wú)線數(shù)據(jù)傳輸系統(tǒng)、無(wú)線鼠標(biāo)、遙控開(kāi)鎖、遙控玩具等。
nRF2401(最新版本為nRF2401A,nRF2401AG為無(wú)鉛工藝版本)是由Nordic公司出品的單芯片無(wú)線收發(fā)芯片,工作于2.4GHz~2.5GHz的全球免申請(qǐng)(ISM)頻率。芯片包括一個(gè)完全集成的頻率合成器,功率放大器,晶體振蕩器和調(diào)制器。發(fā)射功率和工作頻率等工作參數(shù)可以很容易的通過(guò)3線SPI端口完成。極低的電流消耗,在-5dBm的輸出功率時(shí)僅為10.5mA,在接收模式時(shí)僅為18mA。掉電模式可以很容易的實(shí)現(xiàn)低功耗需求。
兼容性
nRF2401是nRF2401A的早期型號(hào),nRF2401AG是無(wú)鉛工藝型號(hào)。它們完全兼容,硬件可直接替換,代碼也可相互使用。
芯片結(jié)構(gòu)
nRF2401內(nèi)置地址解碼器、先入后出堆棧區(qū)、解調(diào)處理器、時(shí)鐘處理器、GFSK濾波器、低噪聲放大器、頻率合成器,功率放大器等功能模塊,需要很少的外圍元件,因此使用起來(lái)非常方便。QFN24引腳封裝,外形尺寸只有5×5mm。
工作模式
nRF2401有工作模式有四種:收發(fā)模式、配置模式、空閑模式和關(guān)機(jī)模式。nRF2401的工作模式由PWR_UP 、CE、CS三個(gè)引腳決定。
收發(fā)模式
nRF2401的收發(fā)模式有ShockBurstTM收發(fā)模式和直接收發(fā)模式兩種,收發(fā)模式由器件配置字決定,具體配置將在器件配置部分詳細(xì)介紹。
ShockBurstTM收發(fā)模式ShockBurstTM收發(fā)模式下,使用片內(nèi)的先入先出堆棧區(qū),數(shù)據(jù)低速?gòu)奈⒖刂破魉腿耄咚伲?Mbps)發(fā)射,這樣可以盡量節(jié)能,因此,使用低速的微控制器也能得到很高的射頻數(shù)據(jù)發(fā)射速率。與射頻協(xié)議相關(guān)的所有高速信號(hào)處理都在片內(nèi)進(jìn)行,這種做法有三大好處:盡量節(jié)能;低的系統(tǒng)費(fèi)用(低速微處理器也能進(jìn)行高速射頻發(fā)射);數(shù)據(jù)在空中停留時(shí)間短,抗干擾性高。nRF2401的ShockBurstTM技術(shù)同時(shí)也減小了整個(gè)系統(tǒng)的平均工作電流。在ShockBurstTM收發(fā)模式下,nRF2401自動(dòng)處理字頭和CRC校驗(yàn)碼。在接收數(shù)據(jù)時(shí),自動(dòng)把字頭和CRC校驗(yàn)碼移去。在發(fā)送數(shù)據(jù)時(shí),自動(dòng)加上字頭和CRC校驗(yàn)碼,當(dāng)發(fā)送過(guò)程完成后,數(shù)據(jù)準(zhǔn)備好引腳通知微處理器數(shù)據(jù)發(fā)射完畢。
ShockBurstTM發(fā)射流程接口引腳為CE,CLK1,DATAA. 當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),其把CE置高,使nRF2401工作;B. 把接收機(jī)的地址和要發(fā)送的數(shù)據(jù)按時(shí)序送入nRF2401;C. 微控制器把CE置低,激發(fā)nRF2401進(jìn)行ShockBurstTM發(fā)射;D. nRF2401的ShockBurstTM發(fā)射給射頻前端供電;射頻數(shù)據(jù)打包(加字頭、CRC校驗(yàn)碼);高速發(fā)射數(shù)據(jù)包;發(fā)射完成,nRF2401進(jìn)入空閑狀態(tài)。
ShockBurstTM接收流程接口引腳CE、DR1、CLK1和DATA(接收通道1)A. 配置本機(jī)地址和要接收的數(shù)據(jù)包大小;B. 進(jìn)入接收狀態(tài),把CE置高;C. 200us后,nRF2401進(jìn)入監(jiān)視狀態(tài),等待數(shù)據(jù)包的到來(lái);D. 當(dāng)接收到正確的數(shù)據(jù)包(正確的地址和CRC校驗(yàn)碼),nRF2401自動(dòng)把字頭、地址和CRC校驗(yàn)位移去;E. nRF2401通過(guò)把DR1(這個(gè)引腳一般引起微控制器中斷)置高通知微控制器;F. 微控制器把數(shù)據(jù)從nRF2401移出;G. 所有數(shù)據(jù)移完,nRF2401把DR1置低,此時(shí),如果CE為高,則等待下一個(gè)數(shù)據(jù)包,如果CE為低,開(kāi)始其它工作流程。
直接收發(fā)模式在直接收發(fā)模式下,nRF2401如傳統(tǒng)的射頻收發(fā)器一樣工作。直接發(fā)送模式接口引腳為CE、DATAA. 當(dāng)微控制器有數(shù)據(jù)要發(fā)送時(shí),把CE置高;B. nRF2401射頻前端被激活;C. 所有的射頻協(xié)議必須在微控制器程序中進(jìn)行處理(包括字頭、地址和CRC校驗(yàn)碼)。
直接接收模式接口引腳為CE、CLK1和DATAA. 一旦nRF2401被配置為直接接收模式,DATA引腳將根據(jù)天線接收到的信號(hào)開(kāi)始高低變化(由于噪聲的存在);B. CLK1引腳也開(kāi)始工作;C. 一旦接收到有效的字頭,CLK1引腳和DATA引腳將協(xié)調(diào)工作,把射頻數(shù)據(jù)包以其被發(fā)射時(shí)的數(shù)據(jù)從DATA引腳送給微控制器;D. 這頭必須是8位;E. DR引腳沒(méi)用上,所有的地址和CRC校驗(yàn)必須在微控制器內(nèi)部進(jìn)行。
配置模式在配置模式,15字節(jié)的配置字被送到nRF2401,這通過(guò)CS、CLK1和DATA三個(gè)引腳完成,具體的配置方法請(qǐng)參考本文的器件配置部分。
空閑模式nRF2401的空閑模式是為了減小平均工作電流而設(shè)計(jì),其最大的優(yōu)點(diǎn)是,實(shí)現(xiàn)節(jié)能的同時(shí),縮短芯片的起動(dòng)時(shí)間。在空閑模式下,部分片內(nèi)晶振仍在工作,此時(shí)的工作電流跟外部晶振的頻率有關(guān),如外部晶振為4MHz時(shí)工作電流為12uA,外部晶振為16MHz時(shí)工作電流為32uA。在空閑模式下,配置字的內(nèi)容保持在nRF2401片內(nèi)。
關(guān)機(jī)模式在關(guān)機(jī)模式下,為了得到最小的工作電流,一般此時(shí)的工作電流小于1uA。關(guān)機(jī)模式下,配置字的內(nèi)容也會(huì)被保持在nRF2401片內(nèi),這是該模式與斷電狀態(tài)最大的區(qū)別。
NRF2401+芯片的ACK帶數(shù)據(jù)返回功能的理解和總結(jié)
NRF2401+芯片主要特點(diǎn):
工作在2.4~2.5GHz頻段;
無(wú)線數(shù)據(jù)傳輸率可達(dá)1~2MHz;
SPI接口速率0~8MHz;
125可選工作頻道(可跳頻);
工作電壓1.9~3.6V;
增強(qiáng)型ShockBurst™模式;
當(dāng)NRF2401+模塊工作在增強(qiáng)型ShockBurst™模式時(shí),可以使用自動(dòng)應(yīng)答和自動(dòng)重發(fā)功能,當(dāng)然這些都不具有誘惑力,最多提高了數(shù)據(jù)傳輸?shù)男屎头€(wěn)定性,數(shù)據(jù)傳輸依然是單方向的。增強(qiáng)型ShockBurst™模式下有一種ACK帶數(shù)據(jù)返回的功能,這個(gè)功能很強(qiáng)大,不需要人為的在程序中切換接收和發(fā)送狀態(tài),只需要通過(guò)寄存器簡(jiǎn)單的配置,就可以實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,對(duì)于平常的學(xué)習(xí),尤其是利用上位機(jī)調(diào)試參數(shù),非常方便。本文主要介紹這種模式的配置以及自己對(duì)過(guò)程的理解、總結(jié)和一些疑問(wèn)。
一、SPI指令和一部分寄存器如下:
SPI指令:
部分寄存器:
二、增強(qiáng)型ShockBurst™模式下ACK帶數(shù)據(jù)返回功能的配置過(guò)程解釋:
1、關(guān)于ACK帶數(shù)據(jù)返回功能需要的額外配置:
參考手冊(cè)部分:
由手冊(cè)可知,如果要使用ACK帶數(shù)據(jù)返回功能,必須額外滿足:
~使能動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度,即接收和發(fā)送數(shù)據(jù)長(zhǎng)度可變,詳見(jiàn)主接收設(shè)備配置部分解釋;
~主接收端將隨ACK返回的數(shù)據(jù)利用W_ACK_PAYLOADAY指令放入發(fā)送緩沖區(qū),詳見(jiàn)后文;
~置位FEATURE寄存器中的位EN_ACK_PAY,使能ACK帶數(shù)據(jù)返回功能;
~最大重發(fā)時(shí)間間隔的設(shè)置步進(jìn)值為250us,設(shè)置為500us適用于0~32任意長(zhǎng)度字節(jié)的負(fù)載數(shù)據(jù);(感覺(jué)翻譯很別扭,上面的英文意思倒是很清晰!!)
注:此程序配置中一個(gè)主發(fā)送設(shè)備,一個(gè)主接收設(shè)備,均使用通道0進(jìn)行數(shù)據(jù)傳輸;
2、主發(fā)送設(shè)備的配置過(guò)程解析
//函數(shù)名 : void NRF_TX_Mode(void)
//功能 : 初始化NRF2401+模塊為發(fā)送模式
//輸入?yún)?shù): 無(wú)
//返回參數(shù): 無(wú)
void NRF_TX_Mode(void)
{
//CE拉低,配置寄存器
NRF_CE_LOW();
// 寫(xiě)TX節(jié)點(diǎn)地址(1)
SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
// 寫(xiě)RX節(jié)點(diǎn)地址 (2)
SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);
// 使能通道0的自動(dòng)應(yīng)答(3)
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);
// 使能通道0的接收地址(4)
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);
//設(shè)置自動(dòng)重發(fā)間隔時(shí)間:500us最大自動(dòng)重發(fā)次數(shù):10次(5)
SPI_NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x1a);
// 設(shè)置RF頻率,手冊(cè)有詳細(xì)解釋(6)
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,50);
// 設(shè)置TX發(fā)射參數(shù),0db增益,2Mbps,低噪聲增益開(kāi)啟(7)
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f);
//清除發(fā)送和接收緩沖區(qū)(8)
SPI_NRF_WriteReg(FLUSH_TX,0xff);
SPI_NRF_WriteReg(FLUSH_RX,0xff);
//IRQ收發(fā)完成中斷開(kāi)啟,16位CRC,主發(fā)送(9)
SPI_NRF_WriteReg(NRF_WRITE_REG + CONFIG_NRF, 0x0e);
//Active命令(10)
SPI_NRF_RW(0x50);
SPI_NRF_RW(0x73);
//使能動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度(11)
SPI_NRF_WriteReg(NRF_WRITE_REG+0x1c,0x01);
//使能ACK帶數(shù)據(jù)返回功能(12)
SPI_NRF_WriteReg(NRF_WRITE_REG+0x1d,0x06);
//CE拉高,進(jìn)入發(fā)送模式(13)
NRF_CE_HIGH();
}
程序解釋:
(1)僅用于主發(fā)送設(shè)備,寫(xiě)主發(fā)送設(shè)備發(fā)送節(jié)點(diǎn)地址,地址通過(guò)軟件設(shè)定,可通過(guò)操作寄存器SETUP_AW修改地址寬度(1~5字節(jié)),寄存器復(fù)位之后,默認(rèn)地址寬度為5字節(jié);
主發(fā)送設(shè)備的發(fā)送節(jié)點(diǎn)地址必須和主接收設(shè)備的接收節(jié)點(diǎn)地址一致,否則接收不到數(shù)據(jù)。
通道0和1有5個(gè)字節(jié)寬度;
通道2~5的高32位必須和通道1相同,低8位可以通過(guò)軟件設(shè)置;
參考手冊(cè)寄存器部分:
(2)寫(xiě)接收節(jié)點(diǎn)地址,只有通道0可以用來(lái)接收ACK信號(hào)或ACK+返回?cái)?shù)據(jù),此地址必須和主發(fā)送設(shè)備的發(fā)送節(jié)點(diǎn)地址相同,即和(1)的相同。
(3)通道0的自動(dòng)應(yīng)答,必須;
(4)使能通道0的接收地址,必須;
(5)最大重發(fā)間隔時(shí)間至少設(shè)置為500us,最大重發(fā)次數(shù)1~15;
參考手冊(cè):ARD=500µs will be long enough for any payload length.
(6)設(shè)置通信頻率,取值為0~125,取值50,即NEF模塊的射頻頻率為2.450GHz;
參考手冊(cè):
上文大概意思是:可以通過(guò)給寄存器RF_CH這個(gè)寄存器寫(xiě)入?yún)?shù)0~125,使得NRF模塊射頻通道的通信頻率在2.400GHz~2.525GHz范圍內(nèi),射頻信道的頻率分辨率為1MHz,為了防止信道發(fā)生重疊,不同信道之間的射頻頻率相差至少2MHz, 射頻信道的頻率由下列公式計(jì)算:
F = 2400 + rf_ch [MHz]
為了能夠彼此通信,發(fā)射機(jī)和接收機(jī)的射頻信道的頻率必須相同,即寄存器RF_CH設(shè)置一致。
(7)設(shè)置發(fā)射參數(shù),具體參考手冊(cè)寄存器部分;
(8)清除發(fā)送和接收緩沖區(qū),如果不進(jìn)行清除,測(cè)試可用;
(9)配置中斷和CRC校驗(yàn)等,CRC校驗(yàn)8位和16位均可;
(10)激活命令,用于激活R_RX_PL_WID、W_ACK_PAYLOAD 、W_TX_PAYLOAD_NOACK;
參考手冊(cè)SPI指令部分:
從手冊(cè)中可以看到,使用ACTIVE(0x50)指令并寫(xiě)入數(shù)據(jù)0x73可以激活R_RX_PL_WID、W_ACK_PAYLOAD 指令和W_TX_PAYLOAD_NOACK (存在于寄存器FEATURE)狀態(tài),使用 R_RX_PL_WID指令可以得到接收到的數(shù)據(jù)長(zhǎng)度;W_ACK_PAYLOAD 指令僅用于主接收設(shè)備,存儲(chǔ)將要和ACK一起返回的數(shù)據(jù),PPP的取值范圍為000~101,表示0~6六個(gè)數(shù)據(jù)通道,所以W_ACK_PAYLOAD 指令的取值范圍為0xa8~0xad,分別表示0~6六個(gè)通道,具體使用在主接收部分講解。
(11)操作寄存器DYNPD使能通道0的動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度;
ACK帶數(shù)據(jù)返回功能必須使用動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度,詳見(jiàn)靜態(tài)和動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度介紹部分。
(12)置位寄存器 FEATURE寄存器里的 EN_DPL 和 EN_ACK_PAY狀態(tài)位;
從下面的參考手冊(cè)可以得知,要想使能通道0的動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度,還需要使能EN_DPL位;
置位 EN_ACK_PAY狀態(tài)位的目的是使能ACK帶數(shù)據(jù)返回功能。
參考手冊(cè)寄存器部分:
(13)進(jìn)入發(fā)送模式。
// 函數(shù)名 : void NRF_Tx_Dat(u8 *txbuf , u8 datlen)
// 功能 :發(fā)送數(shù)據(jù)
// 輸入?yún)?shù): txbuf(需要發(fā)送的數(shù)據(jù)包),datlen(數(shù)據(jù)長(zhǎng)度)
// 返回參數(shù): 無(wú)
void NRF_Tx_Dat(u8 *txbuf , u8 datlen)
{
// CE拉低,將數(shù)據(jù)寫(xiě)入緩沖區(qū)
NRF_CE_LOW();
// 寫(xiě)數(shù)據(jù)到TX BUF 最大32個(gè)字節(jié) (14)
SPI_NRF_WriteBuf(WR_TX_PLOAD,txbuf,datlen);
// CE為高,發(fā)送數(shù)據(jù)包(15)
NRF_CE_HIGH();
}
(14)使用W_TX_PAYLOAD指令將要發(fā)送的數(shù)據(jù)寫(xiě)入發(fā)送緩沖區(qū);
(15)CE置高10us后,主發(fā)送設(shè)備開(kāi)始發(fā)送數(shù)據(jù);
// 函數(shù)名 : void Nrf_Check_Event(u8 *rxbuf)
// 功能 :接收ACK返回的數(shù)據(jù),并清除相應(yīng)中斷標(biāo)志位
// 輸入?yún)?shù): txbuf(需要發(fā)送的數(shù)據(jù)包),datlen(數(shù)據(jù)長(zhǎng)度)
// 返回參數(shù): 無(wú)
注:此函數(shù)在主程序中每隔2ms執(zhí)行一次,檢測(cè)是否接收到和ACK一起返回的數(shù)據(jù)
void Nrf_Check_Event(u8 *rxbuf)
{
//得到中斷標(biāo)志位(16)
u8 sta = SPI_NRF_ReadReg(NRF_READ_REG + STATUS);
if(sta & RX_DR)
{
//得到數(shù)據(jù)長(zhǎng)度(17)
u8 rx_len = SPI_NRF_ReadReg(R_RX_PL_WID);
if(rx_len《33)
{
// 接收返回?cái)?shù)據(jù)
SPI_NRF_ReadBuf(RD_RX_PLOAD,rxbuf,rx_len);
// 解析收到數(shù)據(jù)
Data_Receive_Anl(rxbuf,rx_len);
}
else
{
// 清空接收緩沖區(qū)
SPI_NRF_WriteReg(FLUSH_RX,0xff);
}
}
if(sta & TX_DS)
{
}
if(sta & MAX_RT)
{
if(sta & 0x01)
{
// 清空發(fā)送緩沖區(qū)
SPI_NRF_WriteReg(FLUSH_TX,0xff);
}
}
// 清除中斷標(biāo)志位(18)
SPI_NRF_WriteReg(NRF_WRITE_REG + STATUS, sta);
}
(16)初始化過(guò)程中使能了發(fā)送成功、接收成功、達(dá)到最大重發(fā)次數(shù)中斷,此處目的是得到中斷標(biāo)志位,從而執(zhí)行相應(yīng)的操作;
(17)從上面的指令部分可以得知,利用R_RX_PL_WID指令可以得到接收到的數(shù)據(jù)的長(zhǎng)度;
(18)中斷標(biāo)志位必須清除。
3、主接收設(shè)備的配置過(guò)程解析
//函數(shù)名 : void NRF_RX_Mode(void)
//功能 : 初始化NRF2401+模塊為發(fā)送模式
//輸入?yún)?shù): 無(wú)
//返回參數(shù): 無(wú)
void NRF_RX_Mode(void)
{
NRF_CE_LOW();
//寫(xiě)TX節(jié)點(diǎn)地址(1)
// SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
//寫(xiě)RX節(jié)點(diǎn)地址(2)
SPI_NRF_WriteBuf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);
//使能通道0的自動(dòng)應(yīng)答(3)
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_AA,0x01);
//使能通道0的接收地址(4)
SPI_NRF_WriteReg(NRF_WRITE_REG+EN_RXADDR,0x01);
//設(shè)置RF通信頻率(5)
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_CH,50);
//設(shè)置自動(dòng)重發(fā)間隔時(shí)間:500us;最大自動(dòng)重發(fā)次數(shù):10次(6)
// SPI_NRF_WriteReg(NRF_WRITE_REG+SETUP_RETR,0x1a);
//選擇通道0的有效數(shù)據(jù)寬度(靜態(tài)數(shù)據(jù)長(zhǎng)度需要配置,動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度不需要配置)(7)
//SPI_NRF_WriteReg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);
//設(shè)置RX發(fā)射參數(shù),0db增益,2Mbps,低噪聲增益開(kāi)啟(8)
SPI_NRF_WriteReg(NRF_WRITE_REG+RF_SETUP,0x0f);
SPI_NRF_WriteReg(FLUSH_TX,0xff);
SPI_NRF_WriteReg(FLUSH_RX,0xff);
// IRQ收發(fā)完成中斷開(kāi)啟,16位CRC,主接收(9)
SPI_NRF_WriteReg(NRF_WRITE_REG + CONFIG, 0x0f);
// ACTIVE (10)
SPI_NRF_RW(0x50);
SPI_NRF_RW(0x73);
//使能動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度(11)
SPI_NRF_WriteReg(NRF_WRITE_REG+0x1c,0x01);
//使能ACK帶數(shù)據(jù)返回功能 (12)
SPI_NRF_WriteReg(NRF_WRITE_REG+0x1d,0x06);
//CE拉高,進(jìn)入接收模式(13)
NRF_CE_HIGH();
}
(1)寄存器TX_ADDR “ Used for a PTX device only”,即用于主發(fā)送設(shè)備,主接收設(shè)備配置這個(gè)寄存器不起作用;
(2)配置主接收設(shè)備的接收數(shù)據(jù)節(jié)點(diǎn)地址,必須和主發(fā)送設(shè)備的發(fā)送端節(jié)點(diǎn)數(shù)據(jù)地址相同,否則接收不到數(shù)據(jù);
(3)使能通道0的自動(dòng)應(yīng)答,因?yàn)橹靼l(fā)送設(shè)備通過(guò)通道0進(jìn)行數(shù)據(jù)發(fā)送;
從手冊(cè)中可以看到,如果使能ACK,則需要使能相應(yīng)通道的自動(dòng)應(yīng)答;
參考手冊(cè)部分:
(4)使能通道0的接收地址,目的是能接受數(shù)據(jù);
(5)取值50,即NEF主接收模塊的射頻頻率為2.450GHz;
主發(fā)送模塊的射頻頻率必須和主接收模塊的射頻頻率相同;
詳見(jiàn)主發(fā)送部分介紹;
(6)設(shè)置”最大重發(fā)次數(shù)“和”自動(dòng)重發(fā)延時(shí)“;
如手冊(cè)所示,只應(yīng)用于主發(fā)送端,主接收端不需要配置;
所謂“自動(dòng)重發(fā)”是指,當(dāng)發(fā)送端在特定的時(shí)間內(nèi)沒(méi)有接收到返回的ACK時(shí),則重新發(fā)送剛才的數(shù)據(jù),直到達(dá)到最大重發(fā)次數(shù);
參考手冊(cè)部分:
(7)配置接收數(shù)據(jù)長(zhǎng)度;
只有靜態(tài)數(shù)據(jù)長(zhǎng)度模式下需要配置,動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度模式下不需要配置;
參考手冊(cè)部分:
通過(guò)手冊(cè)可知,在增強(qiáng)型ShockBurst 模式下,傳輸數(shù)據(jù)長(zhǎng)度(最大32字節(jié))有靜態(tài)和動(dòng)態(tài)兩種模式,所謂靜態(tài)指每次發(fā)送的數(shù)據(jù)長(zhǎng)度固定,所謂動(dòng)態(tài)是指每次發(fā)送的數(shù)據(jù)可隨意長(zhǎng)度,但是在ACK帶數(shù)據(jù)返回模式下,只能使用動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度。
靜態(tài)數(shù)據(jù)長(zhǎng)度模式下,主接收端可通過(guò)配置RX_PW_P0寄存器,設(shè)置接收數(shù)據(jù)長(zhǎng)度,接收數(shù)據(jù)長(zhǎng)度必須和發(fā)送端發(fā)送的數(shù)據(jù)長(zhǎng)度相等;
動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度模式下,接收端(無(wú)論是主接收端還是主發(fā)送端處于接受模式時(shí))可以使用用R_RX_PL_WID(0110 0000)指令得到接收數(shù)據(jù)長(zhǎng)度;
為了使能動(dòng)態(tài)數(shù)據(jù)長(zhǎng)度模式,F(xiàn)EATURE寄存器中的EN_DPL位必須置位(無(wú)論主發(fā)送端還是主接收端),同時(shí)主發(fā)送端的寄存器DYNPD中的位DPL_P0必須置位,主接收端寄存器DYNPD中的位DPL_PX必須置位(用到哪個(gè)通道置位哪個(gè)通道)。
(8)參數(shù)配置,必須和主發(fā)送設(shè)備一致,詳見(jiàn)手冊(cè);
(9)基本配置;
必須和主發(fā)送端設(shè)置一致;
(10)(11)(12)詳見(jiàn)主發(fā)送端配置說(shuō)明;
(13)CE置高130us后,主接收設(shè)備開(kāi)始檢測(cè)是否有數(shù)據(jù)需要接收;
//函數(shù)名 : void NRF_Tx_Dat_AP(u8 * tx_buf, u8 len)
//功能 : ACK帶數(shù)據(jù)返回函數(shù)
//輸入?yún)?shù): tx_buf(發(fā)送數(shù)據(jù)包),len(數(shù)據(jù)長(zhǎng)度)
//返回參數(shù): 無(wú)
void NRF_Tx_Dat_AP(u8 * tx_buf, u8 len)
{
// CE拉低,將數(shù)據(jù)寫(xiě)入緩沖區(qū)
NRF_CE_LOW();
// 寫(xiě)數(shù)據(jù)到TX BUF 最大32個(gè)字節(jié)(14)
SPI_NRF_WriteBuf(0xa8, tx_buf, len);
// CE為高,發(fā)送數(shù)據(jù)包
NRF_CE_HIGH();
}
(14)ACK帶數(shù)據(jù)返回時(shí),使用W_ACK_PAYLOAD(10101PPP)指令存儲(chǔ)將要返回的數(shù)據(jù),PPP表示通道0~5,取值為001~101;如果同時(shí)有六個(gè)設(shè)備(主發(fā)送)與一個(gè)設(shè)備(主接收)進(jìn)行通信,則0xac表示接收端此時(shí)使用的是第4通道帶數(shù)據(jù)返回;
// 函數(shù)名 : u8 Nrf_Check_Event(u8 *rxbuf)
// 功能 :接收數(shù)據(jù),并清除相應(yīng)中斷標(biāo)志位
// 輸入?yún)?shù): txbuf(接收的數(shù)據(jù)包),datlen(數(shù)據(jù)長(zhǎng)度)
// 返回參數(shù): sta (中斷標(biāo)志位)
u8 Nrf_Check_Event(u8 *rxbuf)
{
u8 sta = 0;
sta = SPI_NRF_ReadReg(STATUS);
if(sta & RX_DR)//接收中斷
{
//得到數(shù)據(jù)長(zhǎng)度
u8 rx_len = SPI_NRF_ReadReg(R_RX_PL_WID);
//讀取數(shù)據(jù)
SPI_NRF_ReadBuf(RD_RX_PLOAD,rxbuf,rx_len);
SPI_NRF_WriteReg(FLUSH_RX,NOP);
}
if(sta & TX_DS)
{
}
if(sta & MAX_RT)
{
if(sta & 0x01)
{
SPI_NRF_WriteReg(FLUSH_TX,0xff);
}
}
// 清除中斷標(biāo)志位
SPI_NRF_WriteReg(NRF_WRITE_REG + STATUS, sta);
return sta;
}
三、增強(qiáng)型ShockBurst™模式下多機(jī)通信:
這部分主要介紹一下多機(jī)通信,即一個(gè)主接收設(shè)備與六個(gè)主發(fā)送設(shè)備進(jìn)行通信,當(dāng)然大多數(shù)情況下,我們用不到這個(gè),這部分的主要目的理解接收數(shù)據(jù)地址和發(fā)送數(shù)據(jù)地址之間的關(guān)系。
參考手冊(cè)部分:
這部分主要提到多機(jī)通信的過(guò)程中,所有設(shè)備的如下設(shè)置要一致:
~CRC使能;
~CRC配置(8位或16位);
~接收數(shù)據(jù)地址寬度;
~RF_CH配置相同,即射頻頻率需要配置一致;
~無(wú)線數(shù)據(jù)傳輸速率;
~低噪聲放大器增益;
置位寄存器EN_RXADDR相應(yīng)位可以使能相應(yīng)的數(shù)據(jù)通道,數(shù)據(jù)通道地址可以通過(guò)RX_ADDR_PX寄存器來(lái)進(jìn)行配置;
參考手冊(cè)部分:
nRF2401無(wú)線模塊的PCB圖免費(fèi)下載立即下載
類別:通信網(wǎng)絡(luò)電路 2019-11-05 標(biāo)簽:PCBnRF2401無(wú)線模塊
NRF2401無(wú)線溫度傳感的應(yīng)用程序資料合集免費(fèi)下載立即下載
類別:C語(yǔ)言|源代碼 2019-03-28 標(biāo)簽:溫度傳感程序NRF2401
類別:射頻無(wú)線論文 2017-11-29 標(biāo)簽:射頻收發(fā)芯片nrf2401
類別:嵌入式開(kāi)發(fā) 2016-07-13 標(biāo)簽:nrf2401無(wú)線通信模塊
無(wú)線傳輸模組_使用說(shuō)明書(shū)V1.0立即下載
類別:嵌入式開(kāi)發(fā) 2016-07-13 標(biāo)簽:nrf2401無(wú)線通信模塊
NRF2401中文數(shù)據(jù)手冊(cè)立即下載
類別:產(chǎn)品手冊(cè) 2016-04-06 標(biāo)簽:射頻收發(fā)芯片nRF2401
基于S3C2440的nRF2401驅(qū)動(dòng)設(shè)計(jì)
通信頻率為2.4GHz 的ISM 頻段,由于其免許可證、波長(zhǎng)較短、天線的尺寸小、外圍器件少等優(yōu)點(diǎn),適合于近距離無(wú)線通信。將ARM9 與nRF24E1 結(jié)...
nRf2401+CP2102實(shí)現(xiàn)USB2.0無(wú)線測(cè)控網(wǎng)絡(luò)
nRf2401+CP2102實(shí)現(xiàn)USB2.0無(wú)線測(cè)控網(wǎng)絡(luò):使用USB-UART橋接電路CP2102可以避免缺少開(kāi)發(fā)知識(shí)等麻煩。
基于nRF2401的手持式讀寫(xiě)器的設(shè)計(jì)
本文設(shè)計(jì)了一款有源RFID便攜式讀寫(xiě)器。本讀寫(xiě)器工作在2.4GHz~2.5GHz的頻率范圍內(nèi),其特點(diǎn)是讀寫(xiě)距離遠(yuǎn)、數(shù)據(jù)傳輸量大、存儲(chǔ)能力強(qiáng),主要應(yīng)用于大...
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語(yǔ)言教程專題
電機(jī)控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動(dòng)駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無(wú)刷電機(jī) | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機(jī) | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進(jìn)電機(jī) | SPWM | 充電樁 | IPM | 機(jī)器視覺(jué) | 無(wú)人機(jī) | 三菱電機(jī) | ST |
伺服電機(jī) | SVPWM | 光伏發(fā)電 | UPS | AR | 智能電網(wǎng) | 國(guó)民技術(shù) | Microchip |
Arduino | BeagleBone | 樹(shù)莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |