基于MCU和nRF24L01的無線通信系統(tǒng)設(shè)計(jì)
2 系統(tǒng)軟件設(shè)計(jì)
2.1 數(shù)據(jù)包處理方式
將nRF24L01配置成增強(qiáng)型ShockBurst模式,使得雙向鏈接協(xié)議執(zhí)行更為簡(jiǎn)易有效。發(fā)送方要求終端設(shè)備在接收數(shù)據(jù)后有應(yīng)答信號(hào),以便發(fā)送方檢測(cè)有無數(shù)據(jù)丟失。一旦數(shù)據(jù)丟失則通過重新發(fā)送功能將丟失的數(shù)據(jù)恢復(fù)。它可以同時(shí)控制應(yīng)答及重發(fā)功能而無需增加MCU工作量。nR F24L01配置為增強(qiáng)型的ShockBurst發(fā)送模式下時(shí),只要MCU有數(shù)據(jù)要發(fā)送,nRF24L01就會(huì)啟動(dòng)ShockBurst模式來發(fā)送數(shù)據(jù)。在發(fā)送完數(shù)據(jù)后nRF24L01轉(zhuǎn)到接收模式并等待終端的應(yīng)答信號(hào)。如未收到應(yīng)答信號(hào),nRF24L01將重發(fā)相同的數(shù)據(jù)包,直到收到應(yīng)答信號(hào)或重發(fā)次數(shù)超過SETUP _RETR_ARC寄存器中設(shè)置的值為止。如果重發(fā)次數(shù)超過了設(shè)定值,則產(chǎn)生MAX_RT中斷。只要收到確認(rèn)信號(hào),nRF24L01就認(rèn)為最后一包數(shù)據(jù)已經(jīng)發(fā)送成功,把TX FIFO中的數(shù)據(jù)清除掉并產(chǎn)生TX_DS中斷,IRQ引腳置高。本文引用地址:http://cafeforensic.com/article/154546.htm
nRF24L01在接收模式下可以接收6路不同通道的數(shù)據(jù),如圖3所示。每個(gè)數(shù)據(jù)通道使用不同的地址,但共用相同的頻道。即6個(gè)不同的nRF 24L01設(shè)置為發(fā)送模式后,可以與同一個(gè)設(shè)置為接收模式的nRF24L01進(jìn)行通訊,而設(shè)置為接收模式的nRF24L01可以對(duì)這6個(gè)發(fā)射端進(jìn)行識(shí)別。n RF24L01在確認(rèn)收到數(shù)據(jù)后記錄地址,并以此地址為目標(biāo)地址發(fā)送應(yīng)答信號(hào)。在發(fā)送端,數(shù)據(jù)通道0被用作接收應(yīng)答信號(hào)。
2.2 系統(tǒng)軟件設(shè)計(jì)流程
圖4為子模塊和主模塊程序設(shè)計(jì)流程圖,軟件開發(fā)環(huán)境為KeilC uVision3。
程序基本思路為子模塊配置為接收狀態(tài),如成功接收到數(shù)據(jù)則進(jìn)行EEPROM子程序操作,否則切換成發(fā)射模式,成功發(fā)送并接收到應(yīng)答信號(hào)后再變成接收模式,進(jìn)入下一次接收發(fā)射循環(huán);主模塊設(shè)置為接收數(shù)據(jù)信息狀態(tài),能與多路處于發(fā)射狀態(tài)的數(shù)據(jù)通道進(jìn)行通訊,并從接收到的數(shù)據(jù)中判別數(shù)據(jù)通道口;接收信息后自動(dòng)回復(fù)應(yīng)答信號(hào)。通過切換接收發(fā)射狀態(tài)實(shí)現(xiàn)多點(diǎn)對(duì)單點(diǎn)的雙向無線數(shù)據(jù)通訊。
2.2.1 nRF24L01初始化程序
nRF24L01初始化程序包括引腳初始化和中斷初始化。引腳初始化使芯片工作在待機(jī)模式下(CE=0),時(shí)鐘設(shè)置SCK低電平,片選不使能(CSN=1),工作在串行輸入狀態(tài)(MOSI=0);中斷初始化則使能外部中斷(EX1=1),低電平觸發(fā)。
2.2.2 nRF24L01配置接收/發(fā)射模式
對(duì)芯片內(nèi)部的特殊功能寄存器進(jìn)行初始化操作。
通過對(duì)CONFID配置設(shè)定其工作模式,設(shè)置接收地址,接收有效數(shù)據(jù)寬度、選擇射頻通道、數(shù)據(jù)傳輸率、發(fā)射功率等參數(shù)。配置完成后,置高CE,準(zhǔn)備接收數(shù)據(jù)包,如表1所示。
評(píng)論