Support us and view this ad

可选:点击以支持我们的网站

免费文章

在蓝牙低功耗(BLE)生态系统中,广播一直是连接建立和数据分发的基础。然而,传统的广播模式(如ADV_IND、ADV_NONCONN_IND)存在显著的时延与信道利用率瓶颈,尤其是在需要低时延、高可靠性的工业控制、资产追踪和实时传感器网络场景中。BLE 5.4引入的PAwR(Periodic Advertising with Responses)协议,通过引入响应窗口机制,从根本上改变了广播的单向性,实现了类似“广播+确认”的准双向通信。本文将深入解析PAwR的底层寄存器配置、响应时序以及实现低时延广播的关键算法。 1. 核心原理:PAwR协议解析与状态机 PAwR并非简单的扩展广播,它定义了一个严格的主从时序结构。主设备(Broadcaster)在周期性广播事件(PAE)中发送AUX_SYNC_IND PDU,随后开启一个可配置的响应窗口(Response Slot)。从设备(Scanner/Responder)在接收到该广播后,可以在指定的响应时隙内发送AUX_CHAIN_IND或AUX_SYNC_IND PDU作为响应。 数据包结构上,PAwR的核心在于AUX_SYNC_IND PDU中的SyncInfo字段,它包含了关键的时序参数: Offset:从当前PAE结束到第一个响应时隙开始的微秒偏移。 Interval:每个响应时隙的长度(以1.25ms为单位)。 Slots:响应窗口内包含的时隙总数。 Access Address:用于响应的数据信道访问地址。 状态机可简化为以下关键步骤: 状态机描述: IDLE -> START_PAE: 主机配置LL_PERIODIC_ADV_ENABLE_CMD START_PAE -> ADV_EVENT: 发送AUX_SYNC_IND,包含SyncInfo ADV_EVENT -> RESPONSE_WINDOW: 进入接收状态,等待响应 RESPONSE_WINDOW -> TIMEOUT/ADV_EVENT: 超时或收到响应后,进入下一个PAE周期 时序图(文字描述):假设PAE间隔为100ms,响应窗口Offset为2ms,Interval为1.25ms,Slots为4。主设备在t0发送广播包,t0+2ms开始第一个1.25ms的响应时隙,依次持续4个时隙,总窗口长度为5ms。从设备需在指定的时隙(如时隙2)精确地发送响应包,否则主设备将忽略。 2. 实现过程:基于Zephyr RTOS的PAwR初始化与响应处理 以下代码展示了在Nordic nRF52840平台上,使用Zephyr RTOS的HCI驱动层配置PAwR广播并处理响应。核心在于配置le_periodic_adv_params和le_periodic_adv_response_slots。 #include <zephyr/bluetooth/bluetooth.h> #include <zephyr/bluetooth/hci.h> #include <zephyr/bluetooth/hci_vs.h> /* 定义PAwR参数 */ #define PAWR_INTERVAL_MS 100 #define PAWR_SLOT_INTERVAL_US 1250 #define PAWR_NUM_SLOTS 4 #define PAWR_RESPONSE_OFFSET_US 2000 static struct bt_le_ext_adv *adv; static struct bt_le_periodic_adv_params padv_params; static struct bt_le_periodic_adv_response_slots resp_slots; /* 初始化PAwR广播集 */ void pawr_init(void) { int err; struct bt_le_adv_param adv_param = BT_LE_ADV_PARAM_INIT( BT_LE_ADV_OPT_EXT_ADV | BT_LE_ADV_OPT_USE_IDENTITY, BT_GAP_ADV_FAST_INT_MIN_2, BT_GAP_ADV_FAST_INT_MAX_2, NULL); /* 1. 创建扩展广播集 */ err = bt_le_ext_adv_create(&adv_param, NULL, &adv); __ASSERT(err == 0, "Failed to create ext adv (err %d)", err); /* 2....

继续阅读完整内容

支持我们的网站,请点击查看下方广告

正在加载广告...

登陆