[置顶] 蓝牙基础知识进阶——Link manager对连接的控制

1、连接的控制

对连接的控制涉及到很多方面,而最直接的必然是连接的建立和连接的断开。

1.1 连接的建立

连接建立的过程如下图2-1所示:

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第1张图片

2-1 连接的建立

         page过程和一系列的信息交互之后就是连接的建立。masterpaging的设备)就会发送LMP_host_connection_req来请求建立连接,slave可以回应LMP_accepted或者LMP_not_accepted来完成或者拒绝连接的建立。在这之间,其实还可能有一个role switch的过程,一般而言,是在slave收到LMP_host_conenction_req之后发送slot_offsetswitch_reqPDU。若是role_switch失败,连接的建立仍然需要继续,除非paged一方不支持成为slave的角色,会回应low resource并断开连接。

         1.2 连接的断开

         蓝牙设备的断开是可以发生在任何时刻的,它可以由master发起也可以由slave发起。不过有一点,就是他必须有一个理由。因此断开连接的PDU——LMP_detach有一个error code的部分。

         在断开连接之前,需要先把ACL-U的链路暂停,然后把LMP_detach放入到传输的队列中,紧接着发动断开的一端启动了一个6*Tpolltimer,若是在这个timer超时前得到对方的ack,则启动一个3*Tpolltimer,在3*Tpolltimer超时后,LT_ADDR能够被re_use(发动断开端是master)。若是在6*Tpolltimer超时后还没有得到ack,则丢弃link,启动一个新的Tlinksupervisiontimeout,这个timeoutLT_ADDRre_use(发动断开端是master)。

       至于在接收端,若是接收端是master,则启动一个6*Tpolltimer,若是slave,则启动3*Tpolltimer。这个timer超时后,连接断开,然后若接收端是master,则LT_ADDR能够被再次使用。

       1.3 Power的控制

         power的控制是link manager的另外一个重要的工作,虽然说power levelphysical link的一个特性,而link manager是对逻辑链路的控制,因此这里的power控制是physical link上的特定logical linkpower level,他不会影响同一physical link上别的logical linkpower level

         Power的控制有两种策略,一种是legacy power control,另外一种是enhanced power control。支持enhanced的设备必须同时也支持legacy的控制策略。

         legacypower control所涉及的PDU如图2-2所示:

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第2张图片

2-2 legacy power controlPDU

         很清楚地可以看到incr_power_req就是要求power level增加一格,decr_power_req就是要求power level减少一格。当对端处于max power的时候,你再发送incr_power_req的时候就会回复max_power,同样的道理若是处于min power的时候,也会回复min_power。还有一种情况就是对端不支持power control,则它也会对incrreq回复max power,而对decrreq回复min power,当然也有可能回复unsupported LMP featureerror code

         enhanced power control所涉及的PDU如图2-3所示:

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第3张图片

2-3 enhanced power controlPDU

         毫无疑问,enhanced power control只有在两个设备都支持的情况下才会使用。在发送LMP_power_control_req之后,接收端会根据power_adjustment_request的内容来决定是提升一格的power level还是降低一格的power level或者就是直接max power。所以,这个参数有三个值:one step upone step down或者all the way to the max power level。对应的response参数就比较简单了,它就是用来表示变化后的power level

         1.4 自适应跳频(AFH

         自适应跳频机制在蓝牙中特别重要,他可以降低同样ISM 2.4G的其它设备的干扰。AFHPDU如下图2-4所示。

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第4张图片

2-4 AFH PDU

         这个PDU的三个参数意义如下:

         AFH_Instant: hopset 切换的时机,其实就是切换的间隔了。他至少要6*Tpoll的大小,且需是偶数。当然了,他的值还需要小于12小时。

AFH_Mode:表明AFH是使能还是不使能。

AFH_Channel_Map: 就是AFH使用的channel map

在收到LMP_set_AFH的第一步就是查看AFH_Instant是否已经到了,若没有则立即启动一个定时器,若是已经到了就立即重设。当AFH_Modeenable的时候,就是用来使能或者刷新AFH的。若是disable的时候,channel map参数的值就不再重要了。

1.5 通道的类别

AFH就是基于channel的一种机制,通俗地来讲我们希望一直在“干净”的通道上进行这些传输,那什么是“干净”的通道?除了所谓的“干净”的通道,还有别的什么通道呢?这里就是来说明通道都有哪些类型的。

通道类别的交互使用的PDU如下图2-5所示:

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第5张图片

2-5 通道类别的PDU

         显然req就是请求通道类别的信息了,他有三个参数:

         AFH_Reporting_Mode:用来确定slave是在AFH_reporting_enable还是AFH_reporting_disablestate。若是在disablestateslave不会产生任何的channel classification。即使是enable的状态,若是channel classification没有改变,也无需回复LMP_channel_classificationPDU

         AFH_Min_Interval以及max interval用来定义以两次req command之间的时间间隔。

         1.6 Link Supervision

         这个就是我们通常所说的link supervision timeout了,这个timer就是用来探测物理链路是否丢失,而这个timer时间的设置就是通过如下PDU来实现的:

2-6 设置supervision timeoutPDU

         1.7 通道质量引起的数据速率的变化(CQDDR

         我们知道对于同一个packet type,数据传输的速率取决于RF通道的质量。当然,我们也可以根据不同的通道质量来传输不同的packet type以优化数据传输的速率。相关的PDU如下图2-7所示:

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第6张图片

2-7 通道质量导致的传输速率改变的PDU

         设备A首先发送LMP_auto_rate PDU来通知设备B,这个功能是使能了,然后设备B就可以通过LMP_preferred_rate这个PDU来设置它所希望的packet type,当然设备A并不一定就要传输他希望的packet type,只要传输的packet type不比data rate所设置的值大即可。

         1.8 服务质量(QoS

         Tpoll我们之前一直在谈,他就是master和一个特定slave之间传输的最大时间间隔。这个值设置就是通过如下图2-8所示的PDU来实现的。

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第7张图片

2-8 服务质量的PDU

         这里有两种PDU,一个是LMP_quality_of_service,他是一个比较霸道的PDU,就是从master发出,通知slave,而slave不能拒绝,他必须得接受。另外一个则相对比较温和一点,quality_of_service_req,毕竟有个request,这个PDU可以有master发出也可以由slave发出。不同之处至于,slave发出的reqPDUNbc的值是无效的,直接忽略。但是master发出的reqslave是可以接受也可以拒绝的。这就可以形成一个协商的效果。

         1.9 Paging Scheme Parameters

         LMP还可以协商paging scheme参数。它使用的PDU如下图2-9所示:[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第8张图片

2-9 Paging Scheme请求的PDU

         page_mode_req就是设备A告诉设备B,我page你的时候使用的paging scheme,设备B可以接收也可以拒绝,拒绝后就仍然使用原来的scheme。而page_scan_mode_req相比而言则多了一个设置,它不仅是A告诉BApage的时候使用的paging scheme,还设置了B page的时候使用的paing scheme

         1.10 slot packet的控制

         我们知道一个设备可以联系多个slot进行传输,不过这个连续的数目是有限制的。当然也是可以设置,设置这个数目的PDU如下图2-10所示。

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第9张图片

2-10 多个slot packet控制的PDU

         这两个PDUQoS中的两个PDU是一样的,就不多解释了。

         1.11 Enhanced Data Rate

         这个是用来改变packet type table的,同样的不同的type就意味着不同的调制模式可能会被选择。这个改变的是ACL logical传输,不会影响相应的SCOeSCO链路。若想改变EDReSCO链路,在后面也会有介绍。这个PDU的格式如图2-11所示

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第10张图片

2-11 EDR PDU

         1.12 封装的LMP PDUs

         有时我们传输的LMP payload可能比16byte要长,那么就需要使用封装的LMP PDU来进行传输,他的格式如下:

[置顶] 蓝牙基础知识进阶——Link manager对连接的控制_第11张图片

2-12 封装的LMP PDUs

         当需要发送封装的LMP PDU的时候,我们会先发送LMP_encapsulated_header。对应这个header,若是major typeminor type,对端不能接收,就可以reject。若是accept,则会继续发送encapsulated_payload,对每一个payload都可以accept或者reject,每个payload的长度是16byte(最后一个用0填充)。

 

 

若您有任何关于蓝牙的问题都可以在底下留言提出,我会尽快回答的。

若您觉得该文章还不错,请按“顶”,哈哈~~

 

你可能感兴趣的:(manager,link,连接的控制)