ZHDU116G January 2018 – June 2024 CC1312PSIP , CC1312R , CC1352P , CC1352R , CC2642R , CC2642R-Q1 , CC2652P , CC2652PSIP , CC2652R , CC2652RB , CC2652RSIP , CC2662R-Q1
在任何类型的广播器操作开始时,无线电 CPU 会等待启动触发条件,然后根据命令结构的通道参数设置频率。通道参数不允许在 0–36 范围内,因为该范围为数据通道。无线电 CPU 设置广播通道访问地址,并使用 CRC 初始化值 0x55 5555。按照白化参数中的定义设置白化器。然后,无线电 CPU 配置发送器。除了不可连接的广播器外,该操作在发送后会继续进入接收状态,并且如果收到 SCAN_REQ,可能会再发送一次 SCAN_RSP。
在低功耗 Bluetooth 模式下,广播通常在所有三个广播通道上进行。为实现此目的,可以使用 pNextOp 参数将三个命令结构链接起来。通常,所有通道的参数和输出结构可以相同。
发送的第一个数据包始终是 ADV*_IND 数据包。该数据包包含标头、广播器地址和广播数据(定向广播中使用的 ADV_DIRECT_IND 数据包除外)。无线电 CPU 按如下方式构造这些数据包(ADV_DIRECT_IND 数据包如节 26.8.8.2所述)。
| 命令 | 广播数据包类型 | 标头中 PDU 类型位的值 |
|---|---|---|
| CMD_BLE_ADV | ADV_IND | 0000b |
| CMD_BLE_ADV_DIR | ADV_DIRECT_IND | 0001b |
| CMD_BLE_ADV_NC | ADV_NONCONN_IND | 0010b |
| CMD_BLE_ADV_SCAN | ADV_SCAN_IND | 0110b |
除不可连接的广播器外,在发送完 ADV*_IND 数据包后,接收器应启动。根据广播器操作的类型,接收器应侦听 SCAN_REQ 和(或)CONNECT_IND(在相关文档所列的 Bluetooth 4.0、4.1 和 4.2 规范中称为 CONNECT_REQ)。如果解调器获得同步,应在收到标头时对其进行检查,如果它不是 SCAN_REQ 或 CONNECT_IND 消息,则应立即停止解调器。
SCAN_REQ 或 CONNECT_IND 消息接收到 pParams->pRxQ 给出的 RX 队列中,如节 26.10.4.1 所述。bCrcErr 和 bIgnore 位根据 CRC 结果和收到的消息进行设置。消息中的 AdvA 字段和收到的标头的 TxAdd 位会分别与 pParams->pDeviceAddress 数组和 pParams->advConfig.deviceAddrType 进行比较,以确定该消息是否发往此广播器。然后,根据 pParams->advConfig.advFilterPolicy 给出的广播过滤策略,将收到的 ScanA 或 InitA 字段以及收到的标头的 RxAdd 位与白名单(请参阅节 26.8.14)进行核对,但对于定向广播器,将收到的标头与对端地址进行比较(请参阅节 26.8.8.2)。如果(由 pParams->advConfig.rpaMode 给出的)可解析私有地址 (RPA) 模式为非零值,则会执行额外检查,以确定对端地址是否为可解析私有地址。如果收到的 TxAdd 为 1,且收到的 ScanA 或 InitA 字段的两个最高有效位为 01b,则该地址为 RPA。如果是这样,无论过滤策略如何,都会执行白名单核对。根据收到的数据包,应采取的操作如表 26-133 所述,其中每个操作的定义(包括将在 bCrcErr 和 bIgnore 上使用的值)在表 26-134 中给出。如果 pParams->advConfig.bStrictLenFilter 为 1,则只有符合蓝牙低耗能规范的长度字段才被视为有效。对于 SCAN_REQ,这意味着长度字段为 12;对于 CONNECT_IND,这意味着长度字段为 34。如果 pParams->advConfig.bStrictLenFilter 为 0,则收到的所有长度字段小于或等于广播器数据包最大长度的数据包均被视为有效。如果长度无效,则应停止接收器。
| PDU 类型 | CRC 结果 | 高级类型 | 有效长度 | AdvA 匹配自己的地址 | 过滤策略 | RPA 模式 | 可解析私有地址 | 白名单中存在 ScanA 或 InitA | 操作编号 |
|---|---|---|---|---|---|---|---|---|---|
| SCAN_REQ | OK | C、S | 是 | 否 | X | X | X | X | 1 |
| SCAN_REQ | OK | C、S | 是 | 是 | 1 或 3 | X | X | 否 | 1 |
| SCAN_REQ | OK | C、S | 是 | 是 | 1 或 3 | X | X | 是 | 2 |
| SCAN_REQ | OK | C、S | 是 | 是 | 0 或 2 | 0 | X | X | 2 |
| SCAN_REQ | OK | C、S | 是 | 是 | 0 或 2 | 1 | 否 | X | 2 |
| SCAN_REQ | OK | C、S | 是 | 是 | 0 或 2 | 1 | 是 | 否 | 1 |
| SCAN_REQ | OK | C、S | 是 | 是 | 0 或 2 | 1 | 是 | 是 | 2 |
| SCAN_REQ | NOK | C、S | 是 | X | X | X | X | X | 3 |
| SCAN_REQ | X | C、S | 否 | X | X | X | X | X | 5 |
| SCAN_REQ | X | D | X | X | X | X | X | X | 5 |
| CONNECT_IND | OK | C、D | 是 | 否 | X | X | X | X | 1 |
| CONNECT_IND | OK | C、D | 是 | 是 | 2 或 3 | X | X | 否 | 1 |
| CONNECT_IND | OK | C、D | 是 | 是 | 2 或 3 | X | X | 是 | 4 |
| CONNECT_IND | OK | C、D | 是 | 是 | 0 或 1 | 0 | X | X | 4 |
| CONNECT_IND | OK | C、D | 是 | 是 | 0 或 1 | 1 | 否 | X | 4 |
| CONNECT_IND | OK | C、D | 是 | 是 | 0 或 1 | 1 | 是 | 否 | 1 |
| CONNECT_IND | OK | C、D | 是 | 是 | 0 或 1 | 1 | 是 | 是 | 4 |
| CONNECT_IND | NOK | C、D | 是 | X | X | X | X | X | 3 |
| CONNECT_IND | X | C、D | 否 | X | X | X | X | X | 5 |
| CONNECT_IND | X | S | X | X | X | X | X | X | 5 |
| 其他 | X | X | X | 不适用 | X | X | 不适用 | 不适用 | 5 |
| 未收到数据包 | 不适用 | X | 不适用 | 不适用 | X | X | 不适用 | 不适用 | 5 |
| 操作编号 | bCrcErr | bIgnore | 说明 |
|---|---|---|---|
| 1 | 0 | 1 | 以 BLE_DONE_OK 状态结束操作 |
| 2 | 0 | 0 | 发送 SCAN_RSP 消息 |
| 3 | 1 | 0 | 以 BLE_DONE_RXERR 状态结束操作 |
| 4 | 0 | 0 | 以 BLE_DONE_CONNECT 或 BLE_DONE_CONNECT_CHSEL0 状态结束操作 |
| 5 | — | — | 立即停止接收器,并以 BLE_DONE_NOSYNC 状态结束操作 |
如果接收到长度为 12(或更短)的 SCAN_REQ 数据包,应将其视为空数据包。这意味着,如果 pParams->rxConfig.bAutoflushEmpty 为 1,且 bCrcErr 和 bIgnore 均为 0,则该数据包会从 RX 缓冲区中移除。如果数据包具有 bIgnore 或 bCrcErr 标记,也可根据 pParams->rxConfig 中的位将其移除。
如果正在接收的数据包无法放入 RX 队列,则该数据包会被接收到末尾,但收到的字节不会存储。如果根据 pParams->rxConfig 中的位,该数据包通常不会从 RX 队列中丢弃,则命令应结束。
如果正确接收到 CONNECT_IND 数据包(请参阅表 26-134中的操作 4)且 pParams->advConfig.chSel 为 1,则检查收到的标头的 ChSel 位。如果该位为 0(表示对端不支持通道选择算法 2),则状态设置为 BLE_DONE_CONNECT_CHSEL0 而非 BLE_DONE_CONNECT。。
如果(根据表 26-133 和表 26-134)下一个操作是发送 SCAN_RSP 数据包,无线电 CPU 应启动发送器来发送该数据包。该数据包由标头、广播器地址和广播数据组成。
无线电 CPU 应按如下方式构建这些数据包:
结束操作的触发条件由 pParams->endTrigger 设置。如果发生该参数定义的触发条件,无线电操作应继续直至完成,但结束后的状态码应为 BLE_DONE_ENDED,结果应为 FALSE。可使用该触发条件来停止执行,而不利用命令结构中的条件继续执行链中的下一个操作。如果无线电 CPU 收到即时命令 CMD_STOP,其含义与发生结束触发条件时相同(但结束后的状态代码应为 CMD_DONE_STOPPED)。
输出结构 pOutput 包含的字段提供有关正在运行的命令的信息。无线电 CPU 不会初始化这些字段,因此当需要复位计数器时,必须由系统 CPU 完成此操作。无线电 CPU 将按照下方列表所述更新这些字段。该列表还指明了何时应在系统 CPU 中引发中断。