PRF 2.4G BLE Trx¶
1 功能概述¶
本例程演示 PAN271 在 BLE 模式下的基础收发流程,对应两个独立工程:
07_ble_tx:按 BLE 广播方式发送广播包
08_ble_rx:按 BLE 模式接收广播包,并打印 Payload 与 RSSI
当前示例的实际行为是:
Tx 端依次在 CH37、CH38、CH39 三个广播信道发送同一份广播数据
Rx 端默认只固定监听 CH37,因此能收到 CH37 上的广播包
2 例程位置与工程文件¶
发送例程目录:
\01_SDK\samples\proprietary_rf\07_ble_tx 接收例程目录:
\01_SDK\samples\proprietary_rf\08_ble_rx 发送 Keil 工程:07_ble_tx\keil\ble_tx.uvprojx
接收 Keil 工程:08_ble_rx\keil\ble_rx.uvprojx
发送主代码:07_ble_tx\src\main.c
接收主代码:08_ble_rx\src\main.c
3 环境准备¶
3.2 硬件接线¶
每套板按以下方式连接:
将核心板插到底板上
串口连接:
PC 通过 USB-TypeC 连接到底板 USB 转串口口
按例程默认 UART0 引脚连接跳线
例程中 UART0 复用为:P0.5 = TX,P0.6 = RX
JLink SWD 连接:
SWD_CLK -> P00
SWD_DAT -> P01
GND -> GND
3.3 PC 软件¶
串口工具:UartAssist、SecureCRT、MobaXterm 等
串口参数:115200, 8N1
4 编译与烧录(Keil)¶
4.1 烧录发送端¶
打开 07_ble_tx\keil\ble_tx.uvprojx
选择目标工程 ble_tx
Build
Download
4.2 烧录接收端¶
打开 08_ble_rx\keil\ble_rx.uvprojx
选择目标工程 ble_rx
Build
Download
说明:工程下载配置依赖 SDK 自带 JFlash 与 settings.jflash,Keil 中执行 Download 会调用对应烧录流程。
5 使用方法(Tx/Rx 对测)¶
5.1 上电顺序¶
给 Tx 板和 Rx 板上电
分别打开两个串口终端
观察发送端与接收端日志
5.2 运行现象¶
Tx 端启动后循环广播
每轮依次发送:CH37 -> CH38 -> CH39
三个广播信道发完后延时 500 ms,再进入下一轮
Rx 端初始化后固定在 CH37 进入接收状态
收到广播包后打印长度、原始数据和 RSSI
5.3 当前示例的信道注意事项¶
当前 08_ble_rx 的 main.c 只执行了一次:
设置 Channel = BLE_CHANNEL_37
设置 WhiteInit = PAN271_BLE_WH_INIPHA_CH37
调用 PAN271_RF_TrxStart() 进入持续接收
因此当前 Rx 不会自动跟随 Tx 在 37/38/39 三个信道之间跳频。若需要完整监听三个广播信道,需要在接收端增加信道切换逻辑,并同步更新对应白化初始值。
6 关键配置说明(RFConfig_t)¶
发送端与接收端的 RFConfig_t 都位于各自的 src\main.c 中,关键配置如下。
6.1 通用 BLE 配置¶
ChipMode = PAN271_CHIPMODE_BLE:BLE 模式
DataRate = PAN271_DR_1Mbps:BLE 1M
WorkMode = PAN271_WORKMODE_NORMAL:普通工作模式
EnWhite = ENABLE:使能白化
EnDPL = ENABLE:使能动态长度
EnTxNoAck = ENABLE:广播场景下不等待 ACK
AddrWidth = PAN271_WIDTH_4BYTES:地址宽度 4 Bytes
TxLen = 19
RxLen = 19
6.2 BLE Header 配置¶
例程默认使用:
BLEHeadNum = BLE_LENGTH_HEADER0
BLEHead0 = 0x42
BLEHead1 = 0x00
其中:
Header0/Header1 用于构造 BLE 包头字段
发送与接收两端需要保持一致
6.3 白化与广播信道¶
Tx 端发送广播时,会针对不同广播信道设置不同白化初始值:
CH37 对应 PAN271_BLE_WH_INIPHA_CH37
CH38 对应 PAN271_BLE_WH_INIPHA_CH38
CH39 对应 PAN271_BLE_WH_INIPHA_CH39
广播信道与频点关系:
CH37 -> 2402 MHz
CH38 -> 2426 MHz
CH39 -> 2480 MHz
Rx 端若切换信道,也必须同步切换对应的白化初始值,否则容易出现 crc、pid 或长度错误。
6.4 地址与白名单配置¶
例程中广播地址内容放在广播包前 6 字节:
AdvA = CC CC CC CC CC CC
配置里同时还设置了:
RxAddr[0] = D6 BE 89 8E 00
WhiteList = CC CC CC CC CC CC
WhiteListOffset = 0
WhiteListMatchMode = PAN271_BLE_WhiteList_4Byte
使用本示例时,建议至少保持以下内容一致:
广播包前 6 字节地址内容
接收端白名单相关配置
BLE Header 配置
TxLen / RxLen
7 广播包内容说明¶
发送端 main.c 中定义了 19 字节广播数据 BleTxPacket:
CC CC CC CC CC CC 06 09 50 41 4E 54 48 05 FF 58 58 AA BB
字段含义如下:
广播地址 AdvA,6 字节
CC CC CC CC CC CC
AD Structure 1,7 字节
06:后续长度为 6
09:Complete Local Name
50 41 4E 54 48:字符串 PANTH
AD Structure 2,6 字节
05:后续长度为 5
FF:Manufacturer Specific Data
58 58:厂商标识
AA BB:自定义数据
在 BLE 扫描工具中,可将其理解为一个包含设备名和厂商自定义数据的广播包。
8 软件流程说明¶
8.1 发送端流程¶
07_ble_tx 的主流程如下:
时钟初始化与串口初始化
调用 PAN271_RF_Init(&gRfConfig) 初始化 BLE 射频参数
进入 while(1)
依次调用 BLE_Broadcast() 在 CH37、CH38、CH39 发送广播包
每次发送前设置当前信道与对应白化初始值
将 BleTxPacket 写入 TX FIFO
调用 PAN271_RF_TrxStart() 触发发送
等待发送完成中断置位 BleTxDownFlag
三个信道发送结束后延时 500 ms
8.2 接收端流程¶
08_ble_rx 的主流程如下:
时钟初始化与串口初始化
调用 PAN271_RF_Init(&gRfConfig) 初始化 BLE 射频参数
设置接收信道为 CH37
设置对应白化初始值为 PAN271_BLE_WH_INIPHA_CH37
调用 PAN271_RF_TrxStart() 进入接收状态
在中断回调中读取接收数据、打印 Payload 与 RSSI
9 串口输出示例¶
9.1 Tx 端¶
典型输出类似:
CPU @ 48000000Hz
BLE TX Start...
tx done, count: 1
BLE Broadcast on Channel 37 done.
WhitenInitVal: 53
tx done, count: 2
BLE Broadcast on Channel 38 done.
WhitenInitVal: 33
tx done, count: 3
BLE Broadcast on Channel 39 done.
WhitenInitVal: 73
9.2 Rx 端¶
当接收到 CH37 上的广播包时,典型输出类似:
CPU @ 48000000Hz
rx len:19
CC CC CC CC CC CC 06 09 50 41 4E 54 48 05 FF 58 58 AA BB
rssi:-45 dBm
若配置不一致或信道不匹配,可能出现:
crc
pid err
len err
acc addr err