BT-3の蓝牙技术原理のBT协议の蓝牙核心协议の链路管理协议(LMP)

0. Overview

先看一下比较抽象的概念:链路管理器是运行蓝牙设备的处理器中的软件,其作用是交换信息,对蓝牙设备之间的链路进行设置和控制,以实现对链路的管理。

链路管理器之间的通信协议叫做链路管理协议(LMP)。链路管理器之间交换的消息称为链路管理协议数据单元( LMP_PDU )。LMP协议用于链路的建立,加密和控制。

更具体的说:负责完成设备的功率管理、链路质量管理、链路控制管理、数据分组管理、链路安全管理。

协议规定可以直接发送有效荷载而不用以L2CAP协议方式来发送。接收设备的链路管理器对接收到的LMP_PDU进行过滤和解释,不再将收到的信号发到更高协议层。

LMP_PDU其优先级比用户数据的优先级更高。还有,链路管理器的处理不是实时的。

1. LMP_PDU

ACL数据分组中承载了LMP_PDU。我在上一个帖子《蓝牙射频和基带》中说到分组的有效荷载头字段中包含了一个L_CH字段,用来确定逻辑信道,如下图红框所示。
有效荷载头字段
当L_CH=11 时,分组传输的是LMP_PDU,且LMP_PDU只能以单时隙的方式通过DM1分组或者DV分组的格式发送。

  • LMP_PDU的有效荷载格式:
    在这里插入图片描述
    有很多不同用途的PDU,我数了一下有55种,这里就不展示了。

  • LMP_PDU通信的两种基本类型:
    (1)第一种类型是双方通信链路管理器中有一方利用请求消息初始化通信,接收链路管理器或者 接收请求并执行相应操作(提供请求所要求的信息),或者 利用LMP_not_accepted_PDU拒绝请求,它也有可以发送自己相应的LMP_PDU 请求分组,为原来的请求提出一个可协商的选择

    (2)第二种类型是,主设备通过LMP_PDU分组发送命令要求从设备执行,从设备不能拒绝也不能提供协商的参数。第二种类型的一个例子是主设备强迫从设备进入低功率模式(如保持模式)或者主设要求断开链接,这是主设备强迫从设备进行的操作。从简单的设备名称交换到要求严格的鉴权和加密处理,都有许多链路管理器参与执行,但并不是所有执行都是强制的,即使响应是LMP_not_accpted,不接收的原因"不支持特征",接收链路管理器也必须能够响应所有的链路管理器处理请求。

2. 安全管理

关于安全性问题主要在协议的基带部分给出。基带协议定义了一些设备鉴权和路数据流加密所需要的安全算法以及处理过程。设备之间的链路配置也和安全密切相关,链路的连接与配置过程中均涉及到安全问题。链路的配置主要由链路管理器来完成。设备鉴权是强制性、必须进行的,所有的蓝牙设备均支持鉴权过程;链路的加密则是可选择的。
【暂时略过,后面以蓝牙安全模块来总结】

2.1 鉴权和匹配

【暂时略过,后面以蓝牙安全模块来总结】

2.2 加密

【暂时略过,后面以蓝牙安全模块来总结】

3. 功率管理和功率管理状态

处于连接状态的设备可以调整他们所连接的微微网的关系,以降低功耗或参与其他的事件。节能模式有三种,即呼吸模式,保持模式,休眠模式,这些模式均是可选的。

3.1 呼吸模式

  • 进入呼吸模式
    进入呼吸模式前,主从设备需要对呼吸间隔 T s n i f f T_{sniff} Tsniff和呼吸偏移 D s n i f f D_{sniff} Dsniff。进行协商。呼吸偏移决定了第一个呼吸时隙的持续时间,然后根据呼吸时间间隔 T s n i f f T_{sniff} Tsniff周期性的生成呼吸时隙。通常,从设备必须在每个偶数时隙的开始监听主设备是否有分组传送。在呼吸模式下,从设备可以对ACL链路放宽这一要求。主设备只能在呼吸时隙进行数据传输。呼吸尝试 N s n i f f a t t e m p t N_{sniffattempt} Nsniffattempt和呼吸超时 N s n i f f T i m e o u t N_{sniffTimeout} NsniffTimeout这两个参数控制从设备的监听活动。

    N s n i f f a t t e m p t N_{sniffattempt} Nsniffattempt参数决定了从呼吸时隙开始从设备必须监听的时隙数,即使从设备没有收到属于它的分组,也必须要继续监听直到发送停止。 N s n i f f T i m e o u t N_{sniffTimeout} NsniffTimeout参数决定了从设备如果继续接收属于它的更多的分组所必须继续监听的时隙数。

    主设备可以通过发送 LMP_snif协议数据分组强迫从设备进入呼吸模式。

    主设备或从设备也都可以通过发送 LMP_sniff_req协议数据分组请求从设备进入呼吸模式,一旦被请求方收到该请求,将返回含有修政后的参数的LMP_sniff_req 协议数据分组,以对参数进行协商。如果协商成功,将通过发送LMP_accepted 协议数据分组中止协商,否则发送LMP-not-accpted分组,表示请求拒绝并中止协商。

  • 结束呼吸模式
    结束呼吸模式可以通过发送LMP-unsniff-req来进行,被请求方必须通过 LMP-accepted来应答。如果是从设备请求,则在收到LMP-accepted 后进人活动模式;如果主设备请求,从设备将在收到LMP-unsniff-req后进入活动模式。

3.2 保持模式

如果在一段相对较长的时间内没有数据需要发送,两个蓝牙设备之间的ACL链路可以在指定的一段时间内置为保持模式。在保持时间内,主设备将不再发送ACL数据分组,并且为了节能也可以关闭收发器。如果一个设备希望发现其他的蓝牙设备或者被其他蓝牙设备发现,或者希望加入其他的微微网时,也可以进入保持模式。设备在保持模式时间内的活动由设备自己控制,而不是由保持消息决定。

如果预先发送的保持模式请求被接受,那么主、从设备都可以通过发送 LMP-hold 数据分组强制进入保持模式。LMP-hold 中的保持时间的长度不得长于已经接受的任何保持时间的长度。主设备或从设备也可以通过发送LMP-hold-req 数据分组请求进入保持模式,并通过发送包含修改后参数的LMP-hold-reg 数据分组对参数进行协商,最后通过LMP_accepted 或者 LMP_not_accepted 终止协商。

此模式下,仍然从单元仍然保留 AM_ADDR-活动成员地址。

3.3 休眠模式

为了减小设备在非活动时期的能量消耗,从设备可以进入休眠模式,在此模式下,从设备将从 Piconet 中分离,但是仍然与 Piconet 保持同步。这样可以使得设备比较快的重新加入 Piconet 中,而不需要查询和呼叫过程。

进入休眠模式放弃了原来的活动地址AM_ADDR 。为了使从设备快速,有序地重新加入到 Piconet 中,主设备为从设备安排了两个临时的8位地址—休眠成员地址(PM_ADDR)和接入请求地址(AR_ADDR).

PM_ADDR用于区分255个处于休眠模式的设备;“0x00”(全零PM_ADDR)作为保留,作为广播时使用。

当然处于休眠模式的设备可以使用它们的48位地址 BD_ADDR来激活,但是使用较短的PM-ADDR地址来激活多个休眠模式下的设备具有更高的效率。AR-ADDR地址常被用来安排休眠设备的激活顺序,以便使发生冲突的可能性最小。

下面的内容选看:

为了与微微网保持同步,并使处于休眠模式的设备重新加入微微网时更加方便,主|设备定义了一个低带宽的信标(beacon)通道,该信道传送周期性的广播分组。为增加可靠性,广播分组应尽量的短。

在进入休眠模式之前,从设备接收包含时间参数信标分组,从而知道它们在什么时候可以被唤醒。发送到休眠设备的信标分组是广播分组(BB-PDU, AM-ADDR =‘b000’),因为处于休眠模式的设备没有活动地址AM-ADDR,因此不能确定它们的地址。

信标分组中的定时参数是很多的。其中信标偏移参数指定了第一个信标分组开始的时间和信标分组间隔的周期。另外还包括广播重复参数、收到信标后到有权请求重新加入微微网的时间间隔、主设备提供的有权申请重新加入的时间的长度等等。

与呼吸模式和保持模式相同,主设备可以利用LMP- park PDU 强制 从设备进入休眠模式,主设备或从设备也可以利用LMP-pak-req PDU 请求 从设备进入休眠模式。

当从设备重新加人微微网时,主设备将根据休眠设备是利用48位的 BD-ADDR地址或8位的PM ADDR地址来定位,在信标时隙中发送 LMP- unpark-BD-ADDR或LMP-unpark-PM ADDR-req协议数据分组。多个休眠设备可以用单个解除休眠的LMP-PDU来唤醒。在解除休眠的协议数据分组中包含了主设备为从设备重新分配的AM ADDR地址。需要注意的是,如果微微网中已经有 7 个处于活动状态的从设备,休眠设备将不能被唤醒并重新加入微微网。在这种情况下,主设备不得不在唤醒休眠设备之前,将一些活动设备设置为休眠模式,并辨识这些设备对应的AM- ADDR地址。

4. 控制带宽通信

为了以提高传输的效率,从而提高ACL链路上所支持的带宽,链路管理器可以对较大的BB_PDU分组的使用进行协商,对这种连接管理器处理的支持是强制的。

4.1 SCO链路

一个微微网最多可同时支持三路提供具有电话质量的语音通信的sCO链路,速率为64 b/s。scO链路上scO分组的传输具有很高的优先级,可以先于与设备有关的其他任何处理过程进行,包括呼叫、查询、保持等等。设备可以发送 LMP-scO- link-raq协议数据分组,请求建立一条SCO链路。此LMP-PDU包含了有关的音频参数,如 sCO间隔(Tso) ,sCO基带协议数据分组类型和语音编码类型(CVSD等)。蓝牙支持三种不同的编码类型:64kb/s的 u u u律或 A A A律 PCM格式、64Kb/s的CVSD调制格式。利用这些方法,可以充分提高语音通信质量,使得头戴式耳机可以通过蓝牙 SCO 链路与蜂窗电话相连,而不会降低语音质量。

当主设备响应从设备的LMP-SCO-link-req协议数据分组或者发送自己的LMP-SCO-link-req协议数据分组时,主设备提供了时隙补偿参数 D s c o D_{sco} Dsco,用于确定新建立的scO链路第一次传输分组的时间,并且还提供了该SCO链路唯一的标识符或句柄。随后主设备 或 从设备 都可以利用LMP-scO-link-reg协议数据分组请求改变 sCO链路的相关参数,这一过程中将利用scO链路句构来标识一条参数或状态即将改变的SCO链路。

4.2 ACL链路的服务质量

为了控制两个设备之间给ACL 链路分配的最小带宽和 ACL基带数据分组的最大接入时延,可以根据需要对从设备的最大轮询间隔进行调整。主设备可以通过发送LMP-quality-of-service 协议数据分组确定一个新的最大轮询间隔,这种情况下从设备不能拒绝主设备的调整。另一方面,主设备或从设备都可以利用LMP-qualiy-of -service-reg协议数据分组请求改变轮询间隔,这种情况下轮询间隔的更改可能被接受,也可能被拒绝。

上述两种 LMP PDU中均包含了每一个广播分组重复的次数 N B C N_{BC} NBC。由于这个参数与整个微微网的操作有关,而不仅仅只是针对主设备与从设备之间的ACL链路,因此 N B C N_{BC} NBC只有当主设备发送时才有意义。如果这个参数包含于从设备发送的请求中,它将会被忽略掉。

5. 链路控制器管理

此部分主要介绍与链路控制器和基带协议有关的参数的协商。

5.1 呼叫配置

当两个设备已经处于连接状态时,他们可以重新建立连接,因为可以略去查询过程,重新连接可以更快的而进行。

通过处理呼叫方案 LMP PDU,设备可以声明或协商设备之间下一次呼叫所用到的呼叫方案。

当一个请求设备呼叫其他设备时,请求设备链路管理器通过LMP-page-mode-req协议数据分组向其他设备的链路管理器建议呼叫方案。同样,一个请求设备的链路管理器可以通过LMP-page-scan-mode-req协议数据分组,向其他设备的链路管理器建议呼叫该请求设备时的呼叫方案。

拒绝以上任意一种 LMP PDU,意味着当前的呼叫方案不能被更改,但对改变为强制呼叫方案的请求则不能拒绝。

5.2 主从角色切换

一个呼叫设备最终就是微微网的默认主设备,但有时需要主设备和从设备的角色进行交换。例如,当需要使用点对点(PPP)通信协议进行LAN的接入时,就需要这样的|交换。主、从角色交换过程开始时,请求设备发送 LMP-switch-req协议数据单元进行请求。在这之前应当结束当前L2CAP消息的传送。如果接受切换,另一设备也将结束当前L2CAP消息的传送,并以 LMP-accepted 应答,然后执行基带协议定义的过程。如 果拒绝进行切换,另一设备以LMP-not-acepted 应答,不进行角色转换过程。对主、从角色的切换的支持是可选的。

5.3 时钟和时间信息

一个蓝牙设备可以向其他的蓝牙设备请求更新的时钟信息,以优化各种链路控制器的操作。

主设备发送LMP-clock-offset-req协议数据分组,从设备将返回当前从设备的本地时钟与主设备的本地时钟的偏差。当主设备将来呼叫从设备时,这一信息可用来优化呼叫时间,对这一处理的支持是可选的。

如果从设备要转换为主设备时将会发送 LMP-slot-offset协议数据分组,LMP slot-ofiset协议数据分组承载了时隙偏差(us级),即主设备传送时隙的开始时间与从设备的相应时隙的开始时间之间的偏差。此信息主要用来优化主、从设备角色切换过程,这种LMP-PDU的支持是可选的。

发送LMP-timing-accuracy-req协议数据单元,将会返回接收设备时钟的料动参数Jitter(us级)和漂移参数(ppm级的)。此信息主要用来优化长时间处于非活动状态但仍与微微网相联系的设备的唤醒时间,如保持模式设备的唤醒;或者在主设备传送之前处于呼吸时隙、信标时隙的休眠设备的唤醒。对这种LMP PDU的支持是可选的,当它不被支持时,其料动和精度的最大缺省值分别是10us和250ppm。

主设备发送的LMP-supervision-timeout 协议数据单元中包含了蓝牙链路连接超时值,主要用来监测主、从设备之间的帧丢失,对这种LMP-PDU的支持是强制的。

5.4 信息交换

链路管理器之间彼此可以交换信息,以便更好地协调他们之间的分组的传输。

设备通过发送 LMP_version_req PDU表明该设备所支持的LMP的版本。接收该 LM_PDU 的设备通过返回LMP_version_res PDU,表明该接收设备所支持的LMP版本。服本号通过一个三元数组 [versionNo:companyID:subVerionNo] 来提供。其中的版本号部分是由 SIG组织定义的LMP的版本,子版本号则与执行版本的厂商有关。对这种LMP-PDU的支持是强制的。

设备发送的LMP_features_req PDU中包含了发送该LMP PDU的设备所支持可选择的无线、基带和链路管理器的特性。接收设备返回的LMP_feature_res PDU中包含了该接收设备所支持的一些特性。这些特性包括:除了默认的FHS, NULL,POLL, DM1和DH1分组之外所支持的分组类型;所支持的功率控制模式、语音编码方案、加密方案、角色转换方案以及可选的呼叫配置方案等等。对这种LMP_PDU处理的支持是强制的。

利用LMP_names_req PDU,请求设备的链路管理器向接受此LMP_PDU的设备查询友好用户名。友好用户名是设备的使用者分配给该设备的名称。

5.5 连接建立与断开

LMP是一个用于控制设备的链路管理器之间信息的传输协议,它不能封装任何高|层协议的PDU。

同样,LMP的处理过程可以不需要任何高层协议的参与,如 2CAP协|议或主机本身。

如果要建立 LM 以上层次的连接,主叫设备发送一个 LMP-host-connection-reg PDU,接收设备可以接受也可以不接受。如果链接请求被接受,两个设备的链路管理器将协商链路的一些参数,如鉴权和 QoS等。

当链路管理器完成参数协商后,并且设备不需要进一步的建立连接过程,每个链路管理器将发送LMP- setup-complete协议数据分组。只有两个链接管理器都对 LMP-setup-complete PDU 确认后,除 LMP-PDU 之外的通信才能开始。

当一个设备要终止它与另一个设备之间的连接时,将发出一个LMP-detach PDU,该PDU中包含连接断开原因的参数。随后两个设备之间的连接将立即终止,不会对LMP-detach PDU拒绝。

这一节中对 LMP PDU的支持是强制的。

参考资料:
《蓝牙技术》 严紫健
《蓝牙技术原理与协议》 刘刚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值