ZHDU116G January 2018 – June 2024 CC1312PSIP , CC1312R , CC1352P , CC1352R , CC2642R , CC2642R-Q1 , CC2652P , CC2652PSIP , CC2652R , CC2652RB , CC2652RSIP , CC2662R-Q1
如果在主广播通道上以 1Mbps PHY 运行 CMD_BLE_SCANNER 或 CMD_BLE5_SCANNER,则会接受传统广播数据包(ADV_IND、ADV_NONCONN_IND、ADV_SCAN_IND 和 ADV_DIRECT_IND)。操作描述如下:
| 过滤策略 | RPA 模式 | AdvA 为 RPA | AdvA 匹配 bWlIgn = 1 的白名单条目 | AdvA 匹配 bEnable = 1 的白名单条目 | AdvA 过滤结果 | 如果 bAutoWlIgnore = 1,则执行自动忽略 |
|---|---|---|---|---|---|---|
| 1 | X | X | 否 | 否 | 拒绝 | 否 |
| 1 | X | X | 否 | 是 | 接受 | 是 |
| 1 | X | X | 是 | X | 拒绝 | 否 |
| 0 | 0 | X | 否 | X | 接受 | 否 |
| 0 | 0 | X | 是 | X | 拒绝 | 否 |
| 0 | 1 | 否 | 否 | X | 接受 | 否 |
| 0 | 1 | 否 | 是 | X | 拒绝 | 否 |
| 0 | 1 | 是 | 否 | 否 | 拒绝 | 否 |
| 0 | 1 | 是 | 否 | 是 | 接受 | 是 |
| 0 | 1 | 是 | 是 | X | 拒绝 | 否 |
| RPA 过滤策略 | TargetA 为 RPA | TargetA 等于器件地址 | TargetA 匹配 |
|---|---|---|---|
| 0 | X | 否 | 否 |
| 0 | X | 是 | 是 |
| 1 | 否 | 否 | 否 |
| 1 | 否 | 是 | 是 |
| 1 | 是 | X | 是 |
| PDU 类型 | CRC 结果 | AdvA 过滤结果 | TargetA 匹配 | 活动扫描 | 操作编号 |
|---|---|---|---|---|---|
| ADV_IND | OK | 拒绝 | 不适用 | X | 1 |
| ADV_IND | OK | 接受 | 不适用 | 否 | 2 |
| ADV_IND | OK | 接受 | 不适用 | 是 | 3 |
| ADV_IND | NOK | X | 不适用 | X | 4 |
| ADV_SCAN_IND | OK | 拒绝 | 不适用 | X | 1 |
| ADV_SCAN_IND | OK | 接受 | 不适用 | 否 | 2 |
| ADV_SCAN_IND | OK | 接受 | 不适用 | 是 | 3 |
| ADV_SCAN_IND | NOK | X | 不适用 | X | 4 |
| ADV_NONCONN_IND | OK | 拒绝 | 不适用 | X | 1 |
| ADV_NONCONN_IND | OK | 接受 | 不适用 | X | 2 |
| ADV_NONCONN_IND | NOK | X | 不适用 | X | 4 |
| ADV_DIRECT_IND | OK | 拒绝 | X | X | 1 |
| ADV_DIRECT_IND | OK | 接受 | 否 | X | 1 |
| ADV_DIRECT_IND | OK | 接受 | 是 | X | 2 |
| ADV_DIRECT_IND | NOK | X | X | X | 4 |
| ADV*_IND 长度无效 | X | X | X | X | 5 |
| 其他(另请参阅节 26.8.10.2) | X | X | 不适用 | X | 5 |
| 操作编号 | bCrcErr | bIgnore | 说明 |
|---|---|---|---|
| 1 | 0 | 1 | 继续扫描 |
| 2 | 0 | 0 | 继续扫描或以 BLE_DONE_OK 状态结束操作 |
| 3 | 0 | 0 | 执行退避流程,在适用时发送 SCAN_REQ 并接收 SCAN_RSP。然后继续扫描或结束操作 |
| 4 | 1 | 0 | 继续扫描 |
| 5 | — | — | 停止接收数据包,然后继续扫描 |
如果正在接收的数据包无法放入 RX 队列,则该数据包应被接收到末尾,但收到的字节不会存储。如果该数据包通常不会从 RX 缓冲区中丢弃,操作应结束。
如果从收到的数据包得到的操作是 3,则在退避流程允许的情况下,应发送 SCAN_REQ 消息。此过程从递减 pParams->backoffCount 开始。如果该变量在递减后变为 0,则应发送 SCAN_REQ 消息。否则,操作应结束。
如果从收到的数据包得到的操作是 2 或 3,则下一步操作可能是继续扫描或结束操作。这通过 pParams->scanConfig.bEndOnRpt 配置;如果为 1,操作应结束,否则应继续扫描。
发送 SCAN_REQ 消息时,无线电 CPU 应构建此数据包。在标头中,PDU 类型位应为 0011b。TxAdd 位应如 pParams->scanConfig.deviceAddrType 中所设(如果 pParams->pDeviceAddress 的最低有效位为 1,则 TxAdd 位取反,请参阅节 26.8.17)。RxAdd 位应与收到的 ADV_IND 或 ADV_SCAN_IND 消息标头中的 TxAdd 字段相同。长度应根据扫描请求数据的大小计算,即应为 pParams->scanReqLen + 12。ChSel 和 RFU 位应为 0。有效载荷应以 6 字节的器件地址开始,该地址从 pParams->pDeviceAddress 中读取,其后是从收到的消息的 AdvA 字段读取的 6 字节对端地址。根据低功耗 Bluetooth 规范,不应再有更多有效载荷,但在使用 CMD_BLE_SCANNER 命令时,可通过将 pParams->scanReqLen 设置为非零值来构建不合规的消息。如果是这样,有效载荷的其余部分应从 pParams->pScanData 缓冲区读取。
SCAN_REQ 消息发送后,无线电 CPU 应配置接收器并查找来自 SCAN_REQ 所发向的广播器的 SCAN_RSP。如果解调器获得同步,一旦接收到标头就应进行检查,如果不是 SCAN_RSP 消息,应立即停止解调器。如果是 SCAN_RSP 消息,则应将其接收到 RX 队列中。根据收到的 SCAN_RSP 消息,bCrcErr 和 bIgnore 的值应如表 26-148 中所示。如果 pParams->scanConfig.bStrictLenFilter 为 1,则只有符合蓝牙低耗能规范的长度字段才被视为有效。对于 SCAN_RSP,这意味着长度字段在 6 到 37 之间。如果 pParams->scanConfig.bStrictLenFilter 为 0,则收到的所有长度字段小于或等于广播器数据包最大长度的数据包均被视为有效。如果长度无效,则应停止接收器。
| PDU 类型 | CRC 结果 | AdvA 与请求中相同 | bCrcErr | bIgnore | 响应数据包结果 |
|---|---|---|---|---|---|
| SCAN_RSP | OK | 否 | 0 | 1 | 失败 |
| SCAN_RSP | OK | 是 | 0 | 0 | 成功 |
| SCAN_RSP | NOK | X | 1 | 0 | 失败 |
| SCAN_RSP 长度无效 | X | X | — | — | 失败 |
| 其他 | X | 不适用 | — | — | 失败 |
| 未收到数据包 | 不适用 | 不适用 | — | — | 失败 |
接收或尝试接收 SCAN_RSP 后,无线电 CPU 应根据节 26.8.15中所述,基于表 26-148 的响应数据包结果列中给出的结果以及退避参数的旧值来更新退避参数。
如果 pParams->scanConfig.bAutoWlIgnore 为 1,则会启用自动忽略功能。在表 26-154 最右列所述的情况下,无线电 CPU 应自动设置白名单条目的 bWlIgn 位,该条目对应于接收 ADV*_IND 消息的源地址。此操作应在执行操作 2 之后,或在执行操作 3 后收到 SCAN_RSP 且结果为 Success 之后完成。此功能可用于避免报告来自同一器件的多条广播消息,并避免重复扫描同一器件。