这部分是HCI 章节第 3 节Overview of commands and events它不是在讲某一个具体命令而是在讲HCI Command 和 HCI Event 的总览表怎么看、Controller 对命令/事件的支持要求怎么看以及一些特殊规则。可以把这一节理解成 HCI 命令和事件的“目录说明 支持规则说明”。1. 这部分整体想表达什么HCI 的命令和事件是在Host 和 Controller 之间传递的。Host → ControllerHCI Command Controller → HostHCI Event Host ↔ ControllerHCI Data Packet第 3 节重点讲的是有哪些 HCI Command 有哪些 HCI Event 这些命令/事件从哪个蓝牙版本开始出现 这些命令/事件是 BR/EDR 用的还是 LE 用的 Controller 是否必须支持 支持条件是什么 legacy advertising 和 extended advertising 命令如何对应 底层功能支持和命令支持之间是什么关系所以这一节更像是一个HCI 命令/事件支持矩阵说明。2. Table 3.1 是什么Table 3.1 的名字是Alphabetical list of commands and events也就是按字母顺序排列的 HCI 命令和事件列表它会列出每一个 HCI Command 和 HCI Event并给出这些信息Name Vers. Summary Description BR/EDR LE截图中的表头如下Name | Vers. | Summary Description | BR/EDR | LE每一列的含义如下。2.1 Name命令或事件名称这一列是 HCI Command 或 HCI Event 的名称。例如Accept Connection Request command Authentication Complete event Authentication Requested command HCI_LE_Set_Advertising_Parameters command HCI_LE_Advertising_Report event如果是蓝色链接说明可以点击进去看这个命令或事件的详细定义。一般详细内容会包括Opcode Command Parameters Return Parameters Generated Events Description Error Codes所以 Table 3.1 本身只是总览表不是完整说明。真正要理解某个命令还是要点进去看命令详情或者去后面对应的详细章节看。2.2 Vers.第一次出现的规范版本Vers.表示这个命令或事件是从哪个蓝牙规范版本开始被定义的。例如截图中Accept Connection Request command 1.1 Authenticated Payload Timeout Expired event 4.1意思是Accept Connection Request command 从 Bluetooth 1.1 开始就有 Authenticated Payload Timeout Expired event 从 Bluetooth 4.1 开始出现如果一个命令或事件有多个版本可能会写成[v1] [v2]这表示同一个命令/事件在不同版本中有一些细节差异。注意版本不同不代表它们是完全不同的功能。规范里说得很清楚同一个命令或事件的不同版本实现的是相同的基础功能只是细节上可能有差异。例如参数变多 返回参数变多 描述细节变化 支持条件变化2.3 Summary Description简要说明这一列是命令或事件的简要用途。例如截图中The HCI_Accept_Connection_Request command is used to accept a new incoming BR/EDR connection request.意思是HCI_Accept_Connection_Request 命令用于接受一个新的 BR/EDR 连接请求。这列适合用来快速判断这个命令是干什么的 这个事件表示什么事情发生了 它大概属于连接、认证、加密、广播、扫描还是数据传输但是它只是摘要不能只看这一列就认为自己掌握了命令。2.4 BR/EDR经典蓝牙支持要求这一列表示该命令或事件对于BR/EDR Controller的支持要求。BR/EDR 就是经典蓝牙比如SPP A2DP HFP HID Classic 传统蓝牙音频2.5 LE低功耗蓝牙支持要求这一列表示该命令或事件对于LE Controller的支持要求。LE 就是 BLE例如BLE 广播 BLE 扫描 BLE 连接 BLE GATT 通信 BLE PHY BLE Extended Advertising BLE Periodic Advertising你现在主要学习 BLE所以看 Table 3.1 时重点应该看Name Vers. Summary Description LEBR/EDR 那一列可以先弱化除非你要研究经典蓝牙。3. Table 3.1 里面 M、O、E、C.xxx 怎么理解表格中的 BR/EDR 和 LE 两列不是随便写的它们表示 Controller 对这个命令或事件的支持要求。常见标记大致可以这样理解MMandatory强制支持 OOptional可选支持 EExcluded不适用 / 不要求支持 C.xxxConditional条件支持3.1 MMandatory强制支持如果某个命令在 LE 列是M表示LE Controller 必须支持这个命令或事件。也就是说只要它是符合要求的 LE Controller就应该支持。3.2 OOptional可选支持如果某个命令在 LE 列是O表示这个命令或事件是可选支持的。Controller 可以支持也可以不支持。所以 Host 在使用这类命令前通常要先查询 Controller 能力。常见查询命令包括HCI_Read_Local_Supported_Commands HCI_Read_Local_Supported_Features HCI_LE_Read_Local_Supported_Features3.3 EExcluded不适用如果某个命令在 LE 列是E一般表示这个命令或事件不适用于 LE Controller。例如截图中Accept Connection Request command这个命令是经典蓝牙 BR/EDR 的连接接受命令所以它在 BR/EDR 列可能是M但在 LE 列是E。意思是这是 BR/EDR 体系的命令不是 BLE 连接使用的命令。BLE 建立连接不是用这个命令而是看 LE 相关命令例如HCI_LE_Create_Connection HCI_LE_Extended_Create_Connection3.4 C.xxxConditional条件支持如果某个命令或事件写的是C.134 C.155 C.101这种表示条件支持也就是说这个命令或事件是否需要支持要看某个条件是否成立。例如如果 Controller 支持某个 Feature 如果 Controller 支持某种传输类型 如果 Controller 支持某种链路状态 如果 Controller 支持某个相关命令具体C.134、C.155、C.101分别对应什么条件需要去看规范里专门的条件说明表。不要把C.xxx当成版本号它不是版本号而是条件编号。4. Table 3.1 应该怎么查看你不需要从头到尾把 Table 3.1 全部截图下来也不建议逐行硬读。这张表非常长按字母顺序列出所有 HCI Command 和 Event里面同时包含 BR/EDR 和 LE 内容。正确的看法是4.1 先用浏览器搜索关键字因为你现在主要学习 BLE所以可以在网页中直接搜索HCI_LE_或者搜索具体关键字Advertising Scanning Connection PHY Data Length Periodic Extended例如你想看广播相关命令就搜索Advertising想看扫描相关命令就搜索Scan想看连接相关命令就搜索Create Connection Connection Update Terminate4.2 优先看 HCI_LE_ 开头的命令和事件BLE 相关命令和事件大多以HCI_LE_开头。例如HCI_LE_Set_Advertising_Parameters command HCI_LE_Set_Advertising_Data command HCI_LE_Set_Scan_Response_Data command HCI_LE_Set_Advertising_Enable command HCI_LE_Set_Scan_Parameters command HCI_LE_Set_Scan_Enable command HCI_LE_Create_Connection command HCI_LE_Advertising_Report event HCI_LE_Connection_Complete event对于 BLE 学习来说这些才是重点。4.3 不要只看 Table 3.1要点击命令详情Table 3.1 只是目录。真正重要的是每个命令的详细说明。例如你看到HCI_LE_Set_Advertising_Parameters command应该点进去看Command Parameters Return Parameters Generated Events Description Error Codes也就是重点看这个命令有哪些参数 每个参数是什么意思 参数之间有什么限制 命令成功后返回什么事件 失败时可能返回什么错误码 这个命令会影响 Controller 的什么行为4.4 看 Table 3.1 时重点看 LE 列你现在的目标是掌握 BLE所以看表时可以这样处理BR/EDR 列先忽略 LE 列重点看如果 LE 列是E表示它基本不是 BLE 重点。如果 LE 列是M O C.xxx才值得进一步判断它和 BLE 的关系。4.5 可以按 BLE 场景分组查看不要按 Table 3.1 的字母顺序学习而应该按 BLE 场景学习。推荐顺序广播 Advertising 扫描 Scanning 连接 Connection 断开 Disconnection 连接参数 Connection Parameters 数据收发 ACL Data PHY Data Length Filter Accept List Resolving List Extended Advertising Periodic Advertising这样比从 A 到 Z 看 Table 3.1 更容易建立知识体系。5. 3.1 LE Controller requirements 想表达什么这一节开始讲LE Controller 对某些命令和事件的支持要求其中截图中重点是3.1.1 Legacy and extended advertising也就是Legacy Advertising 和 Extended Advertising 的命令/事件对应关系6. Legacy Advertising 和 Extended Advertising 的关系BLE 广播大致可以分成两套Legacy Advertising Extended Advertising6.1 Legacy AdvertisingLegacy Advertising 是早期 BLE 广播方式。常见 HCI 命令包括HCI_LE_Set_Advertising_Parameters HCI_LE_Set_Advertising_Data HCI_LE_Set_Scan_Response_Data HCI_LE_Set_Advertising_Enable它的典型特点是广播数据较短 传统广播包最多 31 字节 Advertising Data 扫描响应数据最多 31 字节 使用 legacy advertising PDU你之前学习的 BLE Legacy 广播基本就是这一套命令。6.2 Extended AdvertisingExtended Advertising 是 Bluetooth 5.0 引入的扩展广播机制。常见 HCI 命令包括HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Scan_Response_Data HCI_LE_Set_Extended_Advertising_Enable它的特点是支持更大的广播数据 支持多个 Advertising Set 支持主广播信道和辅助广播信道 支持更多 PHY 选择 可以配合 Periodic Advertising 使用7. Table 3.2 是什么Table 3.2 是Legacy and extended advertising commands and events也就是Legacy Advertising 命令/事件 和 Extended Advertising 命令/事件 的对应表它告诉你旧广播命令 对应 哪个扩展广播命令 旧广播事件 对应 哪个扩展广播事件例如HCI_LE_Advertising_Report event 对应 HCI_LE_Extended_Advertising_Report eventHCI_LE_Set_Advertising_Parameters command 对应 HCI_LE_Set_Extended_Advertising_Parameters commandHCI_LE_Set_Advertising_Data command 对应 HCI_LE_Set_Extended_Advertising_Data commandHCI_LE_Set_Scan_Response_Data command 对应 HCI_LE_Set_Extended_Scan_Response_Data commandHCI_LE_Set_Advertising_Enable command 对应 HCI_LE_Set_Extended_Advertising_Enable commandHCI_LE_Set_Scan_Parameters command 对应 HCI_LE_Set_Extended_Scan_Parameters commandHCI_LE_Set_Scan_Enable command 对应 HCI_LE_Set_Extended_Scan_Enable commandHCI_LE_Create_Connection command 对应 HCI_LE_Extended_Create_Connection command这张表很有用因为它帮你把 Legacy BLE 和 Extended BLE 的 HCI 命令对应起来了。8. 表中 none 是什么意思Table 3.2 中有很多地方写none意思是没有对应的 legacy 命令或者没有对应的 extended 命令例如扩展广播中有一些新能力Legacy Advertising 本身没有所以左边就是none。例如HCI_LE_Read_Maximum_Advertising_Data_Length HCI_LE_Read_Number_of_Supported_Advertising_Sets HCI_LE_Remove_Advertising_Set HCI_LE_Clear_Advertising_Sets HCI_LE_Set_Periodic_Advertising_Parameters HCI_LE_Set_Periodic_Advertising_Data HCI_LE_Set_Periodic_Advertising_Enable这些是扩展广播或周期广播相关能力Legacy Advertising 中没有对应命令。所以表中左边是none9. Legacy 和 Extended Advertising 不能随便混用截图中这段非常关键If, since the last power-on or reset, the Host has ever issued a legacy advertising command and then issues an extended advertising command, or has ever issued an extended advertising command and then issues a legacy advertising command, the Controller shall return the error code Command Disallowed (0x0C).意思是从上次上电或 Reset 之后如果 Host 已经使用过 Legacy Advertising 命令然后又使用 Extended Advertising 命令或者反过来先用了 Extended Advertising 命令又使用 Legacy Advertising 命令Controller 应该返回 Command Disallowed错误码是 0x0C。也就是同一个 Controller 在一次上电/Reset 周期内不应该混用 legacy advertising 命令集和 extended advertising 命令集。可以理解为要么使用 Legacy Advertising 命令体系 要么使用 Extended Advertising 命令体系 不要混着用例如下面这种流程有问题HCI_LE_Set_Advertising_Parameters HCI_LE_Set_Advertising_Data HCI_LE_Set_Advertising_Enable HCI_LE_Set_Extended_Advertising_Parameters因为前面已经用了 legacy advertising 命令后面又用了 extended advertising 命令。反过来也一样有问题HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Advertising_Enable HCI_LE_Set_Advertising_Parameters10. Host 不应该向支持 Extended Advertising 的 Controller 发送 legacy advertising 命令截图中还有一句A Host should not issue legacy commands to a Controller that supports the LE Feature (Extended Advertising).意思是如果 Controller 支持 Extended Advertising 特性Host 不应该再向它发送 legacy advertising 命令。这个规则体现的是规范倾向新 Controller 支持扩展广播时Host 应该优先使用扩展广播命令体系。因为 Extended Advertising 命令体系覆盖能力更强也能表达更多广播配置。不过在实际系统里手机系统或蓝牙协议栈可能会根据兼容性策略选择使用 legacy 或 extended 命令。作为阅读规范时的理解应以规范规则为主不要在同一个上电/Reset 周期内混用 legacy advertising 和 extended advertising 命令体系。11. 3.2 Underlying Support 想表达什么Underlying Support可以理解为底层能力支持这一节想表达的是如果 Controller 声称支持某个 HCI 命令或事件那么这个命令/事件背后依赖的底层功能也必须真正被支持。不能出现这种情况表面上说支持某个 HCI Command 但实际底层功能不完整例如Controller 声称支持 Read RSSI command 但底层根本不能获取这个连接的 RSSI这种就不符合要求。12. 命令支持不只是“命令能返回”还要底层功能真的可用规范强调if a command or event is supported by a Controller then the feature underlying the command or event shall also be fully supported.意思是如果 Controller 支持某个命令或事件那么该命令或事件背后的功能也必须完整支持。这句话很重要。因为有些厂商实现可能会出现命令表里显示支持 但实际用起来返回错误 或者返回无效数据 或者功能不完整规范的要求是只要你声明支持就要真的支持它背后的功能。13. Table 3.3 是什么Table 3.3 是Commands and events that have separate requirements for each transport也就是对不同 transport 有单独支持要求的命令和事件这里的 transport 不是 UART/USB/SDIO而是指 Controller 支持的蓝牙传输类型例如BR/EDR LE有些命令或事件同时可能用于 BR/EDR 和 LE 连接但在不同 transport 上支持要求可能不同。例如截图中 Table 3.3 有HCI_Read_Remote_Version_Information command HCI_Read_RSSI command HCI_Read_Transmit_Power_Level command HCI_Encryption_Change event这些命令或事件可能跟某个连接句柄Connection_Handle有关。那么问题来了这个 Connection_Handle 是 BR/EDR 连接的 还是 LE 连接的不同连接类型下支持要求可能要分别判断。14. Connection_Handle 参数为什么重要规范中特别提到Connection_Handle Handle因为很多 HCI 命令不是针对整个 Controller而是针对某一条连接。例如HCI_Read_RSSI HCI_Read_Remote_Version_Information HCI_Read_Transmit_Power_Level这些命令通常需要传入Connection_Handle也就是告诉 Controller我要读取哪一条连接的信息如果这个连接是 BR/EDR 连接就要看 Controller 对 BR/EDR transport 的支持要求。如果这个连接是 LE 连接就要看 Controller 对 LE transport 的支持要求。15. 如果不支持某个 transport 上的底层功能会怎样截图中说如果某个命令带有 Handle 或 Connection_Handle 参数而 Host 传入的是某个 transport 上的连接但是 Controller 不支持这个 transport 上的底层功能那么 Controller 应该返回Unsupported Feature or Parameter Value错误码是0x11例如Host 对一个 LE Connection_Handle 发送某个命令 但是 Controller 只支持该命令在 BR/EDR 连接上使用 不支持在 LE 连接上使用那么 Controller 应该返回Unsupported Feature or Parameter Value (0x11)对于事件也是类似如果 Controller 不支持某个 transport 上的对应功能 就不应该生成这个 transport 上对应的事件16. 3.3 Feature Exchange 想表达什么Feature Exchange是特性交换这一节讲的是某些带有 Connection_Handle 参数的命令在执行真正操作前Controller 可能需要先和对端设备进行 feature exchange用来确认对端是否支持某个必要功能。17. 为什么需要 Feature Exchange蓝牙通信不是只看本机支持什么还要看对端设备支持什么。一个功能能不能用通常取决于本机 Host 是否支持 本机 Controller 是否支持 对端 Controller 是否支持 当前连接状态是否允许例如本机想执行某个连接上的操作但这个操作需要对端也支持某个特性。这时 Controller 可能要先和对端设备交换特性信息。18. Feature Exchange 和 HCI Command Status 的关系截图中说如果某个命令有 Connection_Handle 参数 返回 HCI_Command_Status event 后面还有 completion event 命令本身的规范没有提到 feature exchange那么这个命令在执行其他流程之前可能会先进行 feature exchange。意思是Host 发出命令后Controller 先通过 HCI_Command_Status 告诉 Host命令已接收开始处理。 然后 Controller 可能先和对端做 feature exchange。 确认对端支持必要功能后再继续执行真正操作。 最后通过完成事件告诉 Host 结果。流程可以理解为Host ↓ 发送某个带 Connection_Handle 的 HCI Command ↓ Controller ↓ 返回 HCI_Command_Status ↓ Controller 与对端设备进行 Feature Exchange ↓ 确认对端是否支持必要特性 ↓ 执行后续过程 ↓ 通过 completion event 上报最终结果19. 这部分的关键信息总结19.1 HCI Command 和 Event 是 Host 与 Controller 之间的交互CommandHost 控制 Controller EventController 通知 Host这一节就是在说明这些命令和事件的总览表以及支持规则。19.2 Table 3.1 是 HCI 命令和事件的总目录Table 3.1 按字母顺序列出所有 HCI Command 和 Event。它不是学习顺序表而是查阅表。学习 BLE 时不建议从 A 到 Z 逐个看而应该按 BLE 场景查。19.3 Vers. 表示命令/事件首次出现的规范版本例如4.0 4.1 5.0 5.1表示这个命令或事件从哪个 Bluetooth Core Specification 版本开始定义。19.4 BR/EDR 和 LE 列表示支持要求常见标记含义M强制支持 O可选支持 E不适用 / 排除 C.xxx条件支持对于 BLE 学习重点看 LE 列。19.5 Table 3.2 说明 Legacy Advertising 和 Extended Advertising 的对应关系这张表很适合用来建立广播命令体系Legacy Advertising command/event ↓ Extended Advertising command/event尤其是这些对应关系Set Advertising Parameters ↓ Set Extended Advertising Parameters Set Advertising Data ↓ Set Extended Advertising Data Set Scan Response Data ↓ Set Extended Scan Response Data Set Advertising Enable ↓ Set Extended Advertising Enable Set Scan Parameters ↓ Set Extended Scan Parameters Set Scan Enable ↓ Set Extended Scan Enable Create Connection ↓ Extended Create Connection19.6 Legacy 和 Extended Advertising 命令不应该混用从上次上电或 Reset 之后用了 legacy advertising 命令就不要再用 extended advertising 命令 用了 extended advertising 命令就不要再用 legacy advertising 命令否则 Controller 应该返回Command Disallowed 0x0C19.7 Underlying Support 强调“声明支持就要真的支持”Controller 不能只是表面支持某个命令。如果支持命令就要支持它背后的底层能力。19.8 带 Connection_Handle 的命令要注意连接类型同一个命令可能对 BR/EDR 连接支持对 LE 连接不支持。因此要看这个 Connection_Handle 属于 BR/EDR 连接 还是 LE 连接如果 Host 对不支持的连接类型使用命令Controller 应返回Unsupported Feature or Parameter Value 0x1119.9 Feature Exchange 是确认对端是否支持某功能有些连接相关命令在真正执行前Controller 可能先和对端设备做 feature exchange。目的就是确认对端设备是否支持这个命令背后需要的功能20. 对 BLE 学习的实际指导这一节不用完整背下来但要知道它的用途。它的价值主要有三个查命令 看支持要求 理解 legacy / extended 命令体系关系学习 BLE 时可以这样使用1. 先确定自己要研究的 BLE 场景 2. 在 Table 3.1 中搜索相关命令或事件 3. 看 LE 列的支持要求 4. 点击命令名称进入详细定义 5. 再结合 Section 7 的命令详情看参数、返回值和事件例如研究 BLE Legacy 广播HCI_LE_Set_Advertising_Parameters HCI_LE_Set_Advertising_Data HCI_LE_Set_Scan_Response_Data HCI_LE_Set_Advertising_Enable HCI_LE_Advertising_Report研究 BLE 扫描HCI_LE_Set_Scan_Parameters HCI_LE_Set_Scan_Enable HCI_LE_Advertising_Report研究 BLE 连接HCI_LE_Create_Connection HCI_LE_Connection_Complete HCI_Disconnection_Complete HCI_LE_Connection_Update研究扩展广播HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Scan_Response_Data HCI_LE_Set_Extended_Advertising_Enable HCI_LE_Extended_Advertising_Report所以这一节不是让你把所有命令都读完而是告诉你HCI 命令和事件在哪里查 表格里的支持要求怎么看 Legacy 和 Extended 命令如何对应 Controller 支持能力要如何判断
HCI 功能规范【3. Overview of commands and events】
发布时间:2026/7/4 3:35:49
这部分是HCI 章节第 3 节Overview of commands and events它不是在讲某一个具体命令而是在讲HCI Command 和 HCI Event 的总览表怎么看、Controller 对命令/事件的支持要求怎么看以及一些特殊规则。可以把这一节理解成 HCI 命令和事件的“目录说明 支持规则说明”。1. 这部分整体想表达什么HCI 的命令和事件是在Host 和 Controller 之间传递的。Host → ControllerHCI Command Controller → HostHCI Event Host ↔ ControllerHCI Data Packet第 3 节重点讲的是有哪些 HCI Command 有哪些 HCI Event 这些命令/事件从哪个蓝牙版本开始出现 这些命令/事件是 BR/EDR 用的还是 LE 用的 Controller 是否必须支持 支持条件是什么 legacy advertising 和 extended advertising 命令如何对应 底层功能支持和命令支持之间是什么关系所以这一节更像是一个HCI 命令/事件支持矩阵说明。2. Table 3.1 是什么Table 3.1 的名字是Alphabetical list of commands and events也就是按字母顺序排列的 HCI 命令和事件列表它会列出每一个 HCI Command 和 HCI Event并给出这些信息Name Vers. Summary Description BR/EDR LE截图中的表头如下Name | Vers. | Summary Description | BR/EDR | LE每一列的含义如下。2.1 Name命令或事件名称这一列是 HCI Command 或 HCI Event 的名称。例如Accept Connection Request command Authentication Complete event Authentication Requested command HCI_LE_Set_Advertising_Parameters command HCI_LE_Advertising_Report event如果是蓝色链接说明可以点击进去看这个命令或事件的详细定义。一般详细内容会包括Opcode Command Parameters Return Parameters Generated Events Description Error Codes所以 Table 3.1 本身只是总览表不是完整说明。真正要理解某个命令还是要点进去看命令详情或者去后面对应的详细章节看。2.2 Vers.第一次出现的规范版本Vers.表示这个命令或事件是从哪个蓝牙规范版本开始被定义的。例如截图中Accept Connection Request command 1.1 Authenticated Payload Timeout Expired event 4.1意思是Accept Connection Request command 从 Bluetooth 1.1 开始就有 Authenticated Payload Timeout Expired event 从 Bluetooth 4.1 开始出现如果一个命令或事件有多个版本可能会写成[v1] [v2]这表示同一个命令/事件在不同版本中有一些细节差异。注意版本不同不代表它们是完全不同的功能。规范里说得很清楚同一个命令或事件的不同版本实现的是相同的基础功能只是细节上可能有差异。例如参数变多 返回参数变多 描述细节变化 支持条件变化2.3 Summary Description简要说明这一列是命令或事件的简要用途。例如截图中The HCI_Accept_Connection_Request command is used to accept a new incoming BR/EDR connection request.意思是HCI_Accept_Connection_Request 命令用于接受一个新的 BR/EDR 连接请求。这列适合用来快速判断这个命令是干什么的 这个事件表示什么事情发生了 它大概属于连接、认证、加密、广播、扫描还是数据传输但是它只是摘要不能只看这一列就认为自己掌握了命令。2.4 BR/EDR经典蓝牙支持要求这一列表示该命令或事件对于BR/EDR Controller的支持要求。BR/EDR 就是经典蓝牙比如SPP A2DP HFP HID Classic 传统蓝牙音频2.5 LE低功耗蓝牙支持要求这一列表示该命令或事件对于LE Controller的支持要求。LE 就是 BLE例如BLE 广播 BLE 扫描 BLE 连接 BLE GATT 通信 BLE PHY BLE Extended Advertising BLE Periodic Advertising你现在主要学习 BLE所以看 Table 3.1 时重点应该看Name Vers. Summary Description LEBR/EDR 那一列可以先弱化除非你要研究经典蓝牙。3. Table 3.1 里面 M、O、E、C.xxx 怎么理解表格中的 BR/EDR 和 LE 两列不是随便写的它们表示 Controller 对这个命令或事件的支持要求。常见标记大致可以这样理解MMandatory强制支持 OOptional可选支持 EExcluded不适用 / 不要求支持 C.xxxConditional条件支持3.1 MMandatory强制支持如果某个命令在 LE 列是M表示LE Controller 必须支持这个命令或事件。也就是说只要它是符合要求的 LE Controller就应该支持。3.2 OOptional可选支持如果某个命令在 LE 列是O表示这个命令或事件是可选支持的。Controller 可以支持也可以不支持。所以 Host 在使用这类命令前通常要先查询 Controller 能力。常见查询命令包括HCI_Read_Local_Supported_Commands HCI_Read_Local_Supported_Features HCI_LE_Read_Local_Supported_Features3.3 EExcluded不适用如果某个命令在 LE 列是E一般表示这个命令或事件不适用于 LE Controller。例如截图中Accept Connection Request command这个命令是经典蓝牙 BR/EDR 的连接接受命令所以它在 BR/EDR 列可能是M但在 LE 列是E。意思是这是 BR/EDR 体系的命令不是 BLE 连接使用的命令。BLE 建立连接不是用这个命令而是看 LE 相关命令例如HCI_LE_Create_Connection HCI_LE_Extended_Create_Connection3.4 C.xxxConditional条件支持如果某个命令或事件写的是C.134 C.155 C.101这种表示条件支持也就是说这个命令或事件是否需要支持要看某个条件是否成立。例如如果 Controller 支持某个 Feature 如果 Controller 支持某种传输类型 如果 Controller 支持某种链路状态 如果 Controller 支持某个相关命令具体C.134、C.155、C.101分别对应什么条件需要去看规范里专门的条件说明表。不要把C.xxx当成版本号它不是版本号而是条件编号。4. Table 3.1 应该怎么查看你不需要从头到尾把 Table 3.1 全部截图下来也不建议逐行硬读。这张表非常长按字母顺序列出所有 HCI Command 和 Event里面同时包含 BR/EDR 和 LE 内容。正确的看法是4.1 先用浏览器搜索关键字因为你现在主要学习 BLE所以可以在网页中直接搜索HCI_LE_或者搜索具体关键字Advertising Scanning Connection PHY Data Length Periodic Extended例如你想看广播相关命令就搜索Advertising想看扫描相关命令就搜索Scan想看连接相关命令就搜索Create Connection Connection Update Terminate4.2 优先看 HCI_LE_ 开头的命令和事件BLE 相关命令和事件大多以HCI_LE_开头。例如HCI_LE_Set_Advertising_Parameters command HCI_LE_Set_Advertising_Data command HCI_LE_Set_Scan_Response_Data command HCI_LE_Set_Advertising_Enable command HCI_LE_Set_Scan_Parameters command HCI_LE_Set_Scan_Enable command HCI_LE_Create_Connection command HCI_LE_Advertising_Report event HCI_LE_Connection_Complete event对于 BLE 学习来说这些才是重点。4.3 不要只看 Table 3.1要点击命令详情Table 3.1 只是目录。真正重要的是每个命令的详细说明。例如你看到HCI_LE_Set_Advertising_Parameters command应该点进去看Command Parameters Return Parameters Generated Events Description Error Codes也就是重点看这个命令有哪些参数 每个参数是什么意思 参数之间有什么限制 命令成功后返回什么事件 失败时可能返回什么错误码 这个命令会影响 Controller 的什么行为4.4 看 Table 3.1 时重点看 LE 列你现在的目标是掌握 BLE所以看表时可以这样处理BR/EDR 列先忽略 LE 列重点看如果 LE 列是E表示它基本不是 BLE 重点。如果 LE 列是M O C.xxx才值得进一步判断它和 BLE 的关系。4.5 可以按 BLE 场景分组查看不要按 Table 3.1 的字母顺序学习而应该按 BLE 场景学习。推荐顺序广播 Advertising 扫描 Scanning 连接 Connection 断开 Disconnection 连接参数 Connection Parameters 数据收发 ACL Data PHY Data Length Filter Accept List Resolving List Extended Advertising Periodic Advertising这样比从 A 到 Z 看 Table 3.1 更容易建立知识体系。5. 3.1 LE Controller requirements 想表达什么这一节开始讲LE Controller 对某些命令和事件的支持要求其中截图中重点是3.1.1 Legacy and extended advertising也就是Legacy Advertising 和 Extended Advertising 的命令/事件对应关系6. Legacy Advertising 和 Extended Advertising 的关系BLE 广播大致可以分成两套Legacy Advertising Extended Advertising6.1 Legacy AdvertisingLegacy Advertising 是早期 BLE 广播方式。常见 HCI 命令包括HCI_LE_Set_Advertising_Parameters HCI_LE_Set_Advertising_Data HCI_LE_Set_Scan_Response_Data HCI_LE_Set_Advertising_Enable它的典型特点是广播数据较短 传统广播包最多 31 字节 Advertising Data 扫描响应数据最多 31 字节 使用 legacy advertising PDU你之前学习的 BLE Legacy 广播基本就是这一套命令。6.2 Extended AdvertisingExtended Advertising 是 Bluetooth 5.0 引入的扩展广播机制。常见 HCI 命令包括HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Scan_Response_Data HCI_LE_Set_Extended_Advertising_Enable它的特点是支持更大的广播数据 支持多个 Advertising Set 支持主广播信道和辅助广播信道 支持更多 PHY 选择 可以配合 Periodic Advertising 使用7. Table 3.2 是什么Table 3.2 是Legacy and extended advertising commands and events也就是Legacy Advertising 命令/事件 和 Extended Advertising 命令/事件 的对应表它告诉你旧广播命令 对应 哪个扩展广播命令 旧广播事件 对应 哪个扩展广播事件例如HCI_LE_Advertising_Report event 对应 HCI_LE_Extended_Advertising_Report eventHCI_LE_Set_Advertising_Parameters command 对应 HCI_LE_Set_Extended_Advertising_Parameters commandHCI_LE_Set_Advertising_Data command 对应 HCI_LE_Set_Extended_Advertising_Data commandHCI_LE_Set_Scan_Response_Data command 对应 HCI_LE_Set_Extended_Scan_Response_Data commandHCI_LE_Set_Advertising_Enable command 对应 HCI_LE_Set_Extended_Advertising_Enable commandHCI_LE_Set_Scan_Parameters command 对应 HCI_LE_Set_Extended_Scan_Parameters commandHCI_LE_Set_Scan_Enable command 对应 HCI_LE_Set_Extended_Scan_Enable commandHCI_LE_Create_Connection command 对应 HCI_LE_Extended_Create_Connection command这张表很有用因为它帮你把 Legacy BLE 和 Extended BLE 的 HCI 命令对应起来了。8. 表中 none 是什么意思Table 3.2 中有很多地方写none意思是没有对应的 legacy 命令或者没有对应的 extended 命令例如扩展广播中有一些新能力Legacy Advertising 本身没有所以左边就是none。例如HCI_LE_Read_Maximum_Advertising_Data_Length HCI_LE_Read_Number_of_Supported_Advertising_Sets HCI_LE_Remove_Advertising_Set HCI_LE_Clear_Advertising_Sets HCI_LE_Set_Periodic_Advertising_Parameters HCI_LE_Set_Periodic_Advertising_Data HCI_LE_Set_Periodic_Advertising_Enable这些是扩展广播或周期广播相关能力Legacy Advertising 中没有对应命令。所以表中左边是none9. Legacy 和 Extended Advertising 不能随便混用截图中这段非常关键If, since the last power-on or reset, the Host has ever issued a legacy advertising command and then issues an extended advertising command, or has ever issued an extended advertising command and then issues a legacy advertising command, the Controller shall return the error code Command Disallowed (0x0C).意思是从上次上电或 Reset 之后如果 Host 已经使用过 Legacy Advertising 命令然后又使用 Extended Advertising 命令或者反过来先用了 Extended Advertising 命令又使用 Legacy Advertising 命令Controller 应该返回 Command Disallowed错误码是 0x0C。也就是同一个 Controller 在一次上电/Reset 周期内不应该混用 legacy advertising 命令集和 extended advertising 命令集。可以理解为要么使用 Legacy Advertising 命令体系 要么使用 Extended Advertising 命令体系 不要混着用例如下面这种流程有问题HCI_LE_Set_Advertising_Parameters HCI_LE_Set_Advertising_Data HCI_LE_Set_Advertising_Enable HCI_LE_Set_Extended_Advertising_Parameters因为前面已经用了 legacy advertising 命令后面又用了 extended advertising 命令。反过来也一样有问题HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Advertising_Enable HCI_LE_Set_Advertising_Parameters10. Host 不应该向支持 Extended Advertising 的 Controller 发送 legacy advertising 命令截图中还有一句A Host should not issue legacy commands to a Controller that supports the LE Feature (Extended Advertising).意思是如果 Controller 支持 Extended Advertising 特性Host 不应该再向它发送 legacy advertising 命令。这个规则体现的是规范倾向新 Controller 支持扩展广播时Host 应该优先使用扩展广播命令体系。因为 Extended Advertising 命令体系覆盖能力更强也能表达更多广播配置。不过在实际系统里手机系统或蓝牙协议栈可能会根据兼容性策略选择使用 legacy 或 extended 命令。作为阅读规范时的理解应以规范规则为主不要在同一个上电/Reset 周期内混用 legacy advertising 和 extended advertising 命令体系。11. 3.2 Underlying Support 想表达什么Underlying Support可以理解为底层能力支持这一节想表达的是如果 Controller 声称支持某个 HCI 命令或事件那么这个命令/事件背后依赖的底层功能也必须真正被支持。不能出现这种情况表面上说支持某个 HCI Command 但实际底层功能不完整例如Controller 声称支持 Read RSSI command 但底层根本不能获取这个连接的 RSSI这种就不符合要求。12. 命令支持不只是“命令能返回”还要底层功能真的可用规范强调if a command or event is supported by a Controller then the feature underlying the command or event shall also be fully supported.意思是如果 Controller 支持某个命令或事件那么该命令或事件背后的功能也必须完整支持。这句话很重要。因为有些厂商实现可能会出现命令表里显示支持 但实际用起来返回错误 或者返回无效数据 或者功能不完整规范的要求是只要你声明支持就要真的支持它背后的功能。13. Table 3.3 是什么Table 3.3 是Commands and events that have separate requirements for each transport也就是对不同 transport 有单独支持要求的命令和事件这里的 transport 不是 UART/USB/SDIO而是指 Controller 支持的蓝牙传输类型例如BR/EDR LE有些命令或事件同时可能用于 BR/EDR 和 LE 连接但在不同 transport 上支持要求可能不同。例如截图中 Table 3.3 有HCI_Read_Remote_Version_Information command HCI_Read_RSSI command HCI_Read_Transmit_Power_Level command HCI_Encryption_Change event这些命令或事件可能跟某个连接句柄Connection_Handle有关。那么问题来了这个 Connection_Handle 是 BR/EDR 连接的 还是 LE 连接的不同连接类型下支持要求可能要分别判断。14. Connection_Handle 参数为什么重要规范中特别提到Connection_Handle Handle因为很多 HCI 命令不是针对整个 Controller而是针对某一条连接。例如HCI_Read_RSSI HCI_Read_Remote_Version_Information HCI_Read_Transmit_Power_Level这些命令通常需要传入Connection_Handle也就是告诉 Controller我要读取哪一条连接的信息如果这个连接是 BR/EDR 连接就要看 Controller 对 BR/EDR transport 的支持要求。如果这个连接是 LE 连接就要看 Controller 对 LE transport 的支持要求。15. 如果不支持某个 transport 上的底层功能会怎样截图中说如果某个命令带有 Handle 或 Connection_Handle 参数而 Host 传入的是某个 transport 上的连接但是 Controller 不支持这个 transport 上的底层功能那么 Controller 应该返回Unsupported Feature or Parameter Value错误码是0x11例如Host 对一个 LE Connection_Handle 发送某个命令 但是 Controller 只支持该命令在 BR/EDR 连接上使用 不支持在 LE 连接上使用那么 Controller 应该返回Unsupported Feature or Parameter Value (0x11)对于事件也是类似如果 Controller 不支持某个 transport 上的对应功能 就不应该生成这个 transport 上对应的事件16. 3.3 Feature Exchange 想表达什么Feature Exchange是特性交换这一节讲的是某些带有 Connection_Handle 参数的命令在执行真正操作前Controller 可能需要先和对端设备进行 feature exchange用来确认对端是否支持某个必要功能。17. 为什么需要 Feature Exchange蓝牙通信不是只看本机支持什么还要看对端设备支持什么。一个功能能不能用通常取决于本机 Host 是否支持 本机 Controller 是否支持 对端 Controller 是否支持 当前连接状态是否允许例如本机想执行某个连接上的操作但这个操作需要对端也支持某个特性。这时 Controller 可能要先和对端设备交换特性信息。18. Feature Exchange 和 HCI Command Status 的关系截图中说如果某个命令有 Connection_Handle 参数 返回 HCI_Command_Status event 后面还有 completion event 命令本身的规范没有提到 feature exchange那么这个命令在执行其他流程之前可能会先进行 feature exchange。意思是Host 发出命令后Controller 先通过 HCI_Command_Status 告诉 Host命令已接收开始处理。 然后 Controller 可能先和对端做 feature exchange。 确认对端支持必要功能后再继续执行真正操作。 最后通过完成事件告诉 Host 结果。流程可以理解为Host ↓ 发送某个带 Connection_Handle 的 HCI Command ↓ Controller ↓ 返回 HCI_Command_Status ↓ Controller 与对端设备进行 Feature Exchange ↓ 确认对端是否支持必要特性 ↓ 执行后续过程 ↓ 通过 completion event 上报最终结果19. 这部分的关键信息总结19.1 HCI Command 和 Event 是 Host 与 Controller 之间的交互CommandHost 控制 Controller EventController 通知 Host这一节就是在说明这些命令和事件的总览表以及支持规则。19.2 Table 3.1 是 HCI 命令和事件的总目录Table 3.1 按字母顺序列出所有 HCI Command 和 Event。它不是学习顺序表而是查阅表。学习 BLE 时不建议从 A 到 Z 逐个看而应该按 BLE 场景查。19.3 Vers. 表示命令/事件首次出现的规范版本例如4.0 4.1 5.0 5.1表示这个命令或事件从哪个 Bluetooth Core Specification 版本开始定义。19.4 BR/EDR 和 LE 列表示支持要求常见标记含义M强制支持 O可选支持 E不适用 / 排除 C.xxx条件支持对于 BLE 学习重点看 LE 列。19.5 Table 3.2 说明 Legacy Advertising 和 Extended Advertising 的对应关系这张表很适合用来建立广播命令体系Legacy Advertising command/event ↓ Extended Advertising command/event尤其是这些对应关系Set Advertising Parameters ↓ Set Extended Advertising Parameters Set Advertising Data ↓ Set Extended Advertising Data Set Scan Response Data ↓ Set Extended Scan Response Data Set Advertising Enable ↓ Set Extended Advertising Enable Set Scan Parameters ↓ Set Extended Scan Parameters Set Scan Enable ↓ Set Extended Scan Enable Create Connection ↓ Extended Create Connection19.6 Legacy 和 Extended Advertising 命令不应该混用从上次上电或 Reset 之后用了 legacy advertising 命令就不要再用 extended advertising 命令 用了 extended advertising 命令就不要再用 legacy advertising 命令否则 Controller 应该返回Command Disallowed 0x0C19.7 Underlying Support 强调“声明支持就要真的支持”Controller 不能只是表面支持某个命令。如果支持命令就要支持它背后的底层能力。19.8 带 Connection_Handle 的命令要注意连接类型同一个命令可能对 BR/EDR 连接支持对 LE 连接不支持。因此要看这个 Connection_Handle 属于 BR/EDR 连接 还是 LE 连接如果 Host 对不支持的连接类型使用命令Controller 应返回Unsupported Feature or Parameter Value 0x1119.9 Feature Exchange 是确认对端是否支持某功能有些连接相关命令在真正执行前Controller 可能先和对端设备做 feature exchange。目的就是确认对端设备是否支持这个命令背后需要的功能20. 对 BLE 学习的实际指导这一节不用完整背下来但要知道它的用途。它的价值主要有三个查命令 看支持要求 理解 legacy / extended 命令体系关系学习 BLE 时可以这样使用1. 先确定自己要研究的 BLE 场景 2. 在 Table 3.1 中搜索相关命令或事件 3. 看 LE 列的支持要求 4. 点击命令名称进入详细定义 5. 再结合 Section 7 的命令详情看参数、返回值和事件例如研究 BLE Legacy 广播HCI_LE_Set_Advertising_Parameters HCI_LE_Set_Advertising_Data HCI_LE_Set_Scan_Response_Data HCI_LE_Set_Advertising_Enable HCI_LE_Advertising_Report研究 BLE 扫描HCI_LE_Set_Scan_Parameters HCI_LE_Set_Scan_Enable HCI_LE_Advertising_Report研究 BLE 连接HCI_LE_Create_Connection HCI_LE_Connection_Complete HCI_Disconnection_Complete HCI_LE_Connection_Update研究扩展广播HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Scan_Response_Data HCI_LE_Set_Extended_Advertising_Enable HCI_LE_Extended_Advertising_Report所以这一节不是让你把所有命令都读完而是告诉你HCI 命令和事件在哪里查 表格里的支持要求怎么看 Legacy 和 Extended 命令如何对应 Controller 支持能力要如何判断