蓝牙学习笔记

蓝牙学习笔记1-基础知识

1.学习目的

掌握蓝牙相关的一些知识
具备开发蓝牙项目的能力

2.什么是BLE?

BLE是蓝牙低功耗的简称(Bluetooth Low Energy)。BLE技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段。(鲁棒性Robust:指的是一个系统或者算法对于输入数据中的扰动或者噪声的抵抗能力。在计算机科学和机器学习中,鲁棒性通常被用来描述一个算法或模型的性能,即在面对不同类型的数据输入、数据分布、数据噪声等变化时,其输出结果的稳定性和准确性)

3.蓝牙如何实现连接与通信

通信是双向的,为了创建和维持一个BLE通信连接,在蓝牙中引入了”角色“这一概念。一个BLE设备不是主机(集中器)角色就是从机(外围设备)角色,这是根据是谁发起这个连接来确定的。主机设备总是连接的发起者,而从机总是被连接者。整个访问与连接过程都在通用访问规范(Generic Access Profile,GAP)进行实现的。

3.1.1从机广播

从机要被主机连接,那么它就必须被主机发现。这个时候,从机设备把自身信息以广播形式发射出去。
比如设备A需要先进行广播,即设备A(Advertiser)不断发送广播信号,每个广播中间的空闲时间就是广播间隔。每发送一次广播包,我们称为一次广播事件(advertising event),因此广播间隔也称为广播事件间隔。如下图所示。广播事件是一阵一阵的,每次都会有一个持续的时间,蓝牙芯片只有在广播事件期间才打开射频模块发射广播,这个时候功耗比较高,其余时间蓝牙芯片都处于空闲待机状态,因此平均功耗就非常低。
广播事件

3.1.2主机扫描

假设从机设备 (advertiser) 不断发送广播信号给主机(Observer),如果主机设备不开启扫描窗口,主机也是无法收到从机设备的广播的。如果如下图 所示,不仅主机要开启射频接收窗口,而且只有主机的射频接收窗口跟广播发送的发射窗口匹配成功,主机设备才能收到从机设备的广播信号。由于这种匹配成功是一个概率事件,因此主机扫到从机设备也是一个概率事件,比如主机有时会很快扫到从机设,只需要一个广播事件,也有可能主机会很慢才能扫到设备 A,比如需要 10 个广播事件甚至更多。
那么下面图 描述了主机主动扫描广播的过程:
主机设备链路层收到扫描数据包后将向主机发送一个广播报告事件(adv_report),该事件同样包括了链路层数据包的广播类型。因此,主机能够判断对端设备是否可以进行连接或者再扫描,并且区分出广播数据包和扫描响应数据包。
广播频道

3.1.3发送与接收数据

一旦连接成功后,主机(master) 和从机 (slave) 在每一个连接间隔 (Connection Interval)开始的时候,都必须交互一次,即主机 (master) 给从机 (slave) 发一个包,从机 (slave) 再给主机(master)r发一个包,整个交互过程称为一个连接事件 (connection event)。蓝牙芯片只有在 connection event 期间才把射频模块打开,此时功耗比较高,其余时间蓝牙芯片都是处于空闲(idle) 状态的,因此蓝牙芯片平均功耗就非常低。主机 (master) 不可能时时刻刻都有数据发给 slave,所以 master 大部分时候都是发的空包 (empty packet) 给从机 (slave) 。同样从机(slave)也不是时时刻刻都有数据给主机(master),因此从机(slave)回复给主机(master)的包大部分时候也是空包。另外在一个
connection event 期间,主机 (master) 也可以发多个包给从机 (slave),以提高吞率。综上所述,连接成功后的通信时序图应该如下图所示
连接事件

4.BLE的结构

蓝牙里把蓝牙协议的实现代码称为协议栈(protocol stack),BLE协议栈是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8256f68f9aee4173a0ad030e8bdd9312.png
在这里插入图片描述
从上图可知,一个蓝牙工程应用被分为了三个层,分别为应用层,主协议层,控制层。

  • 控制层(Controller)
    PHY 层(Physical layer 物理层)。PHY 层用来指定 BLE 所用的无线频段,调制解调方式和方法等。PHY 层还决定了传输数据的速度、整个 BLE 芯片的功耗、灵敏度以及 selectivity 等射频指标的配置。
    LL层(Link Layer 链路层)。LL 层是整个 BLE 协议栈的核心,也是 BLE 协议 的难点和重点。像 Nordic 的 BLE 协议栈能同时支持 20 link (连接),就是 LL 层的功劳。LL 层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK 如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL 层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的 GAP 或者 ATT。
    HCI(Host controller interface) 。HCI是可选的,HCI主要用于 2 颗芯片实现 BLE 协议栈的场合,用来规范两者之间的通信协议和通信命令等。
  • 主协议层(Host)
    L2CAP 层(Logic link control and adaptation protocol)。L2CAP 对LL 进行了一次简单封装,LL只关心传输的数据本身,L2CAP 就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。
    SMP(Secure manager protocol) 。SMP 用来管理 BLE 连接的加密和安全的,如何保证连接的安全性,同时不影响用户的体验,这些都是 SMP 要考虑的工作。
    ATT (Attribute protocol) 。简单来说,ATT 层用来定义用户命令及命令操作的数据,比如读取某个数据或者写某个数据。BLE 协议栈中,开发者接触最多的就是 ATT。BLE 引入了 attribute 概念用来描述一条一条的数据。Attribute 除了定义数据,同时定义该数据可以使用的 ATT 命令,因此这层被称为 ATT 层。
    GAP层(Generic access profile)。GAP 是对 LL 层payload (有效数据包) 如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP 简单的对 LL payload 进行一些规范和定义,因此GAP 能实现的功能极其有限。GAP 目前主要用来进行广播,扫描和发起连接等。
    GATT (Generic attribute profile ) 。GATT 用来规范 attribute 中的数据内容,并运用 group (分组)的概念对 atribute 进行分类管理。没有 GATT,BLE 协议栈也能跑,但互联互通就会出问题,也正是因为有了 GATT 和各种各样的应用 profile,BLE 摆脱了 ZigBee 等无线协议的兼容性困境,成了出货量最大的 2.4G 无线通信产品。
  • 应用层(Profiles)
    最上层的 Profiles 层里,包含的公共任务和私有任务。其中公共任务是 SIG 蓝牙协议小组定义的蓝牙任务,私有任务是用户或者企业自定义的蓝牙任务。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值