ble 广播

1、广播协议层次

2、广播通信中,传输的PDU格式

Header(16bits) Payload(长度由Header中的“Length”字段决定)

pdu头参考:https://blog.csdn.net/Life_Maze/article/details/81395800

3、四种广播类型的应用场景

如果只需要定时传输一些简单的数据(如某一个温度节点的温度信息),后续不需要建立连接,则可以使用ADV_NONCONN_IND。广播者只需要周期性的广播该类型的PDU即可,接收者按照自己的策略扫描、接收,二者不需要任何额外的数据交互。

2)如果除了广播数据之外,还有一些额外的数据需要传输,由于种种原因,如广播数据的长度限制、私密要求等,可以使用ADV_SCAN_IND。广播者在周期性广播的同时,会监听SCAN_REQ请求。接收者在接收到广播数据之后,可以通过SCAN_REQ PDU,请求更多的数据。

3)如果后续需要建立点对点的连接,则可使用ADV_IND。广播者在周期性广播的同时,会监听CONNECT_REQ请求。接收者在接收到广播数据之后,可以通过CONNECT_REQ PDU,请求建立连接。

4)通过ADV_IND/CONNECT_REQ的组合建立连接,花费的时间比较长。如果双方不关心广播数据,而只是想快速建立连接,恰好如果连接发起者又知道对方(广播者)的蓝牙地址(如通过扫码的方式获取),则可以通过ADV_DIRECT_IND/CONNECT_REQ的方式。

4、广播通信的物理信道和广播事件

Link Layer允许Host在三个物理信道中,任意选取一个或者多个,用于广播。Link Layer将相同的广播数据,在每一个被中的Channel中,依次发送一次。

BLE设备最多可以在3个物理Channel上广播数据。也就是说,同一个数据(4中类型中的一种),需要在多个Channel上依次广播。因此,这样依次在多个Channel上广播的过程,就叫做一个Advertising Event。

与此同时,有些广播(如可连接、可扫描)发送出去之后,允许接收端在对应的Channel上,回应一些请求(如连接请求、扫描请求)。并且,广播者接收到扫描请求后,需要在同样的Channel上回应。这些过程,也会计算在一个Advertising Event中。

根据应用场景的不同,BLE协议也规定了不同类型的Advertising Event,包括:Connectable Undirected Event;Connectable Directed Event(包括Low Duty Cycle和High Duty Cycle);Scannable Undirected Event;Non-connectable Undirected Event。不同的Advertising Event,所对应的Advertising参数(如周期等)也不同。

5、广播周期

除High Duty Cycle Connectable Directed Event之外的其它Advertising Event来说,Advertising周期主要由advInterval、advDelay两个参数决定的。

advInterval是一个可由Host设定的参数:对于Scannable Undirected和Non-connectable Undirected两种Advertising Event,该值不能小于100ms(从功耗的角度考虑的,也决定了广播数据的速率);

对于Connectable Undirected和Low Duty Cycle Connectable Directed两种Advertising Event,advInterval值不能小于20ms。

advDelay则是一个0~10ms的伪随机数。

对于连接来说,如果事先不知道连接发起者的设备地址,则最快的连接速度可能是20ms。如果事先知道地址,使用High Duty Cycle Connectable Directed Event的话,则可能在3.75ms内建立连接。

按照蓝牙spec,实际上每一个广播事件包含三个广播包,即分别在37/38/39三个通道上同时广播相同的信息,即真正的广播事件是下面这个样子的。

参考:http://www.wowotech.net/bluetooth/ble_broadcast.html

https://blog.csdn.net/Life_Maze/article/details/81395800

猜你喜欢

转载自blog.csdn.net/Life_Maze/article/details/81395910