...
}
看5.2.1节中这种处理的流程图。 5 BLE协议栈
这一章将描述BLE协议栈的功能性和提供的一些列面向协议栈的API。 栈工程和它相关的文件服务于实现BLE协议栈任务。这是系统中最高优先级的任务并且像本文第二张插图所示的实现BLE协议栈。
多数BLE协议栈都以实体代码的形式在一个单个库文件中提供(Texas Instruments不提供协议栈的源代码作为一种政策)。因此,明白不同协议栈层的功能性和他们是怎样与应用和Profile互动的是非常重要的。本章将努力解释这些层。 5.1 通用通道配置(GAP)
BLE协议栈的GAP层与连接功能相关。它处理设备的通道模式和处理包括设备发现,链路建立。链路终止,初始化安全因素和设备配置。
基于设备被配置为那种角色,设备可以处于多种状态如上图所示并在下面进行了描述。 1. 就绪(standby):初始空闲状态由重启进入; 2. 广播者(Advertiser):设备广播指定的数据让任何初始化的设备都知道自己是个可以连
接的设备。广播包中包含了设备地址和可以包含一些额外的数据如设备名称。
3. 扫描者:扫描设备,取决于接收到的广播包,发送一个扫描请求“scan request”给广播
者。广播者恢复一个“scan response”扫描回复。这是设备发现的处理,在这种情况下扫描设别现在意识到广播设备,也知道了该设备可以连接。
4. 初始者:当初始化时,模拟器必须指定一个确定设备的地址来连接。如果一个广播包接
收到了并且符合确定设备的地址,初始化设备就就随后发送出一个建立连接的请求(链路)与广播设备,这些请求中的连接参数在5.1.1中描述。
5. 从机/主机:一旦一个连接形成了,广播者就会作为从机,而初始化者就会作为主机。 5.1.1 连接参数
这部分将描述不同的连接参数,它们与连接请求一起有初始设备发出,可以被建立连接后的两个设备的任一设备修改。这些参数分别是:
1. 扫描间隔:在BLE连接中使用了调频计划,在这种背景下两台设备各自发送和接收到的
数据只在特定时刻的特定的通道,然后相遇在一个新的通道(BLE协议栈的链路层处理通道的变化)在指定的时间计数之后。这种相遇中两个设备发送和接收的数据就是所谓的“连接事件”。即使没有应用数据发送或接收,两个设备都会交换链路层的数据以维持连接。连接间隔就是两次连接事件之间的时间间隔,最小单位为1.25ms。连接间隔可以从最小值6(7.5ms)到最大值3200(4s)。
不同应用可能要求不同的连接间隔。像在5.1.3中描述的,这样会影响设备的功耗。关于设备功耗的更多的信息请参考《power consumption application note [3].》 2 从机潜伏(Slave Latency):这个参数可以是从机设备(外设)可以跳过数个连接事件。这样就给予了外设设备一些灵活性。在这种情况下如果他没有任何数据去发送它就可以选择跳过数个连接事件并保持睡眠,这样就节省了一些电力。决策由外设设备决定。 从机潜伏值与可以跳过的最大事件数量有关。它的范围可以从0(意味着一个事件也不跳过)到一个最大的499:然而最大值必须不能超过有效连接间隔的16s。
3 超时检测:这个是两次成功连接事件间的最大时间。如果在这个时间段内没有出现一次陈宫的连接事件,设备就会考虑连接丢失,返回非连接状态。这个参数的值的单位为10ms。超时检测值的范围可以从10(100ms)到3200(32s)。另外,超时时间必须大于有效连接间隔(后面再解释)。 5.1.2 有效连接间隔
有效连接间隔等于两次连接事件间的时间间隔,假设从机潜伏开启了并跳过了最大可能的事件(有限连接间隔就等于确切的连接间隔如果从机潜伏设为0)。可以使用下面的公式计算有效连接间隔:
Effective Connection Interval = (Connection Interval) * ( 1 + (Slave Latency) )
参考下面的例子:
1. 连接间隔为80(100ms); 2. 从机潜伏:4
3. 有效连接间隔就为:100ms * (1 + 4) = 500ms;
这告诉我们在从机没有数据发送给主机的情况下,从机每隔500ms发送一次连接事件。 5.1.3 连接参数的注意事项 在许多应用中,从机将会跳过最大的连接事件,因此当选择或请求连接参数是考虑连接参数是非常有用的。选择正确的连接参数组合在BLE设备的功耗优化中扮演着重要的角色。下面列出了权衡连接参数设置的一些通用的总结: 1 降低连接间隔将会:
1. 两台设备同时增加了功耗; 2. 增加了两个方向的吞吐率;
3. 降低了任一方向的数据发送的时间消耗。 2 增加连接间隔将会:
1. 降低两台设备的功耗; 2. 降低两个方向的吞吐率;
3. 增加了任一方向的数据发送的时间消耗。 3 降低从机潜伏(或者设置为0)将会:
1. 增加外设设备的功耗;
2. 降低了中央设备发送数据给外设设备的时间消耗 3 增加从机潜伏将会:
1. 降低外设在外设没有数据发送给中央设备期间的功耗; 2. 增加了中央设备发送给外设设备的时间消耗。 5.1.4 连接参数更新 在某些案例中,中央设备将会要求一次与外设设备的连接包含连接参数是不符合外设设备的。在另一些案例中,一个外设设备可能有在连接过程中修改连接参数的需求,基于外设设备应用。外设设备可以请求中央设备修改连接设置通过设置“Connection Parameter Update Request”。对于BT4.1的设备,这种请求是至直接被链路层处理。对于BT4.0设备来说,协议栈的L2CAP层将处理这种请求。注意BLE栈自动选择更新方式。
这种请求包含了四个参数:最小连接间隔,最大连接间隔,从机潜伏,和超时时间。这些值代表了外设在连接时想要的参数值(连接间隔给定的是个范围)。当中心设别接收到这个请求后,它就会执行接受或不接受这些新的参数。 5.1.5 连接终止
一个连接可以被主机或从机以任何理由主动的终止。一边启动终止,另一边就必须依据两边设备离开连接状态之间的情况作出回应。 5.1.6 连接安全
GAP同样处理在BLE连接过程中的开启安全因素。确信的数据可能只在已认证的连接中读和写。一但一个连接形成了,两个设备可以通过所谓配对的过程。当配对完成后,密匙就会建立用来加密和认证链路。在一个典型的案例中,外设设备将请求中心设备提供的密码来完成配对进程。这将是个固定的值,比如“000000”,或者可以是一个随机产生的值提供给用户(诸如在一次显示中)。在中心设备发送完正确的密码之后,两个设备交换安全密匙来加密和认证链路。
在许多案例中,同一个中心设备和外设设备将会频繁的连接和断开连接。BLE有一个安全因素允许两个设备,当配对时,给彼此一个长期的安全密匙。这个因素就叫做绑定,允许两个设备每次连接在不经过全面的配对过程后重新连接后能快速的重新建立加密或认证,只要它们保存着长期的密匙的信息。 在SimpleBLEPeripheral应用中,GAP角色的管理是由GAP角色 profile处理,绑定信息有GAP安全profile管理。 5.1.7 GAP 抽象
应用和profile直接调用GAP API函数来实现BLE相关的工程如广播和连接时有可能的。然而多数GAP的功能是由GAPRole任务处理的。这个抽象层在下面的图中描述: