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

02_enhance 增强型发射例程

1. 简介

本例程演示PAN211x增强(双向)通信功能.

TX首先发射数据,然后芯片自动切换至接收状态,等待接收ACK数据包。RX首先处于接收,收到数据后会自动切换到发射状态,发射ACK数据包。Tx发射之后收到ACK数据包可视为增强型模式的一次通信成功。

增强模式的优势在于做双向通信时切换的时间比手动快,同样,因为芯片是自动切换发射/接收状态,一定要了解增强模式下的时序切换。

2. 应用代码说明

2.1. 增强型参数说明与中断处理

通过与普通型例程的对比,可以看到增强型的配置方式与普通型的配置方式有所不同。

WorkMode 设置为增强型(必选)

TxMode设置为单次发射模式(必选)

RxMode设置为单次接收模式(必选)

Tx端:

TRxDelayTimeUs 设置为0,目的是为了在发射数据之后尽快切换到接收状态,在发射完成后将触发TX_IRQ中断。

RxTimeoutUs 设置为32000,目的是为了切换到接收数据之后等待一段时间,如果没有接收到ACK数据包,自动开始重新发射数据包。如果收到了ACK数据包则触发RX_IRQ中断。

AutoMaxCnt设置为3,AutoDelayUs设置为250,目的是为了在接收超时之后,自动重新发射数据包,最多重发3次,每次超时之后等待250us再进入发射状态,如果重发次数超过3次则触发MAX_RT_IRQ中断。

Rx端:

TRxDelayTimeUs 设置为16000,目的是为了在接收数据之后延时一段时间切换到发射状态,主要是给用户端足够的时间向FIFO写入ACK数据包的内容,另一方面也给Tx端足够的时间切换到接收状态。

更多参数的说明请见《PAN211x FIFO和帧格式使用指南》

2.2. 增强型的动态负载(Dynamic Payload)功能

与普通型不同的是,增强型可以开启EnDPL功能。此通常用于发射端需要发送不同长度数据包的场景。

发送端的数据长度将填入增强型帧格式中的长度字段。

接收端自动解析增强型帧格式的长度字段,用户通过读取对应的寄存器获取数据包长度。

相关代码如下:

u8 RecvLen = PAN211_GetRecvLen();
printf("+RecvLen=%d\n", RecvLen);
if(RecvLen > 0)
{
    PAN211_ReadFifo(TRX_FIFO, RxBuf, RecvLen);
}

当关闭动态数据包长度设置时,使用固定长度接收数据,数据包长度由RxLen决定。

2.3. TxNoAck功能

与普通型不同的是,增强型可以开启TxNoAck功能。启用无应答发送设置后,增强型帧格式中的TxNoAck字段将置1,这要求接收端不发送应答包,发射端也不会自动重传。

2.4. RSSI功能

普通型和增强型都可以开启RSSI功能,在收到包之后,可以通过读取RSSI寄存器获取收到包的信号强度。

3. 例程演示

例程位置:

01_SDK/example/02_enhance

修改参数:

pan211_.h中的EASY_RF宏定义为0时,可通过修改gRfConfig结构体来配置参数。

pan211_.h中的EASY_RF宏定义为1时,可使用配置导出工具替换对应工程的./src/easy_reg.h文件来配置参数。

使用步骤:

找到两块PAN211x开发板,分别作为Tx端和Rx端。

  1. 用Type-C数据线供电

  2. 用跳线帽连接电源跳线P9。

  3. 将电源切换开关S1切换至“USB”端。

  4. 使用串口模块连接到UART调试引脚P8。

  5. 分别打开txrx工程,编译后下载到两个PAN211x开发板上。

TX端:

CPU @ 64000000Hz
SPI-3LINE
>>>RF_IT_TX_IRQ[0x80].1
+RecvLen=32
<<<RF_IT_RX_IRQ[0x01].
RSSI=-20dBm
>>>RF_IT_TX_IRQ[0x80].2
+RecvLen=32
<<<RF_IT_RX_IRQ[0x01].
RSSI=-20dBm
>>>RF_IT_TX_IRQ[0x80].3
+RecvLen=32
<<<RF_IT_RX_IRQ[0x01].
RSSI=-19dBm

RX端:

CPU @ 64000000Hz
SPI-3LINE
+RecvLen = 32, cnt = 1
+RF_RXMODE=00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 
RSSI=-20dBm
>>>RF_IT_TX_IRQ[0x80].
+RecvLen = 32, cnt = 2
+RF_RXMODE=00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 
RSSI=-21dBm
>>>RF_IT_TX_IRQ[0x80].
+RecvLen = 32, cnt = 3
+RF_RXMODE=00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 
RSSI=-21dBm
>>>RF_IT_TX_IRQ[0x80].