嵌入式应用角度学习BLE栈[1]


BLE入门总结


经典蓝牙与低功耗蓝牙对比

在这里插入图片描述

BLE的特点

  • 低成本、低功耗

    • 低功耗设计:蓝牙4.0版本强化了蓝牙在数据传输上的低功耗性能,功耗较传统蓝牙降低了90%。
    • 传统蓝牙设备的待机耗电量一直是其缺陷之一,这与传统蓝牙技术采用16——32个频道进行广播有很大关系,而低功耗蓝牙仅适用3个广播通道,且每次广播时射频的开启时间也有传统的22.5ms减少到0.6~1.2ms,这两个协议规范的改变,大幅降低了因为广播数据导致的待机功耗。
  • 快速启动、瞬间连接

    • 此前蓝牙版本的启动速度非常缓慢,2.1版本的蓝牙启动连接需要6s时间,而蓝牙4.0版本仅需要3ms即可完成,几乎是瞬间连接。
  • 传输距离极大提供


协议栈结构

在这里插入图片描述

概念

  • PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。

  • LL层(Link Layer链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者GATT。

  • HCI(Host controller interface)。HCI是可选的(具体请参考文章: 三种蓝牙架构实现方案(蓝牙协议栈方案)),HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。

  • L2CAP层(Logic link control and adaptation protocol)。L2CAP对LL进行了一次简单封装,LL只关心传输的数据本身,L2CAP就要区分是加密通道还是普通通道,同时还要对连接间隔进行管理。

  • ATT(Attribute protocol)。ATT层用来定义用户命令及命令操作的数据。

  • GATT(Generic attribute profile )。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。

  • SMP(Secure manager protocol)。SMP用来管理BLE连接的加密和安全的。

  • GAP层(Generic access profile)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义。GAP目前主要用来进行广播,扫描和发起连接等。

  • 以下开始从嵌入式上层应用的的角度进入,分享BLE协议栈。

ble交互过程

在这里插入图片描述


GAP层

  • generic access profile(通用访问协议)

概念:

  • Broadcaster,广播者
    发出广播信号,可以没有无线接收器。
  • Observer,观察者
    接收广播信号,可以没有无线发送器。
  • Peripheral,外围设备
    广播者,被动建立连接
    既含有无线发送器,也含有无线接收器。
  • Central,中央设备
    扫描/观察者,主动建立连接。
    既含有无线发送器,也含有无线接收器。
  • 主机
    主动建立连接。
  • 从机
    被动建立连接

广播包数据组成

ble广播包格式详解文章

广播包格式

在这里插入图片描述

  • Preamable(前导):1字节,固定序列。
    • 接入地址第一个bit为0:01010101
    • 接入地址第一个bit为1:10101010
  • Access Address(接入地址):
    • 接入地址有两种类型:广播接入地址和数据接入地址。
      • 广播接入地址:固定为 Ox8E89BED6, 在广播、扫描、发起连接时使用。
      • 数据接入地址:随机值,不同的连接有不同的值。在连接建立之后的两个设
        备间俠用。
  • PDU(协议数据单元)
  • CRC(校验):24位crc校验
PDU
  • 包括header,playload
header
  • 4bit 广播报文类型
  • 2bit 保留位
  • 1bit 发送地址类型
  • 1bit 接收地址类型
  • 6bit playload长度
  • 2bit 保留位
报文类型

BLE广播信道中的空中包分为有以下几种类型:

在这里插入图片描述

  • 可连接非定向广播 (ADV_IND):所有收到该广播的设备,都可与之建立链路层连接。
  • 可连接定向广播 (ADV_DIRECT_IND):指明了对方设备地址的,为之提供了连接功能的广播
  • 不可连接广播 (ADV_NONCONN_IND):广播一些特定的信息,任何设备都可接收,但不可建立连接。
  • 扫描请求 (SCAN_REQ):扫描者向指定的广播者发出的空中包,广播者收到扫描请求后,要立即回复扫描响应。
  • 扫描响应 (SCAN_RSP):作为对扫描请求的响应,其中会携带一些与广播者相关的数据,并返回给扫描者。
  • 连接请求 (CONNECT_REQ):如名。
  • 可扫描通知 (ADV_SCAN_IND):作为对扫描请求的响应,其中会携带一些与广播者相关的数据,并返回给扫描者。不可连接。

注意:扫描分为主动扫描和被动扫描。

  • 处于扫描态的设备可以接收广播信道的报文,通过扫描可以侦听哪些设备正在广播。
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值