LMP 全称是Link Manager Protocol,我们还是要一张图,说明LMP 在哪里?
他是在HCI 以下,baseband 以上,实现在蓝牙控制器中。
按照协议规范,我们分几个部分来分别介绍LMP
- introduction
- general rules
- device features
- procedure rules
下面我们先来看看 整体的介绍部分:
Introduction
LMP是用来控制和协商两个设备连接行为的协议,涉及的方面包括逻辑传输连接的建立和控制,以及对于物理链路的控制等等,它是两个设备的LMP模块之前的交流,其消息是传输在ACL-C 的逻辑链路上,对于这一点,我们在baseband的概述中已经提过:
这里需要注意的一点是,LMP 是实现在控制器里面,其消息并不会经过HCI 接口传输到HOST 端,其架构如下图:
我们可以看到其是 两个设备的LMP 模块之前的通信。
General rules
2.1 Message Transport
这里描述的就是三个点:
- LMP的消息的交互是传输在ACL-C 逻辑链路上的,他和ACL-U的区别是通过LLID 来区分的。
- ACL-C有更高的优先级,一般控制信号都会有较高的优先级
- LMP消息本身没有携带额外的数据错误检测的信息
2.2 Synchronization
LMP 传输在ACL-C的逻辑链路上面,但这并不能保证传输的时间的以及对方ack的及时性。
2.3Packet Format
LMP 的数据包的格式有两种,一种是7bit的opcode,另外一种是15bit的opcode
我们发现除了opcode,在最低位还有一个TID,他是transtransaction ID,当它是0 的时候,说明这个LMP message是 master 发起的,当它是1的是时候说明是slave 发起的。
上图中是 header的最低位是0,代表是Transaction ID Initiated by master。
2.4Transactions
transaction 就是一次完整的打成某种目的的传输。所有属于同一个transaction 的单次传输的transaction ID 都是想同的。
比如下面:
LMP version exchange 的Transaction ID 都是 Initiated by slave
另外LMP_setup_complete 是一个 独立PDU,它自己形成一个transaction,