2.4G无线通信
NRF24L01是NORDIC公司生產的一款無線通信通信芯片,采用FSK 調制,集成NORDIC自家的Enhanced Short Burst協議。可以實現點對點或是1對6的無線通信。無線通信速度最高可達到2Mbps。NRF24L01采用SPI通信,可以很方便的連接到MCU上面。
NRF24L01的特點
①2.4G全球開放的ISM頻段,免許可證使用。
②最高工作速率2Mbps,高校的GFSK調制,抗干擾能力強。
③126個可選的頻道,滿足多點通信和調頻通信的需要。
④內置CRC檢錯和點對多點的通信地址控制。
⑤可設置自動應答,確保數據可靠傳輸。
NRF24L01模塊介紹
?CE:模式控制線。在 CSN為低的 情況下,CE 協同CONFIG 寄存器 共同決定NRF24L01 的狀態(參照 NRF24L01 的狀態機)?? ??? ? ?? ??? ?
CSN:SPI片選線
SCK:SPI時鐘線
MOSI:SPI數據線(主機輸出,從機輸入)
MISO:SPI數據線(主機輸入,從機輸出)
IRQ:中斷信號線。中斷時變為低電平,在以下三種情況變低:Tx FIFO 發完并且收到ACK(使能ACK情況下)、Rx FIFO 收到數據、達到最大重發次數。
SPI時序
?空閑狀態SCK為0,CPOL=0;數據在時鐘第一個時間邊沿采集,CPHA=0;
Cn:SPI命令位
Sn:STATUS寄存器位 ? ? ? ?
Dn:數據位( MSB,多字節傳輸時,低字節在前)
NRF24L01的工作模式,由CE和CONFIG寄存器(0X00)的PWR_UP(第1位)和PRIM_RX(第0位)位共同控制:
其中,收發模式又有: Enhanced ShockBurstTM收發模式和ShockBurstTM收發模式,只有Enhanced ShockBurstTM收發模式支持自動ACK和自動重發。開啟自動ACK,則默認選擇Enhanced模式?。
Enhanced ShockBurstTM模式介紹
Enhanced ShockBurstTM收發模式,使用片內的先入先出堆棧區,數據可以低速從微控制器送入,但高速(1Mbps/2Mbps)發射,這樣可以盡量節能。與射頻協議相關的所有高速信號處理都在片內進行,這種做法有大好處:
1,節能;
2,低的系統費用(低速微處理器也能進行高速射頻發射);
3,數據在空中停留時間短,抗干擾性高; ? ?
在Enhanced ShockBurstTM收發模式下, NRF24L01自動處理字頭和CRC校驗碼。在接收數據時,自動把字頭和CRC校驗碼移去。在發送數據時,自動加上字頭和CRC校驗碼,在發送模式下,置CE為高,至少10us,將使能發送過程。
Enhanced ShockBurstTM發送流程
1. 把地址和要發送的數據按時序送入NRF24L01;
2. 配置CONFIG寄存器,使之進入發送模式;
3. 微控制器把CE置高(至少10us),激發Enhanced ShockBurstTM發射;
4. Enhanced ShockBurstTM發射:① 給射頻前端供電;②射頻數據打包(加字頭、CRC校驗碼); ③ 高速發射數據包; ④發射完成,NRF24L01進入空閑狀態。
Enhanced ShockBurstTM發送模式初始化
1)寫Tx 節點的地址 TX_ADDR
2)寫Rx 節點的地址(主要是為了使能Auto Ack) RX_ADDR_P0
3)使能AUTO ACK EN_AA
4)使能PIPE 0 EN_RXADDR
5)配置自動重發次數 SETUP_RETR
6)選擇通信頻率 RF_CH
頻率計算公式:2400+RF_CH ?(Mhz)
7)配置發射參數(低噪放大器增益、發射功率、無線速率) RF_SETUP
8)配置24L01 的基本參數以及切換工作模式 CONFIG。
Enhanced ShockBurstTM接收流程
1. 配置接收地址和要接收的數據包大小;
2. 配置CONFIG寄存器,使之進入接收模式,把CE置高。
3. 130us后,NRF24L01進入監視狀態,等待數據包的到來;
4. 當接收到正確的數據包(正確的地址和CRC校驗碼),NRF2401自動把字頭、地址和CRC校驗位移去;
5. NRF24L01通過把STATUS寄存器的RX_DR置位(STATUS一般引起微控制器中斷)通知微控制器;
6. 微控制器把數據從FIFO讀出(0X61指令);
7. 所有數據讀取完畢后,可以清除STATUS寄存器。NRF2401可以進入 四種主要的模式之一;
Enhanced ShockBurstTM接收模式初始化
1)寫Rx 節點的地址 RX_ADDR_P0
2)使能AUTO ACK EN_AA
3)使能PIPE 0 EN_RXADDR
4)選擇通信頻率 RF_CH
5)選擇通道0 有效數據寬度 RX_PW_P0
6)配置發射參數(低噪放大器增益、發射功率、無線速率) RF_SETUP
7)配置24L01 的基本參數以及切換工作模式 CONFIG。
硬件設計
這里NRF24L01也是使用的SPI1,和W25Q128共用一個SPI接口,所以在使用的時候,他 們分時復用SPI1。本章我們需要把W25Q128的片選信號置高,以防止這個器件對NRF24L01 的通信造成干擾。另外,NRF_IRQ和RS485_RE共用了PG8,所以,他們不能同時使用,不過 我們一般用不到NRF_IRQ這個信號,因此,RS485和NRF一般也可以同時使用。?
代碼講解
打開 24l01.c 文件,在 NRF24L01_Init 函數里面, 我們調用了 SPI1_Init()函數,SCK 空閑的時候是低電平的,而數據在 SCK 的上升沿被讀寫。所以,我們需要設置 SPI 的 CPOL 和 CPHA 均為 0,來滿足 NRF24L01 對 SPI 操作的要求。所以,我們在 NRF24L01_Init 函數里面又單獨添 加了將 CPOL 和 CPHA 設置為 0 的函數 NRF24L01_SPI_Init。
24l01.h 頭文件,部分代碼,主要定義了一些 24L01 的命令字,以及函數聲明,這里還通過 TX_PLOAD_WIDTH 和 RX_PLOAD_WIDTH 決定了發射和接收的數據寬度,也就是我們每次發射和接受的有效字節數。NRF24L01 每次最多傳輸 32 個字節,再多的字節傳輸則需要多次傳送。
main函數,程序運行時先通過 NRF24L01_Check 函 數檢測 NRF24L01 是否存在,如果存在,則讓用戶選擇發送模式(KEY1)還是接收模式(KEY0), 在確定模式之后,設置 NRF24L01 的工作模式,然后執行相應的數據發送/接收處理。
總結
- 上一篇: 网络安全课第三节 SQL 注入的检测与防
- 下一篇: C语言函数指针和指针函数的定义和调用