BLE通道介绍:
1、BLE有40个通道,37个是数据通道,3个广播通道
37 2.402MHZ
38 2.426MHZ
39 2.435MHZ
2、3个广播通道是分散的,BLE数据传输过程中采用跳频技术(自适应频率跳变),而跳频的计算要就要考虑跳过广播通道,3个广播分散的另一个好处就是有利于避开干扰。
3、广播是 37 38 39 建立连接之后是 通过剩下37个通道进行数据传输,这些数据通道是在连接建立时动态分配的,以便在通信过程中进行频率跳变,以减少干扰并提高通信的可靠性。
BLE蓝牙广播类型:
一般BLE蓝牙广播类型主要有四种:
1. 可连接非定向 (ADV_IND): 这是最常见的广播类型,可以被任何设备扫描并连接(最常用的广播方式)。
2. 可连接定向(ADV_DIRECT_IND): 这种类型的广播是直接针对特定设备的,只有被指定的设备才能连接(用于快速连接)。
3、 不可连接非定向(ADV_NONCONN_IND): 这种类型的广播不能被扫描也不能被连接,通常用于发送广播数据。又分为两种分别是(用于信标,传感器):
(1)定向高占空比模式:在这种模式下,设备会以非常高的频率发送广播,这样可以使得接收设备更快地发现广播设备,从而减少连接建立的延迟。但是,这种模式会消耗更多的电能。
(2)定向低占空比模式:在这种模式下,设备会以较低的频率发送广播,这样可以节省设备的电能,但可能会增加连接建立的延迟
4、可扫描非定向 (ADV_SCAN_IND): 这种类型的广播可以被任何设备扫描,但不能被连接()
对以上四种的类型的总结:
广播分类:传统广播和扩展广播
传统广播:
只使用了 37,38,39 这三个通道(传统广播数据的长度上限是31个字节 )
传统广播数据只有31个字节,如果设备名称太长了,又有很多信息需要广播,31字节不够用的,这时候可以借用扫描响应的数据包,发送一些数据。广播和扫描响应包的用法基本相同,
广播数据和扫描回应数据,它们的长度都不能超过31个字节(0 ~ 31)。
扫描响应包:是BLE设备在进行广播时发送的一种数据包。通常在可连接广播数据包之后发送的。扫描响应包含有额外的信息,例如设备名称、服务UUID等,以便扫描设备可以获取更多关于广播设备的信息。这有助于提供更丰富的广播数据,并使扫描设备能够更好地了解周围的BLE设备。
扫描响应包的内容,通常情况下,它包含以下信息:
1、 设备名称:广播设备的人类可读的名称,使用户能够识别设备。
2、服务UUID:标识设备提供的BLE服务的唯一标识符。这些UUID可以帮助扫描设备了解广播设备支持的服务类型。
3、制造商特定数据:一些特定于制造商的自定义数据,用于提供额外的设备信息或特性。
扩展广播:
使用了两组广播通道(扩展广播数据长度上限是255 个字节):
主要广播通道也使用了 37,38,39 这三个通道,
次要广播通道则使用剩余的 37(0~36) 个通道。
这种设计使得扩展广播能够支持更长的广播数据包长度和更灵活的数据交换
在BLE中,0到36的通道被称为数据通道,但在Bluetooth 5.0及以上版本的扩展广播中,这些通道也可以用作次要广播通道。
在扩展广播中,主要广播通道(37、38、39)用于发送广播包的头部信息,而次要广播通道(0到36)用于发送广播包的主体信息。这是因为扩展广播允许在广播阶段发送更多的数据,而不仅仅是在连接阶段。因此,尽管0到36的通道在连接阶段被用作数据通道,但在广播阶段,它们可以被用作次要广播通道来发送更多的数据,比如:广播包的主体信息,包括设备名称、服务UUID等信息。
这种设计使得BLE设备能够在还没有建立连接的情况下,通过广播发送更多的数据,从而提高了数据传输的效率。
广播数据类型解释:
以下是经常用到的类型,简单总结:
0x01:设备标识
- bit 0: LE 有限发现模式
- bit 1: LE 普通发现模式
- bit 2: 不支持 BR/EDR
- bit 3: 对 Same Device Capable(Controller) 同时支持 BLE 和 BR/EDR
- bit 4: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR
- bit 5..7: 预留
0x02~0x03:16bitUUID
0x04~0x05:32bitUUID
0x06~0x07:128bitUUID
0x08~0x09:设备名称
0x0a:发射功率
0xff:厂商自定义数据
例子1:传统广播:
实际显示的广播数据
由上图可以看出,广播数据有三种类型
0x01 的值是0x1a 转换成二进制==>0001 1010 可知 1、3、4bit被置位了
0x0a 是广播自己的发射功率 为 0x0c
0xff 是厂商自定义数据
广播长度计算: 2+1+2+1+10+1 = 17(LEN 本身也是广播数据所以要加1)
例子2:传统广播和扫描响应:
代码设置
实际显示的广播数据
由上图可知 广播数据有四种类型
0x01 的值是0x06 转换成二进制==>0000 0110 可知1、2bit被置位了(type1是BLE底层自己加进去的,跟BLE底层存在关系)
0x07 是128位UUID
0xff 是厂商自定义数据
0x09 是设备名称
广播长度计算:2+1+17+1+9+1=31;
扫描响应长度:8+1=9;