蓝牙协议LMP(Link Manager Protocol)
LMP(Link Manager Protocol)是蓝牙协议栈中的链路管理层协议,负责在经典蓝牙(BR/EDR)设备之间建立、配置和管理物理链路(ACL/SCO)。以下是LMP协商的完整流程和关键技术点:
1. LMP的核心功能
功能 | 说明 |
---|---|
链路建立与释放 | 控制ACL/SCO链路的创建和断开。 |
功率控制 | 动态调整发射功率(如RSSI-based功率调整)。 |
加密与安全 | 协商加密模式(如AES-CCM)、生成/交换密钥。 |
角色切换 | 主从设备角色切换(Role Switch)。 |
QoS参数协商 | 为SCO链路设置语音编码(如CVSD、mSBC)和延迟参数。 |
2. LMP协商的触发条件
-
首次连接:设备配对后首次建立ACL链路时。
-
服务变更:如从ACL链路切换到SCO链路(通话模式)。
-
安全策略更新:重新协商加密密钥或认证方式。
-
节能模式切换:进入Sniff/Hold/Park模式时的参数协商。
3. LMP协商的详细流程
阶段1:链路建立基础协商
-
LMP_version_req/res
-
交换双方支持的蓝牙协议版本(如Bluetooth 2.1+EDR、4.0等)。
-
-
LMP_features_req/res
-
协商设备能力(如是否支持EDR、3Mbps速率、多时隙包等)。
-
通过64位的Feature Mask字段标识(详见蓝牙核心规范)。
-
-
LMP_host_connection_req/res
-
确认上层主机(Host)是否准备就绪。
-
阶段2:安全与加密协商
-
LMP_encryption_mode_req/res
-
协商加密模式(如无加密、AES-CCM)。
-
若启用加密,后续发送
LMP_encryption_key_size_req
指定密钥长度(默认128位)。
-
-
LMP_start_encryption_req
-
触发实际加密流程,使用配对生成的Link Key加密ACL链路。
-
阶段3:功率与链路控制
-
LMP_max_power_req/res
-
协商最大发射功率(避免干扰或省电)。
-
-
LMP_quality_of_service (QoS)
-
为SCO链路设置语音参数:
-
Poll Interval:主设备轮询从设备的间隔。
-
Latency:最大允许延迟(如语音通话要求<20ms)。
-
-
阶段4:角色与模式切换
-
LMP_switch_req/res
-
主从角色切换(Role Switch),例如耳机请求成为主设备。
-
-
LMP_sniff_mode_req/res
-
进入低功耗Sniff模式,协商休眠间隔(Sniff Interval)。
-
4. 关键协商示例
示例1:EDR(增强数据速率)协商
Device A → LMP_features_req (EDR支持标志位=1) → Device B Device B ← LMP_features_res (EDR支持标志位=1) ← Device A Device A → LMP_EDR_3M_req (请求3Mbps速率) → Device B Device B ← LMP_accepted (同意) ← Device A
若一方不支持EDR,则回退到基础速率(1Mbps)。
示例2:SCO链路建立(语音通话)
Device A → LMP_SCO_link_req (HV3包, CVSD编码) → Device B Device B ← LMP_accepted (TSCO=6时隙, DSCO=2时隙) ← Device A
TSCO/DSCO分别表示SCO链路的传输/重传时隙。
5. LMP PDU(协议数据单元)格式
LMP消息通过ACL链路传输,格式如下:
字段 | 长度 | 说明 |
---|---|---|
Opcode | 7 bits | 操作码(如LMP_encryption_mode_req ) |
Transaction ID | 1 bit | 标识请求/响应(0=请求,1=响应) |
Payload | 可变 | 具体参数(如加密模式、功率等级等) |
6. LMP与上层协议的关系
-
HCI(Host Controller Interface):
LMP协商由蓝牙控制器(Controller)执行,结果通过HCI事件(如HCI_Connection_Complete
)通知主机(Host)。 -
L2CAP:
LMP完成底层链路配置后,L2CAP才能建立逻辑信道(如RFCOMM)。
7. 常见问题
Q1: LMP协商失败的原因?
-
版本不兼容:一方仅支持Bluetooth 2.0,另一方要求4.0+。
-
能力不匹配:如主设备请求EDR,但从设备仅支持基础速率。
-
安全冲突:强制加密但未成功配对。
Q2: 如何抓取LMP报文?
-
使用蓝牙嗅探工具(如Ellisys、Frontline):
Frame 123: LMP_features_req (Features=0xFFFF00000000) Frame 124: LMP_features_res (Features=0xFFFF00000001)
Q3: LMP在BLE中是否存在?
-
否。BLE使用LL(Link Layer)协议管理链路,功能类似但更简化。
8. 总结
-
LMP是经典蓝牙的链路管理核心,负责底层参数协商。
-
关键协商内容:版本/能力匹配、加密、功率、QoS。
-
与HCI/L2CAP协同:确保上层协议可正常运行。
-
调试建议:通过抓包分析LMP交互,定位连接问题。