NRF24L01 無線通信模塊使用

NRF24L01驅動代碼下載:http://download.csdn.net/detail/ieczw/7029597

NRF24L01調試了近一個星期!多多少少有點浪費感情,因爲由於板子的問題害的我一直無法調通,後來又找了兩塊板子,立馬搞好!當然我的程序很大成分上是參考老一輩革命家的;但是在這之間,由於板子的問題,迫使我對NRF24L01的datasheet進行了一番研究!

NRF24L01與控制器的通信採用的SPI通信協議,這個協議具體細節大家可能都懂,不懂的可以之間百度;他們的通信模型是這樣的:


NRF*之間基本上可以互相通信,只要你地址設置的沒有問題!他有六個通道,每一個通道都有自己的緩衝區,這六個通道可以同時跟不同的NRF進行通信,但是通信的兩個之間的TX_ADDR和RX_ADDR一定要相同;


這幅圖能夠充分的說明這個問題;Point1 to Point2,Point1和Point2的通道地址一定要一樣;具體的設置在下面這個寄存器裏面配置:


NRF24L01有RX模式,TX模式,Standby-I模式,Standby-II模式,掉電模式;他們之間的模式轉換如下圖:


這張圖看着可能沒有一點感覺,比較亂,下面這張可能會比較清晰一點:


只要我們想切換到什麼模式就可以根據這個對寄存器進行配置;不過在配置的過程中,一點要注意適當的延時,我這次也被這個延時糾結了半天;


從Standy Mode轉化到Tx/Rx mode 我這次就是可能延時的比較長,導致初始化一直沒有成功,我剛開始一直的想法是,只要我等待的時間越長,他就越容易實現我的配置;看來這種觀念需要改正下;

爲了讓整個傳輸穩定和快速,我可以可以設置自動應答模式;但是他只適合單通道模式:


當發送方把數據發送給接收方,接收方會有一個短暫的延時大致130us,然後會高速發送方我接收了;然後接收方會產生一箇中斷信號,當發送方沒有接收到這個ACk,他就會一直卡在這裏;

說到他的中斷,他有三種中斷模式,一種是接收中斷,二是發送完成中斷,三發送超時中斷;具體我們可以看STATU寄存器:


我們一般判斷的主要是[6:4],RX_DR是接收到中斷標誌位,TX_DS發送完成中斷標誌位,MAX_RT超過最大發送次數標誌位;這三位是可讀可寫的;寫1的時候是清除中斷標誌位;這裏還有一個預留位,我們一般不用,但是有時候我可以用他來測試看看是否寫寄存器成功;當然,其他寄存器的預留位也可以來測試是否控制器與NRF模塊通信是否正常。

另外還有FIFO_STATUS寄存器,他主要是檢測FIFO寄存器的狀態:


說這麼久了,忘記說這個FIFO寄存器,也就是數據寄存器,他有32個Byte,所以我們在設置裝載數據的大小時,只能最大設置爲32byte;當然可以小於32byte;在接收模式下,如果接收完畢,我們最好把FIFO寄存器清空了,可以看FLUSH_RX寄存器,不過理論上,只要把數據讀走,他都會自動清空;但是爲了以防萬一,還是清空了好;


這幾個是比較重要的寄存器,要寫寄存器的話,必須以W_REGISTER爲基地址+命令地址進行寫操作;讀的話同樣的方法;但是一般不寫R_REGISTER,因爲AAAAA=5bit Register Map Address,正好R_Register的高三位爲0,所有Register Map Address的高三位都爲0,所以我們可以不用寫了;但是對於寫操作,高三爲爲001,故我們一般定義W_REGISTER爲0x20,然後與Command與操作;即可;

R_RX_PAYLOAD與W_TX_PAYLOAD作爲發送和接收的緩衝區;

有什麼不懂得,我們可以留言繼續進行討論,我覺得datasheet說的真的是太清晰了,有點地方你沒有看懂,我估計是你沒有找到。

請各位多多指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章