Advertising State:

在广播状态下, 链路层在广播事件中发送广播 PDU 。 广播事件
共有 4 种:

  • 非定向可连接事件(ADV_IND)
  • 定向可连接事件(ADV_DIRECT_IND)
  • 非定向扫描事件(ADV_SCAN_IND)
  • 非定向不可连接事件(ADV_NONCONN_IND)

1. 广播通道的选择:
在广播事件中, 每一个广播事件都会在 3 个广播信道中进行数据传输, 而且每一个事件都是以最小的信道编号开始传输。也就是说当广播事件来了,这个 PDU 是依次从广播通道 37、 38、 39 中进行传输。

2. 广播间隔:
对于说有非直连广播事件,两个广播事件之间的间隔即T_advEvent计算如下
T_advEvent = advInterval + advDelay

Advlnterval即广播间隔,广播间隔必须是0.625ms的整数倍,且范围应该是20ms到10.24s之间。如果广播事件既不是非定向扫描事件(ADV_SCAN_IND),也不是非定向不可连接事件(ADV_NONCONN_IND),那么广播间隔不能小于100ms。如果广播事件是非定向可连接,则广播间隔必须大于或等于20ms。也就是说Connectable
Directed 必须大于100ms;

advDelay 广播延时,为0到10msz之间的随机数。

blemesh的广播间隔_随机数

3. 广播事件

  • 3.1 非定向可连接事件(ADV_IND)

非定向可连接事件是我们最常用到了,它允许Scaner回复扫描请求或Iintiator回复连接请求。Scaner可以回复一个扫描请求(SCAN_REQ PDU) ,要求广播者提供更多的信息。Iintiator可以发送一个连接请求CONNECT_REQ PDU,去要求链路进入连接态。

两个ADV_IND PDUs 之间的间隔必须小于等于10ms.当进入广播间隔后广播状态会关闭。每个广播事件都包含三个不同广播通道的数据包

*** 不存在扫描请求时,时序图如下。***

blemesh的广播间隔_时序图_02

***2. 收到扫描请求时,时序图如下***

如果广播者收到带有设备地址的SCAN_REQ PDU,并通过了广播过滤策略,则广播者一定(shell 强制)在同一广播通道回复SCAN_RSP PDU ,当SCAN_RSP PDU被发送出去后,广播者会发送下一广播通道的ADV_IND PDU或关闭广播。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。

blemesh的广播间隔_blemesh的广播间隔_03

blemesh的广播间隔_时序图_04

***3. 收到连接请求时,时序图如下***

如果广播者收到带有设备地址的CONNECT_REQ PDU ,并通过了广播过滤策略,广播者会退出广播态,以Slave Role的角色进入连接态。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。时序图如下

blemesh的广播间隔_blemesh的广播间隔_05

  • 3.2 定向可连接事件(ADV_DIRECT_IND)

当ADV_DIRECT_IND PDU被发送出去后,广播者会监听CONNECT_REQ PDUs
连接请求包,其他扫描请求包会被忽略。ADV_DIRECT_IND PDU 包含了发起者的设备地址和广播者的设备地址。CONNECT_REQ PDU 也包含了两个地址发送者的地址和广播者的设备地址。只有接收到对应的CONNECT_REQ PDU,广播者才会进入连接态,或者广播者会发送下一广播通道的ADV_DIRECT_IND PDU或关闭广播。 在同一个广播通道广播的ADV_DIRECT_IND PDU 之间的间隔不能大于3.75ms 。进入广播态不能超过1.28s.

blemesh的广播间隔_时序图_06

  • 3.3 非定向扫描事件(ADV_SCAN_IND)

这个广播其实是一个非定向可发现的广播,它和通用广播的时间
控制是一样的,应答也是 SCAN_REQ PDU 和 SCAN_RSP PDU,这个广
播和通用广播的区别是,它不能建立连接, 只能处于广播态或者就绪态。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据中, 而静态数据可以包含于扫描响应数据之中。 当广播者接收到一个来自扫描者的SCAN_REQ PDU 包,包里含有广播者的设备地址,并通过了广播过滤策略时,广播者回复SCAN_RSP PDU 。如果没有通过广播过滤策略,广播者会发送下一广播通道的ADV_IND PDU 或关闭广播。

blemesh的广播间隔_时序图_07


blemesh的广播间隔_时序图_08

3.4 非定向不可连接事件(ADV_NONCONN_IND)

这个事件只广播,不能监听来自扫描者和发起者的信息,不能进入连接态

blemesh的广播间隔_数据_09

4.四种状态是否可连接可扫描

blemesh的广播间隔_数据_10

由此可以看出

  • ADV_IND 可以对扫描请求就行回复,也可以被连接。
  • ADV_DIRECT_IND 不会对扫描请求进行回复,可以被正确地址的发起者连接。
  • ADV_NONCONN_IND不会对扫描请求进行回复,不能被连接。
  • ADV_SCAN_IND 可以对扫描请求进行回复,当不能被连接。