当前文档版本为 v0.3.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

rf_rx例程

1 功能概述

rf_rx演示了RF在PAN028b1_evb上接收数据的使用方法,主要包括:

  • 297普通型接收

  • 297增强型接收

  • 24L01普通型接收

  • 24L01增强型接收

2 环境准备

  • Board: PAN028b1_evb两块(另一块烧录发送程序)

  • Micro USB线 用于供电和查看串口打印Log

  • 硬件接线:

    • 将 J19 开关拔至TX侧,将P3_1与uart的TX引脚相连

3 编译和烧录

例程位置:pan2628_dk\01_SDK\example_basic\rf\rf_rx

打开目录下keil下的Rx.uvprojx工程,编译整个代码工程。

4 演示说明

PAN028b1_evb接收数据,可以通过串口打印出接收的状态。

下面对使用XN297L私有XN297L私有2.4G协议进行数据发送时的不同配置示例进行说明。使用24L01私有2.4G协议的示例效果一致,不再额外说明。

4.1 普通工作模式, AckPayload不使能(RF_APL_DISABLE), DynamicPayload不使能(RF_DPL_DISABLE)

Tx端成功发送32字节长度的数据。

tx1

Rx端成功接收到长度为32字节的数据。

tx1

4.2 增强工作模式, AckPayload不使能(RF_APL_DISABLE), DynamicPayload不使能(RF_DPL_DISABLE)

Tx端成功发送32字节长度的数据。

tx1

Rx端成功接收到长度为32字节的数据。

tx1

4.3 增强工作模式, AckPayload使能(RF_APL_ENABLE), DynamicPayload不使能(RF_DPL_DISABLE)

AckPayload使能后,Rx端在接收到数据后向Tx端发送Ack

"Tx ok" 表示Tx端发送数据成功,"read ack done[32]"表示接收到长度为32字节的Ack数据。

tx

Rx端成功接收到32字节的数据,并且在发送Ack之前写入了32字节的数据作为Ack,发送到Tx

tx

RxTx之间数据发送的流程如下。

tx

由于当前DynamicPayload 不使能,即数据长度固定,因此要求Tx端的发送缓冲区长度RF_TX_BUF_SIZE与Rx端的发送缓冲区长度RxBufLen相等,如果不一致,Rx端将无法正确接收到Tx端发送的数据。

4.4 增强工作模式, AckPayload使能(RF_APL_ENABLE), DynamicPayload使能(RF_DPL_ENABLE)

Tx端定义

//Tx
#define RF_TX_BUF_SIZE 31 

Rx端定义

//Rx
#define RF_RX_BUF_SIZE 32 

与上一节内容对比,当DynamicPayload 使能时,允许Tx端的发送缓冲区长度RF_TX_BUF_SIZE小于Rx端的接收缓冲区长度RF_RX_BUF_SIZE

可以看到Rx端正确接收到了长度为31字节的数据。

tx

rx

5 开发说明

设备的物理层以及用户层配置存放在结构体RF_BasisConfig中,如需修改配置,直接对该结构体修改即可。

xdata RF_Config_t RF_BasisCfg = 
{
    {33, RF_DR_1Mbps, RF_CRC_2BYTE, RF_TXPWR_10dBm},
    {RF_CHIPMODE_XN297, RF_WORKMODE_ENHANCE, RF_APL_ENABLE,  RF_DPL_ENABLE,  sizeof(RfTxBuf), RfTxBuf, sizeof(RfRxBuf), RfRxBuf, sizeof(RfAddr),  RfAddr}
};

使用配置进行初始化

RF_BasisInit(&RF_BasisCfg);

rf_basis.c可以找到读写相关函数的定义。

u8 RF_BasisRead(u8 *pBuf, u8 BufLen, u32 Timeout);
bool RF_BasisWrite(u8 *pBuf, u8 BufLen);

回调函数被注册到全局配置中,在读取Ack之后和发送Ack之前将调用用户回调函数,可用于对Ack内容的修改。

void Rf_readAckPkg_CB(void);
void Rf_writeAckPkg_CB(void);

6 RAM/Flash资源使用情况

Program Size: data=51.1 xdata=114 const=111 code=7823