4 Procedure Rules
4.1 Connection Control
4.1.1 Connection Establishment
在paging过程以后,LMP要查询clock offset
,LMP版本, 支持的features,name request and/or detach
。
当已page的设备想建立一个LM以上层的连接时,可以发送
LMP_host_connection_req
,当另一端收到这个PDU时,会将这个incoming connection通知到host。远端可以通过发送LMP_accepted
或者LMP_not_accepted
来接收或者拒绝这个连接。或者,如果slave需要role switch, 在它收到LMP_host_connection_req
后需要发出LMP_slot_offset
和LMP_switch_req
。如果role switch失败,LM可以继续进行连接,除非由于limited resources导致不支持这个连接,这时可以发送LMP_detach
带error code Remote Device Terminated Connection due to Low Resources(0x14)
来结束连接。如果role switch成功,原来的slave需要发送LMP_accepted
或者LMP_not_accepted
来回复LMP_host_connection_req
,注意此时的TID为0.如果paging设备收到了
LMP_not_accepted
作为对LMP_host_connection_req
的回复,那么它会立即断开链路,见4.1.2节。如果
LMP_host_connection_req
被接收,那么LMP的安全机制可能将被触发,主要有pairing, authentication, encryption。如果一个设备不打算触发安全机制,那么它将发送LMP_setup_complete
。如果双方设备都已发送LMP_setup_complete
,那么ACL-U逻辑链路就建立成功。4.1.2 Detach
两个蓝牙设备之间的连接可以由master和slave任一一方任意时间发起断开,命令包含一个断开原因的error code.
连接发起者LM可以暂停ACL-U链路上的传输。
后面讲了讲断开后的时序情况,以及LT_ADDR断开后可以重用。
在air log中也可以看到只有1条
4.1.3 Power Control
如果接收到的信号特征与之前预期值相差太大,就会去增大或降低远端设备的传输功率。设备的传输功率是它的物理链路特性,会影响到基于这个物理链路上的所有逻辑链路。请求设备的默认ACL-C上的功率控制只会影响它相关的物理链路,而不会影响连接到别的slave上的物理链路的功率等级。
有两种功率控制机制:传统功率控制与增强型功率控制,都会在后续4.3节详细描述。支持增强型功率控制的设备必须也支持传统功率控制。
在设备page以后LM支持的feature回复之前的任意时刻,都可以用传统功率控制机制发出功率调节请求。在LM支持的feature回复之后,如果双方都支持增强型功率控制,那么只有增强型功率控制可用,否则,如果任一设备支持传统功率控制,就只能用传统功率控制了。
如果设备的feature mask显示它不支持
power control requests
,那么在LM已经回复feature以后,它将不能发送功率控制请求。在此之前,功率调节可以发送,接收者如果不支持功率控制的话,可以用LMP_max_power
来回复LMP_incr_power_req
,用LMP_min_power
来回复LMP_decr_power_req
。或者回复带error code Unsupported LMP Feature(0x1A)
的LMP_not_accepted
。一旦接收到
LMP_incr_power_req
或者LMP_decr_power_req
后,输出功率将增大或者减小一步,具体步长见radio部分协议。如果接收
LMP_incr_power_req
的设备已经在最大功率,那么回复LMP_max_power
。发送者只有在发送降低功率至少一次后才可再发送增加功率。如果接收LMP_decr_power_req
的设备已经在最小功率,那么回复LMP_min_power
。发送者只有在发送增加功率至少一次后才可再发送减少功率。LMP_incr/decr_power_req
中有一字节留待后用,值为0可忽略。后面具体讲了增强型功率控制,用的上再看吧。。
4.1.4 Adaptive Frequency Hopping
AFH是用来优化物理链路性能的,减少ISM band上其他设备的物理链路带来的干扰。AFH只在连接模式下可用。
LMP_set_AFH
包含3个参数:AFH_Instant
, AFH_Mode
和AFH_Channel_Map
。AFH_Instant
用来表示哪个hopset即将启用,由蓝牙时钟值来控制,对两端都适用。。。。
4.1.5 Channel Classification
master可以像支持AFH的slave查询信道分类信息。
支持AFH_classification_slave
feature的slave可以进行信道分类,并根据它的AFH_reporting_mode
来上报。master必须用LMP_channel_classification_req
来控制AFH_reporting_mode
, 然后slave通过LMP_channel_classification
来上报信道分类信息。
slave按对上报多个信道信息,分类有good
, bad
, unknown
。如果一对信道的一个是good
一个是unknown
,那么上报good
。如果一个bad
一个unknown
,那么就是bad
。一个good
一个bad
的情况自定义。
LMP_channel_classification_req
有3个参数:AFH_Reporting_Mode
, AFH_Min_Interval
和AFH_Max_Interval
。在AFH_reporting_disabled
模式下,slave是不能产生信道分类报告的。AFH_Min_Interval
定义了从两个LMP_channel_classification
报告之间的最小时间。AFH_Max_Interval
定义了slave去检测radio environment的变化产生LMP_channel_classification
报告的最大时间。AFH_Max_Interval
必须大于等于AFH_Min_Interval
。AFH_Reporting_Mode
决定slave是在AFH_reporting_disabled
模式还是在AFH_reporting_enabled
模式,默认值是AFH_reporting_disabled
模式。以下情况
AFH_Reporting_Mode
会自动切换到AFH_reporting_disabled
模式:
- 在baseband层建立连接
- master-slave role switch
- 进入park模式
- 进入hold模式
以下情况AFH_Reporting_Mode
会自动恢复到之前模式: - 从park模式退出
- 从hold模式退出
- master-slave role switch失败
4.1.5.1 Channel classification reportin enabling and disabling
master通过发送LMP_channel_classification_req
,把AFH_Reporting_Mode
置为AFH_reporting_enabled
模式来启动信道分类报告。
当slave的信道分类被master启动后,它会根据前一次LMP_channel_classification_req
的参数来发送LMP_channel_classification
PDU。如果slave的信道信息没有变化,那么无需发送LMP_channel_classification
PDU。
master通过发送LMP_channel_classification_req
,把AFH_Reporting_Mode
置为AFH_reporting_disabled
模式来关闭信道分类报告。
4.1.6 Link Supervision
每个物理链路都有一个时钟来进行监督。这个时钟会检测设备移出区域或者被干扰而block造成的物理链路link loss,设备掉电,或者其他的失败情况。
4.1.7 Channel Quality Driven Data Rate Change(CQDDR)
一个给定类型的包的throughput
取决于RF信道质量。接收方的信道质量检测机制可以动态的控制远端传输来的包的类型从而优化throughput
。设备A发送LMP_auto_rate
来提示设备B启用该feature。一旦启动,设备B会发送LMP_preferred_rate
来提出希望A发送的数据类型。如果期望的数据大小大于最大值,A也还是按最大值发送。
参数有期望的Basic Rate模式和增强数据模式。如果是Basic Rate模式,设备用bits 0-2来表示期望数据速率,如果是增强数据模式,则用bits 3-6来表示。如果设备支持增强数据模式,那么期望的速率值对Basic Rate和增强型模式都有效。
连接建立完成后任何时候都可以发送这些PDU。
4.1.8 Quality of Service(QoS)
4.1.9 Paging Scheme Parameters
LMP提供了用于协商下次设备paging时的参数的机制。
4.1.9.1 Page Mode
设备A发起的后续 设备A对设备B的page 过程的协商。设备A的发起包含了page过程的参数,设备B可以接收或则拒绝。如果拒绝那么保持旧的设置。对于一个想切换至保留page机制的请求必须被拒绝。
4.1.9.2 Page Scan Mode
设备A发起的后续 设备B对设备A的page 过程的协商。设备A的发起包含了page过程的参数,设备B可以接收或则拒绝。如果拒绝那么保持旧的设置。说明强制机制的请求必须接收,说明非强制机制的请求必须拒绝。当设备A改变了它的page机制时必须发起这个协商。当连接建立后,slave也必须发送这个信息给master来告诉master slave现在的page机制与设置。
4.1.10 Control of Multi-slot Packets
一个设备在ACL-U逻辑链路上持续的包的个数是可以被限制的。它并不影响eSCO链路上的传输。一个设备通过LMP_max_slot
来告诉远端设备可接受的最大包个数。每个设备也可以通过LMP_max_slot_req
来让远端按最大包数来传输,最大包数在参数中。建立新的连接后,默认值是1 slot。只要连接完成,任意时刻都可以发送这些PDU。
4.1.11 Enhanced Data Rate
4.1.12 Encapsulated LMP PDUs
当载荷超过16字节时可以发送聚合的LMP PDU。聚合LMP PDU最小有2个LMP消息,一个PDU头,更多载荷。
4.1.13 Ping
当两端设备都支持Ping feature时,LM可以通过LMP ping机制来确认远端的LM状态。LMP ping机制也可以通过要求远端设备必须发送带MIC的ACL包来确认ACL逻辑链路上的消息完整性。由于LMP_ping_res
包含MIC会更新包计数器,LMP_PING_req
的发送者可以与上次收到的计数器值进行对比从而确认是否有包被拦截。
不论是master或者slave都可以发起这个过程。
4.1.14 Piconet Clock Adjustment
master可以调节整个piconet的时钟
网友评论