-
1 知识介绍
-
2 PPT
-
3 学习视频
-
4 章节测试
-
5 拓展内容
-
6 国之重器
一、BasicRF概述
(一) BasicRF的定义
BasicRF是简单无线点对点传输协议,功能较为简单,通过BasicRF能够进行数据的发送和接收,可用于无线设备数据传输的入门学习。TI公司提供了基于CC253x芯片的BasicRF软件包,其中包括硬件层(Hardware layer)、硬件抽象层(Hardware Abstraction layer)、基本无线传输层(Basic RF layer)和应用层(Application)。
(二) BasicRF基本架构
如

(三) BasicRF的功能限制
BasicRF包括了IEEE 802.15.4标准数据包的发送和接收,采用了与IEEE 802.15.4 MAC兼容的数据包结构和ACK结构。在具体的使用中的功能限制包括:
(1)不具备“多跳”、“设备扫描”功能。
(2)不提供多种网络设备,如常用的协调器和路由器等。
(3)传输时等待信道空闲,但不按IEEE 802.15.4 CSMA-CA要求两次CCA检测。
(4)不重复传输数据。因此,BasicRF是简单无线点对点传输协议,可用来进行Z-Stack协议栈无线数据传输的入门学习。
(四) BasicRF软件包文件夹层次图
如

二、BasicRF无线通信初始化
Basic RF软件包中实际上与无线数据传输相关的并不多,真正与Basic RF相关的包括四个部分:无线参数配置、无线模块初始化,无线数据发送和无线数据接收。其他部分用于管理CC2530硬件的内容。
(一) BasicRF无线通信初始化步骤
(1) 首先,调用halBoardInit()函数,初始化板载外设、射频接口、系统时钟、中断等,确保外围器件没有问题。调用halRfInit()函数,打开射频模块,设置默认配置选项,允许自动确认和随机数产生。
(2)其次,创建BasicRF数据结构体(basicRfCfg_t),并初始化其成员;其中BasicRF数据结构体就是位于basic_rf.h的basicRfCfg_t结构体。
(3)最后,BasicRF协议初始化,通过调用halRfinit()实现。
(二)BasicRF关键函数分析
1. 常用的API函数
如
(1)basicRFInit()函数,顾名思义是初始化BasicRF无线通信函数;
(2)basciRfSendPacket()函数用于将目标数据发送给接收方,从而实现通信,其主要作用就发送数据;
(3)basciRfPacketlsReady()函数则是能够让接收方检测当前是否收到新数据;
(4)basicRfGetRssi()函数用于去获取当前的信号强度(RSSI);
(5)basicRfReceive()函数用于接受数据;
(6)basicRfRecieveOn()函数和basicRfRecieveOff()函数是控制无线通信的开关。
序号 | 函数名 | 函数功能 |
1 | basicRFInit() | 初始化BasicRF无线通信程序 |
2 | basciRfSendPacket() | 发送数据 |
3 | basciRfPacketlsReady() | 是否收到了新数据 |
4 | basicRfGetRssi() | 获取RSSI值 |
5 | basicRfReceive() | 接受数据 |
6 | basicRfRecieveOn() | 开启接受功能 |
7 | basicRfRecieveOff() | 禁用接受功能 |
2. 无线通信相关的所有参数
所有的参数都存在于basicRfCfg_t这个数据类型的结构体中,具体内容如

basciRfCtg_t结构体的组成。myAddr是本机地址,也是该模块的标识,其主要作用就是能够在不同的模块间快速区分,是独一无二的;panId是网络ID,当网络ID一致时,可以组成局域网;channel是通信信道,要建立通信该参数必须一致,当panId、channel这两个参数一致时,可形成局域组网;ackRequest是应答信号。
basciRfCtg_t结构体的使用方式如

3. 无线模块初始化
在hal_rf.c文件中,有一个halRfInit()函数,具体内容如

4. 无线数据发送
无线数据发送函数basicRfSendPacket()位于basic_rf.c文件中,具体内容如

5. 无线数据接收
在无线数据的接收中需要用到2个API函数,分别是basicRfPacketIsReady()和basicRfReceive()。
首先调用basicRfPacketIsReady()函数来查询是否收到新的数据包,如果有新的数据包,则返回TRUE。新的数据包信息会存放在basicRfRxInfo_t类型结构体的rxi中。实际上,我们不需要过多关注该结构体。因为当查询到新的数据包后,可以调用basicRfReceive()函数把接收到的数据复制到自定义的缓冲区中,然后进行使用。basicRfReceive()函数定义如

然后了解接收函数basicRfReceive(),第一个参数pRxData为数据接收缓冲区,作用是存放即将到来的数据,第二个参数len为要接收的数据长度,第三个参数pRssi是无线信号强度。当函数成功执行,其返回值为接收到的数据字节数。再就是一些不常使用到的函数:basicRfReceiveOn(void)是开启接收功能;basicRfReceiveOff(void)则关闭接收功能;basicRfPacketIsReady(void)是否有数据需要接受。

