)
经典蓝牙 LMP 命令集合Link Manager ProtocolLMP 是控制器之间的链路管理协议运行在 BB 之上、HCI 之下负责链路建立、功率控制、协商、安全等。所有 LMP PDU 均为单字节 opcode0x00-0x7F部分带扩展 opcode。一、LMP 概览1.1 LMP 位置Host ← HCI → LM / LMP ← 控制器间协议 → LC / Baseband RFMaster 发起大部分命令由主设备发起从设备用 LMP_accepted / LMP_not_accepted 应答1 字节 opcode共 128 个 opcode0x00-0x7F部分为保留或已废弃PDU 类型请求/应答/通知三类1.2 通用应答Opcode命令说明0x00LMP_accepted接受对方请求0x01LMP_not_accepted拒绝附原因码二、链路建立与控制Opcode命令方向说明0x02LMP_SYS_Info_req/_rspM→S / S→M读取对端链路管理器版本信息0x05LMP_detach双向主动断开链路携带原因码0x0FLMP_setup_completeS→M从设备完成链路初始化0x17LMP_clk_offset_req/_rspM→S请求时钟偏移用于 park/sniff 模式0x2CLMP_name_req/_rspM→S读取对端设备名0x2DLMP_name_rspS→M设备名响应0x4ALMP_encapsulated_header双向封装后续 LMP PDU用于超过 16 字节的 PDU0x68LMP_features_req/_rspM→S读取对端支持的 Feature0x69LMP_features_resS→MFeature 响应0x7ALMP_feature_req_ext_page/_res双向扩展 Feature 页Page 1/2三、功率与链路质量控制Opcode命令方向说明0x0ALMP_timing_accuracy_req/_rspM→S读取对端时钟精度0x1ALMP_incr_power_req双向请求对端增大发射功率0x1BLMP_decr_power_req双向请求对端减小发射功率0x1CLMP_max_power双向通知对端已到最大功率0x1DLMP_min_power双向通知对端已到最小功率0x46LMP_DM_set_evm双向设置 EDR 调制精度EVM参数0x5BLMP_channel_classification_req/_rspM→SAFH 信道分类请求0x64LMP_set_AFH/_rspM→S设置 AFH 跳频序列分类0x73LMP_channel_classification_req_edr_2mbps/_rsp双向2 Mbps EDR 信道质量报告0x74LMP_channel_classification_req_edr_3mbps/_rsp双向3 Mbps EDR 信道质量报告0x75LMP_simple_channel_config_req/_rsp双向简化 AFH 信道配置0x7CLMP_min_snr_req/_rsp双向最小 SNR 报告LE 和 BR/EDR 共享概念四、链路模式节能模式Opcode命令方向说明0x07LMP_hold/_rspM→SHold 模式指定时长内不传输0x08LMP_sniff/_rspM→SSniff 模式周期性监听节能0x09LMP_unsniff/_rspM→S退出 Sniff 模式0x13LMP_park_req/_rspM→SPark 模式设备进入休眠仅保留 AM_ADDR0x14LMP_unpark_BD_ADDR_req/_rspM→S通过 BD_ADDR 唤醒 Park 设备0x15LMP_set_bsvM→S设置 Beacon 跳频序列0x16LMP_modify_beaconM→S修改 Beacon 参数0x21LMP_unpark_PM_ADDR_req/_rspM→S通过 PM_ADDR 唤醒 Park 设备0x54LMP_sniff_subrating_req/_rsp双向Sniff 子速率协商快速进入/退出 sniff0x67LMP_switch_req/_rspS→M主从切换请求0x0BLMP_switch_req旧版旧版切换保留五、SCO / eSCO 链路Opcode命令方向说明0x03LMP_SCO_setup_req/_rsp双向SCO 链路建立请求0x2ALMP_SCO_remove_req/_rsp双向移除 SCO 链路0x55LMP_ESCO_setup_req/_rsp双向eSCO 链路建立增强型 SCO支持重传0x56LMP_ESCO_change_req/_rsp双向修改 eSCO 链路参数0x57LMP_ESCO_remove_req/_rsp双向移除 eSCO 链路六、安全与配对Opcode命令方向说明0x0CLMP_au_rand双向认证随机数Authentication Random0x0DLMP_sres双向SRES 认证响应Signed Response0x0ELMP_comb_key双向组合密钥生成0x06LMP_in_rand双向初始化随机数0x10LMP_new_skey双向生成新的半永久密钥0x11LMP_encryption_key_size_req/_rsp双向协商加密密钥长度0x12LMP_start_encryption_req/_rsp双向开启加密0x1FLMP_stop_encryption_req/_rsp双向停止加密0x1ELMP_temp_key双向临时密钥用于一对一加密0x2BLMP_encryption_modeM→S设置加密模式0/1/2/30x33LMP_set_AFH_class_enc_masterM→S加密模式下 AFH 分类主设备侧0x34LMP_set_AFH_class_enc_slaveS→M加密模式下 AFH 分类从设备侧0x53LMP_passkey_req/_rsp双向PIN/Passkey 请求SSP 之前0x5ALMP_unit_key双向单元密钥Unit Key已不推荐0x6ALMP_IO_capability_req/_rsp双向SSPIO 能力请求/响应0x6BLMP_num_comparison_failed双向SSP数字比较失败0x6CLMP_passkey_notification双向SSPPasskey 通知0x6DLMP_keypress_notification双向SSP按键通知Passkey 输入进度0x6ELMP_user_confirmation_req/_rsp双向SSP用户确认请求Just Works / Numeric Comparison0x6FLMP_user_passkey_req/_rsp双向SSP用户 Passkey 请求Keyboard Only0x70LMP_remote_oob_data_req/_rsp双向SSP远程 OOB 数据请求0x71LMP_accept_oob_pairing双向SSP接受 OOB 配对0x72LMP_simple_pairing_confirm/_rsp双向SSP简单配对确认DHKey 计算确认0x76LMP_set_cph_mode/_rsp双向连接外围半永久密钥Connection Peripheral Semi-permanent Key0x77LMP_calc_dhkey_check/_rsp双向SSP计算 DHKey Check 值0x7BLMP_encryption_control/_rsp双向加密控制暂停/恢复加密用于 CC2 模式0x7DLMP_encryption_key_refresh/_rsp双向加密密钥刷新七、QoS 与流控Opcode命令方向说明0x04LMP_QoS双向协商 QoS 参数poll interval, latency, etc.0x18LMP_version_req/_rsp双向LMP 版本号协商0x20LMP_pause_encryption/_rsp双向暂停加密用于改变 QoS 时0x26LMP_quality_of_service双向QoS 参数设置新命名0x2ELMP_slot_offset双向时隙偏移指示0x2FLMP_page_mode双向分页模式Page Scan Mode0x3ALMP_failed_contact_counter双向链路丢失计数设置0x3BLMP_supervision_timeout双向链接监督超时Supervision Timeout0x3CLMP_page_scan_window双向Page Scan 窗口大小设置0x3DLMP_page_scan_period双向Page Scan 周期设置八、角色切换与微微网Opcode命令方向说明0x0BLMP_switch_req双向主从切换请求Master-Slave Switch0x22LMP_TDD_wrapM→STDD 环绕TDD Wrapper0x4FLMP_hold_modeM→SHold 模式替代 0x07 的另一种表述0x50LMP_sniff_modeM→SSniff 模式替代 0x08 的另一种表述0x51LMP_park_modeM→SPark 模式替代 0x13 的另一种表述0x5ELMP_set_connectionless_slave_broadcast/_rspM→S设置无连接从设备广播CSB0x5FLMP_start_sync_train/_rspM→S启动同步训练CSB 用0x60LMP_stop_sync_train/_rspM→S停止同步训练0x61LMP_sync_train_receivedS→M同步训练已接收0x62LMP_set_triggered_clock_capture/_rsp双向触发时钟捕获九、测试与诊断Opcode命令方向说明0x19LMP_test_activate/_rsp双向激活测试模式DUT 测试0x19LMP_test_control双向测试控制同 opcode 不同场景0x3ELMP_radio_on_off双向射频开关测试用0x3FLMP_loopback双向回环测试0x52LMP_esc_envelope_req/_rsp双向EDR 包络测试Envelope Testing0x58LMP_timing_reportS→M链路时序报告用于高精度时间同步0x59LMP_timing_report_reqM→S请求时序报告0x78LMP_enhanced_test_report双向增强型测试报告BER/PRBS 测试0x79LMP_enhanced_flush/_rsp双向增强型 Flush立即清空缓冲区十、已废弃 / 保留以下 opcode 为保留或已从核心规范中移除仅在历史设备中可能出现Opcode命令状态0x23-0x25—保留0x27-0x29—保留0x30-0x32—保留0x35-0x39—保留0x37、0x44-0x45、0x47-0x48—保留0x4B-0x4E、0x5C-0x5D—保留0x63、0x65-0x66—保留0x7E-0x7F—保留/扩展十一、速查表按 Opcode 排序Opcode命令类别0x00LMP_accepted通用0x01LMP_not_accepted通用0x02LMP_SYS_Info_req/_rsp链路0x03LMP_SCO_setup_req/_rspSCO0x04LMP_QoSQoS0x05LMP_detach链路0x06LMP_in_rand安全0x07LMP_hold/_rsp节能0x08LMP_sniff/_rsp节能0x09LMP_unsniff/_rsp节能0x0ALMP_timing_accuracy_req/_rsp功率0x0BLMP_switch_req角色0x0CLMP_au_rand安全0x0DLMP_sres安全0x0ELMP_comb_key安全0x0FLMP_setup_complete链路0x10LMP_new_skey安全0x11LMP_encryption_key_size_req/_rsp安全0x12LMP_start_encryption_req/_rsp安全0x13LMP_park_req/_rsp节能0x14LMP_unpark_BD_ADDR_req/_rsp节能0x15LMP_set_bsv节能0x16LMP_modify_beacon节能0x17LMP_clk_offset_req/_rsp链路0x18LMP_version_req/_rspQoS0x19LMP_test_activate / test_control测试0x1ALMP_incr_power_req功率0x1BLMP_decr_power_req功率0x1CLMP_max_power功率0x1DLMP_min_power功率0x1ELMP_temp_key安全0x1FLMP_stop_encryption_req/_rsp安全0x20LMP_pause_encryption/_rsp安全/QoS0x21LMP_unpark_PM_ADDR_req/_rsp节能0x22LMP_TDD_wrap微微网0x26LMP_quality_of_serviceQoS0x2ALMP_SCO_remove_req/_rspSCO0x2BLMP_encryption_mode安全0x2CLMP_name_req链路0x2DLMP_name_rsp链路0x2ELMP_slot_offsetQoS0x2FLMP_page_modeQoS0x33-0x34LMP_set_AFH_class_enc功率/安全0x3ALMP_failed_contact_counterQoS0x3BLMP_supervision_timeoutQoS0x3CLMP_page_scan_windowQoS0x3DLMP_page_scan_periodQoS0x3ELMP_radio_on_off测试0x3FLMP_loopback测试0x46LMP_DM_set_evm功率0x4ALMP_encapsulated_header通用0x52LMP_esc_envelope_req/_rsp测试0x53LMP_passkey_req/_rsp安全0x54LMP_sniff_subrating_req/_rsp节能0x55LMP_ESCO_setup_req/_rspeSCO0x56LMP_ESCO_change_req/_rspeSCO0x57LMP_ESCO_remove_req/_rspeSCO0x58LMP_timing_report测试0x59LMP_timing_report_req测试0x5ALMP_unit_key安全0x5BLMP_channel_classification_req/_rsp功率0x5E-0x5FCSB 相关微微网0x60-0x62Sync Train 相关微微网0x64LMP_set_AFH/_rsp功率0x67LMP_switch_req/_rsp角色0x68-0x69LMP_features_req/res链路0x6A-0x72SSP 系列安全0x73-0x75EDR 信道分类 / Simple AFH功率0x76LMP_set_cph_mode/_rsp安全0x77LMP_calc_dhkey_check/_rsp安全0x78LMP_enhanced_test_report测试0x79LMP_enhanced_flush/_rsp测试0x7ALMP_feature_req_ext_page/_res链路0x7BLMP_encryption_control/_rsp安全0x7CLMP_min_snr_req/_rsp功率0x7DLMP_encryption_key_refresh/_rsp安全0x7E-0x7F保留 / 扩展—十二、常见问题Q1: LMP 和 HCI 什么关系LMP 是控制器之间的协议HCI 是主机和控制器之间的接口。主机发 HCI 命令控制器把它翻译成 LMP PDU 发给对端。Q2: LMP PDU 走什么信道走 L2CAP 之前的 ACL 数据信道用 CID0x0001LMP 通道优先级比用户数据高。Q3: 哪些命令必须 Master 发起大部分请求类命令SCO/eSCO 建立、节能模式、AFH、加密开启等由 Master 发起Slave 只能请求或建议最终决定权在 Master。Q4: SSP 相关命令有多少个SSPSecure Simple Pairing引入了约 10 个 LMP PDUopcode 0x6A-0x72 之间包括 IO Capability、User Confirmation、Passkey、OOB、DHKey Check 等。Q5: 抓包怎么看 LMPEllisys / Frontline 等专业分析仪可以直接解码 LMP PDUHCI snoop log 通常看不到 LMPHCI 以下被控制器吞了要看 LMP 必须用空口抓包仪Ellisys Vanguard / BEX, Frontline 10000 等