基于BasicRF点对点无线开发基础知识

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文件中的2API函数

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
函数执行成功返回:接收的字节数

原文地址:https://www.cnblogs.com/yuling520/p/12764432.html