蓝牙BLE tips1-广播

包组成结构

低功耗蓝牙一共有40个信道,频段范围从2402Mhz-2480Mhz,每2Mhz一个信道,37 38 39 是广播信道,其余为数据信道

蓝牙BLE tips1-广播_第1张图片

一个广播信道最长37字节,有6字节用作蓝牙设备的MAC地址,我们只需要关注剩余的31个字节就可以了,这31个字节又给分为若干个广播数据体,蓝牙规范中称为AD Structure,每个结构体又分为三部分组成,分别是长度,类型,内容,其中长度占用一个字节,类型一个字节,内容占用若干个字节,长度=类型的字节数+内容占用的字节数=1+N

蓝牙BLE tips1-广播_第2张图片

我们来看一下一个具体的例子,下面是一个广播数据包包含两个AD structure,第一个数据包的长度是4,表示后面四个字节的第一个字节为类型,后面三个字节的为数据;第二个数据的长度为3,表示后面三个字节的第一个字节为类型,后两个字节为数据。如果不够31个字节系统会自动补全

蓝牙BLE tips1-广播_第3张图片

我们再来看一下下面这个例子,包含三个AD structure,三个数据类型分别为设备名称,发射功率,厂商自定义数据,第一个AD structure表示这个数据设备名称为1234,第二个AD structure表示发射功率是8dBm

蓝牙广播分类

蓝牙广播类型可以分为如下四类,分别为

  • 可连接非定向(最常用的广播方式)

  • 可连接定向(用于已配对设备中的快速连接)

  • 不可连接非定向(用于蓝牙信标,传感器)

  • 可扫描非定向,(可扫描响应承载更多的数据)

不同分类

蓝牙BLE tips1-广播_第4张图片

/*adv type*/
enum {
    ADV_IND = 0,         /*Connectable and scannable undirected advertising*/
    ADV_DIRECT_IND,      /*Connectable high duty cycle directed advertising */
    ADV_SCAN_IND,        /*Scannable undirected advertising*/
    ADV_NONCONN_IND,     /*Non connectable undirected advertising*/
    ADV_DIRECT_IND_LOW,  /*Connectable low duty cycle directed advertising*/
};

ADV_IND

ADV_IND(Advertising Indication)是蓝牙广播中最常见的一种类型之一,具有以下特点:

  1. 可见性:ADV_IND广播是可见的,意味着其他蓝牙设备可以在扫描过程中检测到并接收到这种广播。它被用于向周围的设备宣传自身的存在和提供的服务。
  2. 广播间隔:ADV_IND广播具有固定的广播间隔,通常在单位时间内以固定频率广播。这个广播间隔可以根据需要进行调整,以平衡广播频率和设备的电源消耗。
  3. 设备信息:ADV_IND广播通常携带设备的基本信息,如设备名称、设备类型、服务UUID等。这些信息可以帮助其他设备在扫描过程中了解广播设备并识别其提供的服务。
  4. 连接建立:ADV_IND广播可以用于建立连接。当一个设备检测到另一个设备的广播时,它可以发起连接请求并与广播设备建立连接,进而进行进一步的数据交换和通信。
  5. 群发特性:ADV_IND广播可以同时被多个设备接收。这使得广播设备可以与多个周围设备进行通信,提供服务或传输数据。

总而言之,ADV_IND广播是用于宣传设备存在和提供服务的可见性广播类型。它提供了一种简单且可靠的方式,让其他设备能够发现和连接到广播设备。

ADV_IND广播常用于设备发现和连接建立的场景。例如,当一个蓝牙音箱启动时,它可以使用ADV_IND广播来通知周围的设备它的存在和提供的音频服务。其他设备可以通过扫描来检测到这个广播,并发起连接以接收音频流。

ADV_DIRECT_IND(Direct Advertising Indication)

ADV_DIRECT_IND是一种直接广播类型,用于在连接建立之前传输连接请求。它指示目标设备进行连接,并且只有目标设备能够接收到这种广播。这种广播类型通常用于实现设备之间的快速连接。

ADV_DIRECT_IND广播适用于需要建立快速连接的场景。例如,在蓝牙耳机与手机之间进行配对时,耳机可以使用ADV_DIRECT_IND广播发起连接请求,指示手机直接与它建立连接,以便快速建立可靠的连接。

ADV_NONCONN_IND(Non-Connectable Advertising Indication)

ADV_NONCONN_IND是一种非连接广播类型,用于向周围设备广播信息,但不建立连接。它通常用于向其他设备提供一些基本信息,而无需进行连接。由于不需要连接建立过程,因此这种广播类型的功耗较低。

ADV_NONCONN_IND广播适用于不需要建立连接的场景,只是向其他设备提供信息。例如,一个蓝牙温度传感器可以使用ADV_NONCONN_IND广播来定期广播当前的温度值,其他设备可以通过扫描来获取温度数据,而无需建立连接。

ADV_SCAN_IND(Scannable Advertising Indication)

ADV_SCAN_IND是一种可扫描广播类型,用于通知其他设备进行扫描操作。这种广播类型常用于被动扫描,以便其他设备能够检测到并与广播设备建立连接。

ADV_SCAN_IND广播适用于需要被动扫描的场景。例如,一个蓝牙手表可以使用ADV_SCAN_IND广播来通知周围的设备进行扫描,以便它们能够检测到手表并建立连接,从而实现数据传输或控制交互。

ADV_EXT_IND(Extended Advertising Indication)

ADV_EXT_IND是一种扩展广播类型,用于支持蓝牙5.0及更高版本的扩展功能。它提供了更大的广播数据容量和更灵活的配置选项,以满足复杂的广播需求。

ADV_EXT_IND广播适用于需要使用蓝牙5.0及更高版本的扩展功能的场景。例如,在需要传输大量数据的应用中,ADV_EXT_IND广播提供了更大的广播数据容量,可以更高效地传输数据。

你可能感兴趣的:(BLE,嵌入式硬件,ble,蓝牙)