当前页面为 开发中 版本,查看特定版本的文档,请在页面左下角的下拉菜单中进行选择。

PRF 2.4G Long Range Trx

1 功能概述

本例程演示 PAN271 在 Long Range 模式下的基础 Tx/Rx 通信流程:

  • Tx 端周期性发送固定长度 Payload

  • Rx 端持续接收并打印 Payload,同时输出 RSSI

与普通模式示例不同,本例程采用:

  • BLE 芯片模式:PAN271_CHIPMODE_BLE

  • Long Range 数据速率:PAN271_DR_1M_S2

  • 帧格式中不嵌入Header

  • 4 Bytes 地址宽度

适合用于验证 PAN271 的BLE模式长距离编码收发能力。

2 例程位置与工程文件

  • 发送例程目录:\01_SDK\samples\proprietary_rf\09_longrange_tx

  • 接收例程目录:\01_SDK\samples\proprietary_rf\10_longrange_rx

  • 发送 Keil 工程:09_longrange_tx\keil\longrange_tx.uvprojx

  • 接收 Keil 工程:10_longrange_rx\keil\longrange_rx.uvprojx

  • 发送主代码:09_longrange_tx\src\main.c

  • 接收主代码:10_longrange_rx\src\main.c

3 环境准备

3.1 硬件设备

建议准备两套硬件做对测:

  • PAN271x EVB 核心板与底板各 2 套

  • JLink 仿真器

  • USB-TypeC 线

  • 杜邦线或跳线帽

3.2 硬件接线

每套板按以下方式连接:

  1. 将核心板插到底板上

  2. 串口连接:

    • PC 通过 USB-TypeC 连接到底板 USB 转串口口

    • 按例程默认 UART0 引脚连接跳线

    • 例程中 UART0 复用为:P0.5 = TX,P0.6 = RX

  3. JLink SWD 连接:

    • SWD_CLK -> P00

    • SWD_DAT -> P01

    • GND -> GND

3.3 PC 软件

  • 串口工具:UartAssist、SecureCRT、MobaXterm 等

  • 串口参数:115200, 8N1

4 编译与烧录(Keil)

4.1 烧录发送端

  1. 打开 09_longrange_tx\keil\longrange_tx.uvprojx

  2. 选择目标工程 longrange_tx

  3. Build

  4. Download

4.2 烧录接收端

  1. 打开 10_longrange_rx\keil\longrange_rx.uvprojx

  2. 选择目标工程 longrange_rx

  3. Build

  4. Download

说明:工程下载配置使用 SDK 自带 JFlash 与 settings.jflash,Keil 中执行 Download 时会调用对应的烧录流程。

5 使用方法(Tx/Rx 对测)

5.1 上电运行

  1. 给 Tx 板和 Rx 板上电

  2. 分别打开两个串口终端

  3. 观察发送端与接收端日志

5.2 运行现象

  • Tx 端初始化完成后,循环发送 37 字节 Payload

  • 每次发送前先更新 TxBuf[0],因此首字节会持续递增

  • 发送周期约为 500 ms

  • Rx 端初始化完成后立即进入接收状态

  • 每收到一包,就打印长度、数据内容和 RSSI

注意:Tx 与 Rx 的射频参数必须完全一致,否则可能出现 crc、pid err 或 len err。

6 关键配置说明(RFConfig_t)

发送端和接收端的 RFConfig_t 都定义在各自的 src\main.c 中,关键配置如下:

  • trx_mode

    • Tx 工程:PAN271_TX_MODE

    • Rx 工程:PAN271_RX_MODE

  • Channel = 2:工作信道,Tx/Rx 必须一致

  • TxPower = PAN271_TXPWR_11dBm:发射功率

  • ChipMode = PAN271_CHIPMODE_BLE:BLE 模式

  • DataRate = PAN271_DR_1M_S2:Long Range S2 编码速率

  • WorkMode = PAN271_WORKMODE_NORMAL:普通工作模式

  • EnWhite = ENABLE:使能白化

  • EnDPL = ENABLE:使能动态包长

  • EnTxNoAck = ENABLE:不等待 ACK

  • AddrWidth = PAN271_WIDTH_4BYTES:地址宽度 4 Bytes

  • TxAddr / RxAddr[0] = 29 41 76 71 00:收发地址必须一致

  • BLEHeadNum = BLE_LENGTH_ONLY:仅使用长度字段,不使用Header字段

  • BLEHead0 = 0

  • BLEHead1 = 0

  • WhiteInit = PAN271_BLE_WH_INIPHA_CH37:白化初始值

  • WhiteListMatchMode = PAN271_BLE_WhiteList_DISABLE:关闭白名单匹配

  • LengthFilterMode = PAN271_BLE_LEN_FILTER_DISABLE:关闭长度过滤

  • TxLen = 37

  • RxLen = 37

  • RxTimeoutUs = 0:不启用接收超时

其中最关键的匹配项为:

  • Channel

  • DataRate

  • AddrWidth

  • TxAddr / RxAddr[0]

  • BLEHeadNum / BLEHead0 / BLEHead1

  • WhiteInit

  • TxLen / RxLen

7 Payload 内容说明

发送端启动后会先调用 FillSequentialData(TxBuf, sizeof(TxBuf)),将发送缓存填充为递增数据:

00 01 02 03 04 05 ...

在主循环中,每次发送前执行:

TxBuf[0]++;

因此实际发送的 37 字节数据具有以下特点:

  • 第 0 字节每次发送都会加 1

  • 第 1 到第 36 字节保持为初始化后的顺序数据

例如第一次接收时,可能看到类似内容:

01 01 02 03 04 05 06 07 ... 24

后续每发一包,第一个字节会继续递增。

8 软件流程说明

8.1 发送端流程

09_longrange_tx 的主流程如下:

  1. 时钟初始化与串口初始化

  2. 调用 PAN271_RF_Init(&gRfConfig) 完成 Long Range 射频初始化

  3. 调用 FillSequentialData() 填充发送缓存

  4. 进入 while(1)

  5. 将 TxBuf[0] 加 1

  6. 调用 PAN271_RF_SetTxData(TxBuf, gRfConfig.TxLen) 写入发送数据

  7. 调用 PAN271_RF_TrxStart() 启动发送

  8. 延时 500 ms 后进入下一轮发送

8.2 接收端流程

10_longrange_rx 的主流程如下:

  1. 时钟初始化与串口初始化

  2. 调用 PAN271_RF_Init(&gRfConfig) 完成 Long Range 射频初始化

  3. 调用 PAN271_RF_TrxStart() 进入接收状态

  4. 在中断回调中读取接收数据、打印 Payload 与 RSSI

9 串口输出示例

9.1 Tx 端

典型输出类似:

CPU @ 48000000Hz
tx done, count: 1
tx done, count: 2
tx done, count: 3

9.2 Rx 端

典型输出类似:

CPU @ 48000000Hz
rx len:37
01 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 20 21 22 23 24
rssi:-45 dBm

实际 RSSI 和数据首字节会随环境与发送次数变化。

若配置不一致或链路异常,可能出现:

crc
pid err
len err
acc addr err