文章目录
-
前言
通过"GR5x系列BLE知识及应用专题" 系统介绍一些 BLE 涉及的知识概念, 以及如何使用 Goodix GR5xx 系列芯片的SDK进行BLE应用开发。
可以从下面网页获得 GR5xx 系列蓝牙芯片的介绍和选型参考.
1. 扫描
扫描是完成发现过程的一项重要任务。它需要能够接收广播包。有两种类型的扫描:被动扫描和主动扫描。
1.1 被动扫描 - Passive Scanning
在这种类型的扫描中,扫描者只监听广播包。广播者不会被告知收到了数据包:
1.2 主动扫描 - Active Scanning
当潜在的中央设备Central device在决定连接到ADV_IND数据包之前希望获得更多的信息时,通常使用这种类型的扫描。
在广播间隔内,扫描者发出SCAN_REQ数据包。广播者在SCAN_RSP数据包中响应更多信息。
我们看到广播和扫描活动是定期进行的。但是,请注意,广播者和扫描者并没有同步,因此这些活动必须重叠时才能开始发现。以下示例描述了一个特定的场景:
- 广播设置:广播间隔设为20ms
- 扫描设置:扫描间隔为50ms, 扫描窗口为25ms
上面的黑色虚线矩形框表示广播和扫描活动重叠的潜在时间位置,从而能够进行发现。
2. 连接
一旦扫描者获得足够的信息来决定要连接到哪个广播者(包括其MAC地址),它将成为启动器Initiator,启动BLE链路层连接过程。
BLE连接过程之前通常会有一个发现过程,因此设备会意识到彼此的存在。
2.1 连接过程
连接的过程包含:
-
建立连接请求
根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求
-
响应连接请求
当被连接设备收到连接请求后, 可以接受或拒绝连接. 如果接受连接请求, 就可以发送连接响应包; 如果拒绝连接, 就不用发送任何响应.\ -
确定连接参数
当连接请求被接受后, 连接的设备双方会协商确定连接参数. 包括 连接间隔、从设备延迟、监控超时等。在一般情况下, 建立连接时, 只要发起端发送的连接参数符合规范, 双方就会直接用此参数进行建连; 如果有一方认为 连接参数虽然合法但不符合当前的应用场景, 就可以在 建立完成后, 再发起连接参数更新. 进一步更新和协商双方使用的连接参数 -
建立连接
连接建立后, 即可开始进行双方的通讯和数据传输、或者根据场景需要进行连接参数更新、或者由于数据传输的完成或者场景的变化选择断开连接等.
完整的连接过程示意:
发起者成为链路层主节点,广播者成为链路层从节点。 [注: 区分主从节点, 约束了连接事件来临时候, Tx、Rx的顺序]
2.2 连接参数说明
连接过程中, 需要应用层维护的连接参数主要有3个: 连接间隔时间、从设备延迟、监控超时
参数 | 取值 | 功能描述 |
---|---|---|
连接间隔(Connection Interval) | 参数的单位为1.25 ms,范围是6 ~ 3200,即7.5 ms ~ 4s | 连接间隔决定了主设备和从设备的交互间隔,它是指在一个连接事件的开始到下一个连接事件的开始的时间间隔 |
从设备延迟(Slave Latency) | 该参数的范围为:0 ~ 499 | 从设备延迟用来指明从设备(外围设备)可以忽略的连接事件的个数。允许从设备在没有数据要发的情况下,跳过一定数目的连接事件,在这些连接事件中不必回复主设备的包,这样就能更加节约功耗。但从设备可以忽略的连接事件个数不应超过设置的“从设备延迟”参数的值 |
监控超时(Supervision Timeout) | 参数的单位是10 ms,范围是10 ~ 3200,即100 ms ~ 32s | 这个超时时间是指两次成功的连接事件之间的最大可允许的时间。如果在这段时间内都没有一个成功的连接事件,主从设备会断开当前连接。 |
-
连接间隔、从设备延迟以及监控超时这三者必须满足如下公式:Supervision Timeout > (1 + slave Latency) * (connection Interval) * 2,否则无法建立连接
-
这三个连接参数在不同的配置情况下,将对通信速率和功耗产生影响:
- 连接间隔缩短,主设备和从设备通信更加频繁,缩短数据发送周期,增加功耗。
- 连接间隔增长,主设备和从设备通信频率降低,增长数据发送周期,降低功耗。
- 如果从设备延迟设置为0,每次连接事件中都需要回复主设备的包,将提高数据发送速度,增加功耗
2.3 连接事件
一旦连接,主设备和从设备将定期交换数据包,称为“连接事件”。
如果没有其他数据可交换,则交换0字节数据包,也就是空数据包。也叫作空包交互.
2.4 连接参数更新
- 连接建立时,主设备通过连接请求数据包发送连接参数, 确立了连接建立时候使用的连接参数。当连接活跃了一段时间后,连接参数可能不再适用于当前应用。为此,主设备可向从设备发送连接参数更新请求(Connection Parameter Update Request),也可直接通知从设备更新参数而不需要进行协商。
- 另外,从设备可能会根据APP的需要在连接的过程中去更新连接参数,从而向主设备发送连接参数更新请求。对于蓝牙4.1兼容设备,这个请求由链路层来处理;对于蓝牙4.0设备,则由L2CAP层来处理。低功耗蓝牙协议栈会自动选择更新的方法。
- 无论是由主设备发起的连接参数更新请求还是从设备发起的连接参数更新请求,都只能由主设备发起连接参数更新通知来应用新的连接参数。
2.5 连接终止
连接终止是指断开链路,双方设备从连接态转为就绪态。主设备和从设备都可以主动发起连接终止的通知消息(LL_TERMINATE_IND),当收到对端设备的ACK响应(LL_ACK)之后,双方设备即退出连接的状态,具体流程如图所示.
参考 1. 快速入门BLE.BLE链路层