rf_rx例程¶
1 功能概述¶
rf_rx演示了RF在PAN2628b1_evb上接收数据的使用方法,主要包括:
XN297普通型接收
XN297增强型接收
24L01普通型接收
24L01增强型接收
2 环境准备¶
Board: PAN2628b1_evb两块(另一块烧录rf_tx程序)
Micro USB线 用于供电和查看串口打印Log
硬件接线:
将 J19 开关拔至TX侧,将P3_1与UART的TX引脚相连
3 编译和烧录¶
例程位置:pan2628_dk\01_SDK\example_basic\rf\rf_rx
打开目录下keil下的rf_rx.uvprojx工程,编译整个代码工程。
4 演示说明¶
PAN2628b1_evb接收数据,可以通过串口打印出接收的状态。
下面对使用XN297L私有XN297L私有2.4G协议进行数据发送时的不同配置示例进行说明,使用24L01私有2.4G协议的示例效果一致,不再额外说明。
4.1 普通工作模式¶
AckPayload不使能(RF_APL_DISABLE), DynamicPayload不使能(RF_DPL_DISABLE)
参数配置
序号
参数配置
参数说明
1
RF_CHIPMODE_XN297
xn297芯片模式
2
RF_WORKMODE_NORMAL
普通型工作模式
3
RF_APL_DISABLE
不使能ackpayload
4
RF_DPL_DISABLE
不使能dynamic payload
过程说明
发送端发送一包数据后,等待发送完成中断置位,就表示发成功,硬件上没有重发机制;
接收端收到一包数据后,接收完成中断会置位,用户即可读取接收到的数据。
发送端成功发送32字节长度的数据
Tx[32]: [Hex] 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D
Tx[32]: [Hex] 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E
接收端成功接收32字节长度的数据
Rx[32]: [Hex] 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D
Rx[32]: [Hex] 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E
4.2 增强型工作模式1¶
参数配置
序号
参数配置
参数说明
1
RF_CHIPMODE_XN297
xn297芯片模式
2
RF_WORKMODE_ENHANCE
增强型工作模式
3
RF_APL_DISABLE
不使能ackpayload,
回复ack时不带用户数据4
RF_DPL_DISABLE
不使能dynamic payload
过程说明
发送端发送一包数据后,必须等到接收端回复的ack包后,才表示发送成功;
否则会按用户设定的发送次数继续发送直到接收到ack包,或者达到最达发送次数才会停止发送。
另外,由于动态负载长度未使能,发送端和接收端必须设定相同的数据长度才能正常通信。
Rx
与Tx
之间数据发送的流程如下:发送端成功发送32字节长度的数据
Tx[32]: [Hex] 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D
Tx[32]: [Hex] 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E
接收端成功接收32字节长度的数据
Rx[32]: [Hex] 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D
Rx[32]: [Hex] 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E
4.3 增强型工作模式2¶
参数配置
序号
参数配置
参数说明
1
RF_CHIPMODE_XN297
xn297芯片模式
2
RF_WORKMODE_ENHANCE
增强型工作模式
3
RF_APL_ENABLE
使能ackpayload,
回复ack时可带用户数据4
RF_DPL_DISABLE
不使能dynamic payload
过程说明
发送端发送一包数据后,必须等到接收端回复的ack数据包后,才表示发送成功;
否则会按用户设定的发送次数继续发送直到接收到ack数据包,或者达到最达发送次数才会停止发送。
另外,由于动态负载长度未使能,发送端和接收端必须设定相同的数据长度才能正常通信。
Rx
与Tx
之间数据发送的流程如下:发送端成功发送32字节长度的数据
Tx[32]: [Hex] 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A Rx[32]: [Hex] 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C Tx[32]: [Hex] 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B Rx[32]: [Hex] 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
接收端成功接收32字节长度的数据
Rx[32]: [Hex] 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A Tx[32]: [Hex] 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C Rx[32]: [Hex] 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B Tx[32]: [Hex] 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
4.4 增强型工作模式3¶
参数配置
序号
参数配置
参数说明
1
RF_CHIPMODE_XN297
xn297芯片模式
2
RF_WORKMODE_ENHANCE
增强型工作模式
3
RF_APL_ENABLE
使能ackpayload,
回复ack时可带用户数据4
RF_DPL_ENABLE
使能dynamic payload,
发送端可以发送可变长包,
接收端可以接收可变长包过程说明
发送端发送一包数据后,必须等到接收端回复的ack数据包后,才表示发送成功;
否则会按用户设定的发送次数继续发送直到接收到ack数据包,或者达到最达发送次数才会停止发送。
另外,由于使能动态负载,发送端和接收端不必设定相同的数据长度才能正常通信。
Rx
与Tx
之间数据发送的流程如下:修改RF_TX_BUF_SIZE成31,验证动态负载(可变长包)功能:
#define RF_TX_BUF_SIZE 31
发送端成功发送32字节长度的数据
Tx[31]: [Hex] 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A Rx[31]: [Hex] 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C Tx[31]: [Hex] 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B Rx[31]: [Hex] 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
接收端成功接收32字节长度的数据
Rx[31]: [Hex] 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A Tx[31]: [Hex] 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C Rx[31]: [Hex] 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B 2B Tx[31]: [Hex] 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
注:
与上一节内容对比,当DynamicPayload
使能时,允许发送端的发送缓冲区长度RF_TX_BUF_SIZE(31)
小于Rx
端的接收缓冲区长度RF_RX_BUF_SIZE(32)
,可以看到接收端正确接收到了长度为31
字节的数据。
5 开发说明¶
设备的物理层以及用户层配置分别存放在结构体gPhyCfg
和gUsrCfg
中,如需修改配置,修改该结构体即可。
RF_PhyCfg_t gPhyCfg =
{
10, /* rf channel: 2400 + 10*/
RF_DR_1Mbps, /* rf date rate */
RF_CRC_2BYTE, /* rf crc schem */
RF_TXPWR_13dBm /* rf tx power */
};
RF_UsrCfg_t gUsrCfg = /* Use 'UsrConfig6' in the above config table */
{
RF_CHIPMODE_XN297, /* chip mode: xn297 */
RF_WORKMODE_ENHANCE, /* work mode: enhance */
RF_APL_ENABLE, /* ack payload: enable */
RF_DPL_ENABLE, /* dynamic payload: enable*/
DISABLE /* tx noack: disable */
};
RF参数初始化
APP_RfInit();
6 RAM/Flash资源使用情况¶
Program Size: data=53.1 xdata=73 const=64 code=6033