BLE 基础知识点

目录

1.BLE设备的MAC地址分类

2. MAC地址分类详解

3. 扫码机制

4. 扫描参数

5. 关闭扫描


1.BLE设备的MAC地址分类

BLE全称:Bluetooth Low Energy,低功耗蓝牙。

MAC全称:Media Access Control,设备的媒体存取控制地址,分类

2. MAC地址分类详解

Public Device Address(公共设备地址):

该MAC地址是唯一的,48bit需要向IEE申请购买,高24bit是公司标识,由IEEE分配,低24bit由公司内部自行定义。

Random Device Address(随机设备地址):

该地址是BLE协议新增的一种地址类型,该类型的设备地址不是固定分配的,而是设备启动后随机生成的。最高两位为“11”,剩下的46bit是一个随机数,不能全部为0或者1,。这46位随机数在一个上电周期内保持不变,下一次上电时可以改变,也可以保持不变。

Private Device Address(私有设备地址):

通过定时更新和地址加密两种方式,提高蓝牙地址的可靠性和安全性。根据地址是否加密分为Non_Resolvable Private Address和Resolvable Private Address。

1)Non_Resolvable Private Address:该地址不加密,不需要解析,会定时更新。相对安全,手机的蓝牙MAC地址一般属于这类。

2)Resolvable Private Address:该地址加密,需要解析,会定时更新。该类型的地址不能单独使用,需要和Public Device Address或者Static Device Address结合使用。

通过一个随机数和一个称为Identify Resolving Key(IRK)的密码生成地址,对地址进行加密。因此只能被具有相同IRK的设备扫描到,可以避免被未知设备扫描和追踪。低24位是随机数和IRK经过hash运算得到的hash值。

当对端BLE设备扫描到该类型的蓝牙地址后,会使用保存在本地的IRK和该地址中的Prand进行相同的hash运算,并将运算结果和地址中的hash字段比较,如果相同才进行后续操作,这个过程称为resolve(解析)。如果不同则继续使用下一个IRK重复上述过程,直至找到一个关键的IRK或者一个也找不到。

3. 扫码机制

扫描是主机设备在一定范围内寻址其他低功耗蓝牙设备广播的过程。扫描设备在扫描过程中活使用广播信道。

在BT 4.2协议中,广播包大小为31B,如果主机采用主动扫描,还有一个31B的广播回包,最多可实现63个字节的空间。BT5.0中,把广播信道抽象为两种,一种是主广播信道,类似于蓝牙4.x的广播,只在37,38,39三个信道工作,最大广播广播包大小为31个字节。另一种叫次广播信道,或者第二广播信道,允许在三个通道外的其他37个信道上发送长度在255B之内的数据。

1) 被动扫描

扫描设备仅仅监听广播,不向广播设备发送任何数据。  注意:被动扫描不会向从设备发送任何数据。 

2)主动扫描

主动扫描可以捕获到对端设备的广播数据包,还可以捕获到响应包,并区分这两种包。主机会给从设备发送一个扫描请求,从设备返回一个扫描响应包,同样也产生一个包含扫描响应数据的Adv_Report事件给主机。

4. 扫描参数

在执行扫描之前会先设置扫描参数,接着进行扫描初始化,调用nrf_ble_scan_start()启动主机扫描。LE扫描参数如下:

 

命令

操作码

命令参数

返回参数

HCI_LE_Set_Scan_Parameters

0x000B

LE_Scan_Type

Status

LE_Scan_Interval

LE_Scan_Window

Own_Address_Type

Scanning_Filter_Policy

  • LE_Scan_Type:设置扫描类型,1B

参数值

功能描述

0x00

被动扫描,不发送PDUs(默认)

0x01

主动扫描。可以发送PDUs

0x02-0xFF

预留值

  • LE_Scan_Interval:扫描的时间间隔,2B,是指从控制器开始最后一次LE扫描到后续LE扫描的时间间隔。默认10ms,时间范围为:2.5ms ~ 10.24s。
  • LE_Scan_Window:扫描的持续时间,2B,默认10ms,时间范围2.5ms ~ 10.24s。
  • Own_Address_Type:表示主机扫描解析地址,1B。
  • Scanning_Filter_Policy:表示主机扫描过滤策略,1B。

参数值

功能描述

0x00

接受所有广播,除了定向广播不发送到这个设备,默认

0x01

只接受来自广播客户地址在白名单中的设备广播包。

0x02

接受所有广播,除了定向广播包,其中发起者的身份地址不针对这个设备。

0x03

接受所有广播

0x04-0xFF

预留值

5. 关闭扫描

  • 主函数不需要关闭主机扫描,但是有几处关闭扫描的位置:
  • 在开始设置扫描参数的nrf_ble_scan_default_param_set()里,会先调用nrf_ble_scan_stop()关闭之前的扫描。
  • 在启动主机扫描函数nrf_ble_scan_start()里,调用协议栈开始扫描之前会调用nrf_ble_scan_stop()关闭之前的扫描。
  • 在扫描完成后,主机发起连接时,连接从设备的函数中回调nrf_ble_scan_stop()关闭扫描。
  • 在扫描参数timeout扫描超时时,超过指定时间后,没有扫描到设备将自动停止扫描。
### 蓝牙BLE 5.0基础概念 蓝牙低能耗(Bluetooth Low Energy, BLE)是一种用于构建短距离无线连接的技术标准,旨在实现更低的功耗和成本。BLE 5.0版本引入了多项改进特性,显著提升了数据传输速率和支持范围。 #### 主要特点和发展历程 自2016年发布的BLE 5.0以来,该协议提供了两倍于前代产品的物理层吞吐量,最高可达2 Mbps[^1]。此外,BLE 5.0还增强了室内定位能力,并提高了广播模式下的性能表现。 #### 关键术语解释 - **GAP (Generic Access Profile)**: 定义设备如何被发现以及建立连接的方式。 - **GATT (Generic Attribute Profile)**: 描述服务、特征及其属性之间的交互方式。 - **Service**: 表示特定功能集的一组相关特性的集合。 - **Characteristic**: 包含实际值的数据点,可以读取或写入。 - **Descriptor**: 提供关于特性的附加信息,如单位或描述说明。 #### 连接过程概述 当两个支持BLE 5.0的设备想要通信时,通常会经历以下几个阶段: 1. 广播广告包来宣告自己的存在; 2. 扫描其他设备发送过来的信息; 3. 发起连接请求并等待响应; 4. 成功配对后进入稳定状态开始交换有效载荷数据。 ```python import bluetooth def scan_ble_devices(): nearby_devices = bluetooth.discover_devices(lookup_names=True) print("Found {} devices.".format(len(nearby_devices))) scan_ble_devices() ``` 上述Python脚本展示了简单的BLE扫描函数,能够检测周围可用的BLE设备列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值