没有合适的资源?快使用搜索试试~ 我知道了~
首页意法半导体v3.x BLE协议栈编程指南:低功耗蓝牙应用开发详解
本文档是一份详细的低功耗蓝牙协议栈v3.x编程指南,面向开发人员提供了关于如何利用意法半导体提供的BLE(蓝牙低功耗)库框架、API接口以及事件回调来开发低功耗蓝牙应用的实用教程。v3.x版本相较于之前的v2.x系列,有显著的改进和关键变化,特别是对于支持的设备如BlueNRG-LP和BlueNRG-LPS(至少v3.1及以上),其设计更加注重节能,适用于运行于纽扣电池的长时间工作场景。 文档首先介绍了BLE技术的基本原理,包括其由蓝牙技术联盟开发的初衷,即通过低功耗实现纽扣电池驱动设备的长期无线连接。相比于传统的蓝牙,BLE通过快速跳频和简化连接流程降低了功耗,特别适合传感器应用,如汽车、运动健身、医疗、娱乐、家庭自动化和安全领域。 BLE协议栈架构方面,文档提到了蓝牙4.0标准中对低功耗蓝牙的支持,并区分了两种无线技术系统。这份指南详细解释了如何使用v3.x系列的API和事件回调,包括但不限于设备初始化过程中的不同,以及如何将这些技术特性与实际应用设计相结合。 对于开发者来说,本文档不仅提供了技术细节,还涵盖了基础概念的介绍,旨在帮助读者建立起对BLE技术的全面理解。在阅读过程中,如果遇到特定设备或功能的区别,文档会明确指出适用性。最后,手册结构清晰,分为蓝牙技术原理、API和回调概述、以及应用设计步骤,便于开发者按部就班地进行学习和实践。 这是一份实用且深入的指南,对于希望通过BLE技术开发低功耗应用的开发人员来说,无论是初次接触还是进阶学习,都具有很高的参考价值。
资源详情
资源推荐
PM0269
安全管理器(SM)
PM0269 -
第
5
版
第
16
页,共
118
页
有三种输入功能:
• 无输入
• 能够选择是/否
• 能够使用键盘输入数字。
有两种输出功能:
• 无输出
• 数字输出:能够显示六位数字
下表显示了可能的 IO 功能组合:
表 7. 低功耗蓝牙设备上输入/输出功能的组合
无输出
显示
无输入 无输入,无输出 仅显示
是/否 无输入,无输出 显示是/否
键盘 仅键盘 键盘,显示
LE 传统配对
LE 传统配对算法使用并生成 2 个密钥:
• 临时密钥(TK):用于生成短期密钥(STK)的 128 位临时密钥
• 短期密钥(STK):用于在配对后加密连接的 128 位临时密钥
配对流程分为三个阶段。
第
1
阶段:配对特征交换
两个已建立连接的设备通过配对请求消息交换其输入/输出能力。此消息还包含一个指出带外数据是否可用的
位,以及验证要求。在第 1 阶段交换的信息将用于选择第 2 阶段使用的 STK 生成配对方法。
第
2
阶段:短期密钥(
STK
)生成
配对设备首先使用下列密钥生成方法之一定义临时密钥(TK):
1. 带外(OOB)法将带外通信(如 NFC)用于 TK 协议。它提供了身份认证(MITM 保护)。仅在两个设
备上都设置了带外位时才选择此方法,否则必须使用设备的 IO 功能来确定可以使用其他方法(输入密钥
法或直接工作法)
2. 输入密钥法:用户输入六位数字作为设备之间的 TK。它提供了身份认证(MITM 保护)
3. 直接工作法:该方法不提供认证,也不提供中间人(MITM)攻击防护
根据下表所定义的 IO 功能在输入密钥法和直接工作法之间进行选择。
表 8. 计算临时密钥(TK)的方法
仅显示
显示是
/
否
仅键盘
无输入,无输出
键盘,显示
仅显示 直接工作 直接工作 输入密钥 直接工作 输入密钥
显示是/否 直接工作 直接工作 输入密钥 直接工作 输入密钥
仅键盘 输入密钥 输入密钥 输入密钥 直接工作 输入密钥
无输入,无输出 直接工作 直接工作 直接工作 直接工作 直接工作
键盘,显示 输入密钥 输入密钥 输入密钥 直接工作 输入密钥
第
3
阶段:用于计算临时密钥(
TK
)的传输特定密钥分配方法
一旦第 2 阶段完成,可通过使用 STK 密钥加密的消息分配最多三个 128 位密钥:
PM0269
安全管理器(SM)
PM0269 -
第
5
版
第
17
页,共
118
页
1. 长期密钥(LTK):用于生成链路层加密和验证使用的 128 位密钥
2. 连接签名解析密钥(CSRK):用于在 ATT 层上执行数据签名和验证的 128 位密钥
3. 身份解析密钥(IRK):用于生成和解析随机地址的 128 位密钥
LE 安全连接
LE 安全连接配对方法使用并生成一个密钥:
• 长期密钥(LTK):用于在配对和后续连接后加密连接的 128 位密钥
配对流程分为三个阶段:
第
1
阶段:配对特征交换
两个已建立连接的设备通过配对请求消息交换其输入/输出能力。此消息还包含一个指出带外数据是否可用的
位,以及验证要求。在第 1 阶段交换的信息将用于选择第 2 阶段使用的配对方法。
第
2
阶段:长期密钥(
LTK
)生成
配对流程由发起设备启动,该设备将公钥发送至接收设备。接收设备将回复其公钥。对于所有配对方法(除了
OOB 以外),公钥交换阶段已完成。每个设备均产生自己的椭圆 Diffie-Hellman (ECDH)公钥 - 私钥对。每个
密钥对均包含一个私钥(密钥)和一个公钥。密钥对应仅在每个设备上生成一次,并可以在执行配对之前计算。
支持以下配对密钥生成方法:
1. 使用带外通信来建立公钥的带外(OOB)法。如果带外位在配对请求/响应中至少由一个设备设置,则选
择该方法,否则必须使用设备的 IO 功能来确定可以使用其他方法(输入密钥法、直接工作法或数字比较
法)
2. Just Works:该方法无需验证,并且不提供针对中间人(MITM)攻击的任何保护
3. 输入密钥法:该方法需要认证。用户输入六位数字。该六位数字是设备认证的基础
4. 数字比较:该方法需要认证。两种设备都将 IO 能力设为是/否或键盘显示。两个设备都计算在两个设备
上向用户显示的六位数字确定值:用户需要输入是或否来确认是否匹配。如果在两个设备上都选择是,
则配对执行成功。当多个设备具有相同名字的情况下,此方法可以确保用户设备与正确的设备连接
根据下表在可能的方法中选择。
表 9. 将 IO 功能映射到可能的密钥生成方法
发起方
/
响应方
仅显示
显示是
/
否
仅键盘
无输入,
无输出
键盘,显示
仅显示 直接工作 直接工作 输入密钥 直接工作 输入密钥
显示是/否 直接工作
直接工作
(LE 传统配对)
数字比较(LE 安全连接)
输入密钥 直接工作
输入密钥(LE 传统配对)
数字比较(LE 安全连接)
仅键盘 输入密钥 输入密钥 输入密钥 直接工作 输入密钥
无输入,无输出 直接工作 直接工作 直接工作 直接工作 直接工作
键盘,显示 输入密钥
输入密钥
(LE 传统配对)
数字比较(LE 安全连接)
输入密钥 直接工作
输入密钥(LE 传统配对)
数字比较(LE 安全连接)
PM0269
隐私
PM0269 -
第
5
版
第
18
页,共
118
页
注意:
如果可能的密钥生成方法未提供与安全属性匹配的密钥(经过身份验证
- MITM
保护或未经过身份验证
-
无
MITM
保护),则设备将发送配对失败指令,并显示“验证要求”的错误代码。
第
3
阶段:传输特定密钥分配
主设备和从设备之间交换以下密钥:
• 用于验证未加密数据的连接签名解析密钥(CSRK)
• 用于设备身份和隐私的身份解析密钥(IRK)
当设备保存确定的加密密钥以用于未来验证时,设备被绑定。
数据签名
还可以使用 CSRK 密钥,通过未加密的链路层连接传输已验证数据:12 字节签名位于数据有效负载之后。签
名算法还使用可防止重放攻击的计数器(一种外部设备,可以获取某些数据包然后发送。接收设备检查数据包
计数器并丢弃,因为其帧计数器少于最近接收的良好数据包)。
1.8 隐私
总是用相同地址信息(公共地址或静态随机地址)的广播设备,很容易被其他扫描设备追踪。然而,为了防止
这种情况发生,可以在广播设备上启用隐私功能。在启用了隐私的设备上,将使用私有地址。有两种私有地址:
• 不可解析私有地址
• 可解析私有地址
不可解析私有地址是完全随机的(两个最高有效位除外),不能进行解析。因此,使用不可解析私有地址的设
备不能被没有预先配对的设备识别。可解析私有地址由 24 位随机部分和哈希部分组成。哈希部分来源于随机
数和 IRK(身份解析密钥)。因此,只有知晓该 IRK 的设备能够解析地址并识别该设备。在配对过程中分发
IRK。
两种类型的地址都经常改变,从而增强了设备身份机密性。在 GAP 发现模式和过程期间不使用私有功能,仅
在 GAP 连接模式和过程期间使用隐私功能。
在 v4.1 及以下的低功耗蓝牙协议栈中,通过主机解析和产生私有地址。在蓝牙 4.2 中,隐私功能已从版本 1.1
更新到版本 1.2。在低功耗蓝牙协议栈 v4.2 中,控制器可以使用主机提供的设备身份信息来解析和生成私有地
址。
外设
启用了隐私功能的处于不可连接模式的外设将使用不可解析或可解析私有地址。
如需连接中央设备,外设设备中如启用主机隐私,则必须且只能使用非定向可连接模式。如启用控制器隐私,
则外设设备还可使用定向可连接模式。在可连接模式中,外设设备使用可解析私有地址。
无论使用的是不可解析还是可解析私有地址,均以 15 分钟的间隔时间自动重新生成。设备不向广播数据发送
设备名称。
中央设备
启用了隐私功能的执行主动扫描的中央设备只使用不可解析或可解析私有地址。为了连接外设,如果启用了主
机隐私,应使用通用连接建立流程。对于基于控制器的隐私,可使用任何连接流程。中央设备将使用可解析私
有地址作为发起方的设备地址。每间隔 15 分钟后生成可解析或不可解析私有地址。
广播设备
启用了隐私的广播设备使用不可解析或可解析私有地址。每间隔 15 分钟后将自动生成新地址。广播设备不应
将设备名称或唯一数据发送到广播数据。
观察者
启用了隐私的观察者使用不可解析或可解析私有地址。每间隔 15 分钟后将自动生成新地址。
PM0269
通用属性配置文件(GATT)
PM0269 -
第
5
版
第
19
页,共
118
页
1.8.1 设备过滤
BLE 通过减少设备的响应次数来降低功耗,以减少控制器与上层之间的传输和交互。设备过滤通过白名单来
实现。启用白名单后,链路层将忽略不在白名单中的设备。
在蓝牙 4.2 之前,当远程设备使用隐私功能后,无法实现设备过滤。由于引入了链路层隐私特性,可以在检查
远程设备身份地址是否在白名单中之前解析远程设备身份地址。
1.9 通用属性配置文件(GATT)
通用属性配置文件(GATT)定义了使用 ATT 协议的框架,它被用于服务、特征、描述符发现、特征读取、写
入、指示和通知。
就 GATT 而言,当两个设备已经连接时,有两种设备角色:
• GATT 客户端:通过读取、写入、通知或指示操作访问远程 GATT 服务器上的数据的设备
• GATT 服务器:在本地保存数据并向远程 GATT 客户端提供数据访问方法的设备
一个设备可以既是 GATT 服务器又是 GATT 客户端。
设备的 GATT 角色在逻辑上独立于主、从角色。主、从角色定义了低功耗蓝牙无线连接的管理方式,而 GATT
客户端/服务器角色由数据存储和数据流动来决定。
从(外围)设备是 GATT 服务器以及主(中央)设备是 GATT 客户端,这是最常见的,但不是必需的。
ATT 传输的属性封装在下列基础类型中:
1. 特征(具有相关描述符)
2. 服务(主要、次要和包含服务)
1.9.1 特征属性类型
特征是一种包含单个值和任意数量描述符的属性类型,描述符描述的特征值使用户能够理解该特征。
特征揭示了值代表的数据类型、值是否能够读取或写入以及如何配置要指示或通知的值,它还描述了值的含义。
特征具有以下组成部分:
1. 特征声明
2. 特征值
3. 特征描述符
PM0269
通用属性配置文件(GATT)
PM0269 -
第
5
版
第
20
页,共
118
页
图 11. 特征定义示例
特征声明是一种属性,其定义如下:
表 10. 特征声明
句柄属性
属性类型
属性值
属性权限
0xNNNN
0x2803
(特征属性类型的 UUID)
特征值属性(读取、广播、
写入、写入但不响应、通
知、指示等)。确定如何能
够使用特征值或如何能够访
问特征描述符
“只读,无验证,无授权”
特征值属性句柄
特征值 UUID(16 或 128
位)
特征声明包含特征值。该值是特征声明后的第一个属性:
表 11. 特征值
句柄属性
属性类型
属性值
属性权限
0xNNNN
0xuuuu – 16 位或 128 位(特征 UUID) 特征值 取决于更高层配置文件或应用
剩余117页未读,继续阅读
冻结的鱼
- 粉丝: 1829
- 资源: 157
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功