1、GAP-通用接入规范:
BLE协议栈的GAP层负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止,启动安全功能,设备配置。
GAP层通常扮演以下四种角色中的一种:
广播者——广告发送者,不是可连接的设备
观察者——扫描广告,不能够启动连接
外围设备——广告发送者,是可连接的设备,在单一链路层连接时作为一个从机
中央设备——扫描广告启动连接,在单一或者多链路层连接时作为主机,支持三个同时连接
在一个典型的蓝牙系统中,外围设备发送具体的广告数据让任何中央设备知道他是一个可连接的设备。广告内容包含设备地址,还可以包含一些额外的额数据,比如设备名称。中央设备接收到广告后发送一个搜索请求给外围设备,外围设备答复一个搜索答复。这就是设备发现的过程,这样中央设备就知道外围设备是一个可连接的设备。中央设备可以发送一个建立连接的请求给外围设备,一个连接情况包含一些连接参数:
连接间隔——在一个BLE连接中跳频机制需要被使用,这样两个设备之间可以在一个特定的通道上进行数据收发,在一个特定的时间之后会跳到一个新的通道上,LL层负责通道切换。这个遇见设备收发数据被称作是连接事件。尽管没有应用程序数据需要收发,两个设备之间仍然会交换链路层数据来保持连接。连接间隔是两个连接事件之间的时间,使用一个单元值为1.25ms的步进。连接间隔从最小值6(7.5ms)到最大值3200(4.0s)。
不同的应用也许需要不同的连接间隔,一个长时间的连接间隔将会节约更多的能量,因为设备可以在两个连接事件之间睡眠更长的时间。但是他会导致数据发送不及时,如果有数据要发送那么他只能够在下一次连接事件到来时才能被发送。
从机延迟——这个参数描述了从机跳过连接事件的次数。这使外围设备具有一定的灵活性,如果它不具有任何数据传送,它可以选择跳过连接事件,并保持睡眠,从而提供了一些积蓄力量。这一决定取决于外围设备。
监督超时——这是两个成功的连接事件之间间隔的最大值。如果超过这个时间还未出现成功的连接事件,那么设备将会考虑失去连接,返回一个未连接状态。这个参数值使用10ms的步进。监督超时时间从最小10(100ms)到最大3200(32.0s)。同时超时时间必须大于有效连接事件。
有效连接事件时间 = 连接间隔 X (1 + 从机延迟值)
在某些情况下,中央设备请求与外围设备建立连接包含连接参数对外围设备而言是不利的。在其他情况下,外围设备可以在连接过程中改变连接参数这个取决于外围设备的应用程序。外围设备可以请求中央设备改变连接参数通过设置连接参数更新请求。这个请求是被协议栈的L2CAP处理的。
这个请求包含四个参数:最小连接间隔、最大连接间隔、从机延迟、监督超时时间。这些值代表了外围设备针对连接的期望参数,连接间隔是以范围的形式提供的。当中央设备接收到这个请求, 他有权利决定是接受还是拒绝这些参数。
GAP通常还会负责启动BLE连接的安全功能。只有对通过身份验证的连接而言某些数据是可读或可写的。一旦形成一个连接,两个设备可以通过一个过程被称为配对。进行配对时,密钥建立加密和认证的链接。在一个典型的案例,外围设备需要中央设备提供密钥以完成配对过程。这可能是一个固定值,如“000000”,或可能是一个随机生成的值被提供给用户。中央设备发送正确的密钥后,两台设备交换安全密钥加密和验证的链接。
在许多情况下,相同的中央设备和外围设备将会经常建立连接和断开连接。BLE具有一个安全功能允许两个设备在配对的时候给对方一个长久的安全密钥。此功能称为绑定,使得两个重连设备能够迅速重新确立加密和认证而不需要经过充分的配对过程,只要它们存储长期的密钥信息。
2、BLE SPEC以及IOS对connection parametrs的一些限制:
关于更新连接参数 ConnectionParameter Update Request
有阅读蓝牙协议栈和一些材料,简单的说就是主机决定连接参数的值( connection interval, slave latency, timeout),从机可以请求更新这些参数,主机决定是不是接受,接受的值是多少。所以是会出现手机接受参数后和从机请求的参数有偏差,或者甚至是拒绝(ios)。
这里不得不提到:android 和 ios 的ble开发与兼容不是一个等级。
相同点:android 和 ios 都是在手机和设备建立连接时就会默认设置这些参数,app开发是无法修改这些参数的,这些默认参数由手机厂商决定。
不同点:当产品基于功耗等的考虑是应该要修改这些参数的,都是由从机提出更新申请,ios 有保护机制当从机给的参数超过它的范围它会拒绝这些不合理参数,然后使用默认值。而android 目前(4.3 4.4)是都会接受从机的更新参数,即使不合理。这里就会照成一种 设备通信 ios可以 android出问题 而且android即使接受参数并且使用这些参数更新后还会出现和参数不和的现象,典型的就在这个timeOut上,是会比更新请求里的timeOut长而且不同手机长的时间不一样。ios 好像是长5秒
所以,总结为Android目前遵守BT Spec的需求,但IOS设备还有自己独立的要求:
1)Spec要求1:
连接间隔从最小值6(7.5ms)到最大值3200(4.0s)。
2)Spec要求2:
Refer to section 9.3.9.2, Vol 3,Part C of the Core 4.0 BT spec. The application should retry the 'connection paramter update' procedure after time TGAP(conn_param_timeout) which is 30 seconds.
所以必须要等30s之后才能进行第二次更新。即不要频繁更新。
3)IOS的要求如下:
Interval Max * (Slave Latency + 1) ≤ 2 seconds
Interval Min ≥ 20 ms
Interval Min + 20 ms ≤ Interval Max
Slave Latency ≤ 4
connSupervisionTimeout ≤ 6 seconds
Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout
3、影响BLE功耗的参数:
首先,应该明白蓝牙BLE设备的几个状态:从机处于待机,广播,连接状态中的一种,主机处于待机,扫描,连接状态的一种。connection interval是连接状态的参数,两设备没有连接,该参数就不会影响其这个状态的功耗。
再次,设备在不是在连接状态一般就处于广播状态,降低功耗,当然可以增大广播间隔。其原理是蓝牙设备每隔一定的周期(广播间隔)后唤醒发射广播报文,其余时间处于sleep状态,功耗为1uA(PM2模式),增大了广播间隔,睡眠时间长,自然就降低了功耗。
所以影响功耗的参数,包含ADV parameter和connection parameters,在不同的状态下发挥作用;
4、延伸----怎样提升BLE的传输速度:
对于BLE来讲,传输速度与功耗总是矛盾的,如何解决好这个问题,是一个大课题,这也是BLE目前正在追求的目标。
这里只是站在Host和APP的角度来总结一下,可以提升BLE 传输速度的方式:
1)双方协调ATT_MTU大小;
2)选择合适的连接参数,例如减小BLE connection interval会提升数据交互频率;
3)选择一些不需要rsp的操作方式,例如write without rsp或notification等;
————————————————
版权声明:本文为CSDN博主「no输给现实」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/z497544849/article/details/74971201