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端。
用Type-C数据线供电
用跳线帽连接电源跳线P9。
将电源切换开关S1切换至“USB”端。
使用串口模块连接到UART调试引脚P8。
分别打开
tx
和rx
工程,编译后下载到两个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].