BasicRF點對點概述
BasicRF軟件包有四大部分:
<1> 硬件層:Hardware Layer。
<2> 硬件抽象層:Haware Abstraction Layer。
<3> 基本無線傳輸層:Basic RF Layer。
<4> 應用層:Appliaction。
BasicRF的特點:
BasicRF包括了IEEE 802.15.4標准數據包的發送和接收,采用了與IEEE 802.15.4 MAC兼容的數據包結構和ACK結構。在使用中,有如下的功能限制:
<1> 不具備“多跳”、“設備掃描”功能。
<2> 不提供多種網絡設備,如協調器、路由器等。所有的節點為同一等級,只能實現點對點的數據傳輸。
<3> 傳輸時會等待信道空閑,但不會按照IEEE 802.15.4 CSMA-CA的要求進行兩次CCA檢測。
<4> 不支持數據重傳。
在basic_rf.h的文件中,有一個basicRfCfg_t類型的數據結構定義,該結構體包含了無線相關的所有參數。
在應用開發中,先創建一個該類型的結構體變量,再根據實際情況,把本機地址、網絡ID、通信信道、應答信號和加密設置填充到該結構體變量中。然后再通過basicRfInit(basicRfCfg_t* pRfConfig)初始化函數將參數寫入到無線模塊中。
注意:兩個要建立通信的節點,網絡ID和通信信道必須一致。
無線模塊初始化
在hal_rf.c文件中,有一個halRfInit()函數,該函數初始化射頻無線模塊,設置默認配置選項,允許自動確認和允許隨機數產生。
在應用開發中,直接調用該函數來初始化無線模塊。
常用API函數
basicRfInit(basicRfCfg_t *pRfConfig) 無線傳輸初始化函數
basicRfSendPacket(uint16 destAddr, uint8 *pPayload, uint8 length);無線數據發送函數 1、目的地址2、發送數據內容的首地址3、發送數據的長度
在basic_rf.c文件中,有一個basicRfSendPacket()函數,負責無線數據的發送。
該函數有三個參數,依次是:
uint16 destAddr———->發送目標的地址
uint8* pPayload———->發送內容的數組
uint8 length———->發送數據的長度
在應用開發中,先創建一個字節數組作為數據發送的緩沖區,將要發送的內容置於數組之中,然后直接調用該無線數據發送函數進行發送即可。
函數執行成功返回:SUCCESS。
函數執行失敗返回:FAILED。
basicRfReceiveOn(void); 開啟接收功能
basicRfReceiveOff(void); 關閉接收功能
在無線數據的接收中,首先要查詢並判斷是否接收到新的數據,如果有,則把接收的數據讀出去來,因此需要用到basic_rf.c文件中的2個API函數:
basicRfPacketIsReady(void) 是否有數據需要接受
basicRfReceive(uint8 *pRxData, uint16 len, int16 *pRssi); 數據接收函數pRxData指向一個地址,用於存放接收的內容,len接收數據的長度pRssi表示鏈路傳輸質量
首先調用basicRfPacketIsReady()函數來查詢是否收到新的數據包,如果有新的數據包,則返回TRUE。新的數據包信息會存放在basicRfRxInfo_t類型結構體的rxi成員中。在應用開發中,我們不需要過多關注該結構體。因為當查詢到新的數據包后,調用basicRfReceive()函數就可以把新接收到的數據復制到自定義的數據緩沖區中,然后進行應用開發。
basicRfReceive()函數有三個參數,依次是:
uint8* pRxData———->數據接收緩沖區
uint8 len———->要接收的數據長度
int16* pRssi———->無線信號強度,實際應用中填NULL
函數執行成功返回:接收的字節數。