为了更方便理解 BLE 中的广播,首先要先了解 BLE 架构中的通用访问配置文件 (GAP)层。

GAP 为BLE 设备相互交互提供了一个框架,包括:

  • BLE 设备角色
  • 广播(广播、发现、广播参数、广播数据)
  • 扫描
  • 连接建立(发起连接、接受连接、连接参数)
  • 安全相关

BLE 设备有四种主要的 GAP 角色:

Central:发现 BLE 外围设备和广播者的设备,具有连接外围设备的能力。
Peripheral:可以广播,可以接受连接请求。
Broadcaster:广播者是一个纯广播设备
Observer:扫描者是一个纯扫描设备

1.广播信道

图1  信道分配

BLE设备共40个信道,3个作为主广播信道,其余37个作为数据信道或辅助广播信道。

次要广播频道用作“辅助”频道,这意味着设备必须先在主要广播频道上做广播,然后才能在次要频道上发送广播数据包。

如果设备想要使用次要广播通道,它会在主要通道上发送指向次要广播数据包的广播数据包。

2.广播包格式

PDU 字段是我们感兴趣的。这个字段会根据传输的数据包类型(数据与广播)而变化。

PDU Header

PDU 类型:该字段的长度为 4 位,对于广播包来说,具有以下可能的值:

PDU 根据用途分为多个类别,在我们列出每个 PDU 之前,先介绍一些常用术语:

定向与非定向:定向广告类型接受来自已知对端设备的连接请求,而非定向接受来自任何对端设备的连接请求。

可连接与不可连接:确定广播设备是否允许建立连接。

可扫描与不可扫描:广播设备是否能够处理来自观察者或中央的扫描请求消息。

扩展广告:扩展广播相比传统广播,允许的携带更多数据。

注意:由于蓝牙 5.0以下的设备无法发现扩展广播,建议广播者也使用带有传统广播 PDU 的广播集,以便较旧的扫描设备能够发现终端设备。广播集用于同时发送不同类型的广播事件。每个广播集都会有不同的广播参数,例如广播 PDU 类型、广播间隔和 PHY。

周期广播:蓝牙 5 .0开始支持的扩展广播的另一个功能是周期广播。这用于在两个未连接的设备之间的设定时间段内向设备广播数据包,这意味着多个设备可以同时收听这些周期广播。它们由以固定间隔发送的广播组成,广播数据内容不时变化。

Legacy Advertising PDUs

这些适用于所有蓝牙版本 - 支持向后兼容,并用于主要广播信道。

ADV_IND:可连接的可扫描非定向广播。
ADV_DIRECT_IND:可连接的定向广播
ADV_NONCONN_IND:不可连接不可扫描非定向广播
ADV_SCAN_IND:可扫描非定向广播

Extended Advertising PDUs

这些类型是在蓝牙5.0 中引入的。 除了主要广播信道之外,它们还为设备提供了在次要广播信道上做广播的选项。 辅助通道的好处是它们允许增加广播数据容量。

ADV_EXT_IND:扩展广播(用于除 Connectable Scannable Undirected 之外的所有广播类型)——在主要广播信道上发送。
AUX_ADV_IND:扩展广播(用于除 Connectable Scannable Undirected 之外的所有广播类型)——在辅助广播信道上发送。
AUX_SCAN_IND:用于周期广播。
AUX_CHAIN_IND:与其他广播类型一起使用以保存额外的广播数据。

RFU:保留以备将来使用

ChSel:如果广播者支持 LE 信道选择算法 #2 功能,则该位将设置为 1。

TxAdd:如果广播者的地址是随机的,则该位设置为 1,如果地址是公共的,则该位设置为 0

RxAdd:如果目标设备的地址是随机的,则该位设置为 1,如果地址是公共的,则设置为 0

Length:保存数据包有效载荷的长度。

低功耗蓝牙(BLE)-- advertisements广播篇相关推荐

  1. 低功耗蓝牙BLE之广播

    广播 低功耗蓝牙设备通过广播信道发现其他设备,一个设备进行广播,而另一个设备进行扫描. 广播相关的参数大致有以下几种: 1.Advertising interval 2.Advertising_Typ ...

  2. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅④如何在Android开发低功耗蓝牙ble控制 TB-02 模块,代码工程全部开源!(附带Demo)

    本<泰凌微ble mesh蓝牙模组天猫精灵学习之旅>系列博客学习由半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.小白也痴迷,如 ...

  3. 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发详解 ...

  4. java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈

    详解BLE连接建立过程 https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式-兼BLE Link layer协议解析 https://www. ...

  5. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈

    深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实 ...

  6. 深入浅出低功耗蓝牙(BLE)协议栈,使用Ubertooth one扫描嗅探低功耗蓝牙

    BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 深入浅出低功耗蓝牙BLE协议栈 1. 协议栈框架 2. 如何通过无线发送一个 ...

  7. 低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端

    低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和 ...

  8. 低功耗蓝牙BLE之连接事件、连接参数和更新方法(程序解读)

    关注公众号"迈微电子研发社",选择"星标★" 低功耗蓝牙BLE之连接参数de更新方法 0. 蓝牙的状态以及基本连接过程 0.1 蓝牙的状态: 0.3 蓝牙的连接 ...

  9. 【Funpack】低功耗蓝牙 BLE 协议架构

    想要开发蓝牙应用,了解蓝牙协议架构是必不可少的.本文以低功耗蓝牙 BLE 为例,简要介绍 BLE 蓝牙协议架构,帮助开发者快速了解蓝牙协议概况. BLE 协议分层 BLE 协议栈主要由如下几部分组成: ...

  10. 【IoT】加密与安全:CC254x 低功耗蓝牙 BLE 之 AES-128 加密算法

    蓝牙数据是可以通过空中抓包而被抓取到的,因此需要将通信数据进行加密,即使别人截获了加密后的数据,也无法利用该数据. AES 加密原理 CC254x 支持对称加密 AES: 加密过程: 需要加密的数据 ...

最新文章

  1. 在 Node.js 中用子进程操作标准输入/输出
  2. Windows、WSL 与 Linux 的性能对比
  3. 在水晶报表中实现任意选择指定字段显示-模板及C#升级版
  4. yolov3代码详解_代码资料
  5. 【IBatisNet Spring.Net】ORM与IOC 简单配置
  6. python mysql 写入_python如何写进MYSQL
  7. Java魔法堂:JVM的运行模式
  8. Atitit.并发编程原理与概论 attilax总结
  9. 第二次作业-Steam软件分析
  10. 计算机无法删除tf卡的内容,SD卡不能删除或格式化怎么办?这些方法一定要会...
  11. MATLAB学习笔记之矩阵和数组1.1(mathematic)
  12. 【微信小程序】获取Bmob后端云数据库某一数据表的所有记录
  13. 勒索病毒频发,信息安全事件如何破 --记两次勒索病毒数据恢复实例
  14. netty源码分析及优点
  15. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest:Gym 101667K
  16. 怎样解决PHP中文乱码问题
  17. 手机OTG 我的世界_怎么用手机把小说下载到mp3
  18. django 查询 value 与 value_list 区别
  19. 索尼mcx500切换台说明书_索尼MCX500特技切换台
  20. 李宁特步雅戈尔们逆势增长,底层驱动是什么?

热门文章

  1. MySQL教程-01
  2. SEEK学习论坛-JavaWeb开发实训课题 (数据库MySQL+js+Ajax+Servlet)
  3. 【计算机网络】ICMP协议
  4. Bugzilla 操作手册
  5. Android中的多线程
  6. 计算机网络-因特网概述
  7. java 统计阅读量_使用redis实现【统计文章阅读量】及【最热文章】功能
  8. Android系统源码在线阅读(Android4.4~Android13.0)
  9. 书桌台灯怎么选?分享儿童卧室灯品牌
  10. 算法基础、算法比赛快速入门(java)