零. 概述

主要介绍下蓝牙协议栈(bluetooth stack)低功耗蓝牙搜索广播的流程以及协议栈的实现流程,BLE scan flow

btsnoop以及流程在资料中的......\STM32_UBUNTU_BLUETOOTH\2-蓝牙资料\蓝牙协议分析\BLE搜索广播.log

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

--------------------------------------------------------------------------------------------------------------------------

二. BLE搜索广播command以及event

整个流程如下(注意在初始化的时候有省略的步骤,只列出初始化的关键步骤)

注意我们在截图初始化的时候只是截取了两个command以及event,一个是跟传统蓝牙有差别的set event mask,一个是write le host supported,其他可以参照传统蓝牙的初始化,步骤整理如下:

步骤1)发送设置事件掩码的command(set event mask)以及收到commnd complete event

步骤2)发送设置支持BLE的command(write le host support)收到command complete event

步骤3)发送设置BLE scan参数的command(LE set scan param)

步骤4)发送BLE搜索使能的command(LE set scan enable)

步骤5)收到步骤3)4)的command complete

步骤6)解析BLE广播event的数据包

步骤7)发送结束搜索的command(LE set scan enable)以及收到commnd complete event

下面我们就详细说下每个步骤

步骤1)发送设置事件掩码的command(set event mask)以及收到commnd complete event

① 发送设置事件掩码的command(set event mask)

首先我们来看下这个command格式,OGF=3,OCF=1

一共8byte的参数,一共有62个mask,这个command就是掩码,决定芯片是否要上报给协议栈这个event,此部分我们传统蓝牙跟BLE蓝牙发送的参数有差别,截图code如下:

可以看到就差了bit61,也就是LE Meta Event,此部分很多BLE的event都会通过这个上来

我们来看下btsnoop

② 收到command complete event

此event我们在传统蓝牙HCI章节中多次讲到不再重复

我们来看下btsnoop

步骤2)发送设置支持BLE的command(write le host support)收到command complete event

① 发送设置支持BLE的command(write le host support)

首先我们来看下command的格式,OGF=3,OCF=0x6d

可以看到如果要使能BLE,那么LE SUPPORTED HOST要设置为0x01,SIMULTANEOUS LE HOST只能设置为0,其他用在扩展使用。

我们来看下btsnoop

② command complete event

此event我们在传统蓝牙HCI章节中多次讲到不再重复

我们来看下btsnoop

步骤3)发送设置BLE scan参数的command(LE set scan param)

首先我们来看下命令格式(OGF=8,OCF=0xb)

下面来具体说下参数的意义:

LE_Scan_Type:分主动扫描跟被动扫描

区别主要有几个

  • 被动扫描仅仅接受广播包,不会发起扫描请求
  • 主动扫描接受广播包后悔发送扫描请求给处于广播态的设备,来获取额外的广播数据

一般被动扫描用于确定从机不会发送扫描响应,只会发送31byte的广播数据

而主动扫描用于不确定从机是否有额外的数据,所以要额外发起扫描请求来接受更多的广播的数据

注意:主动扫描的扫描请求以及扫描响应也是广播封包

LE_Scan_Window跟LE_Scan_Interval:

看以上图你就懂这两个参数了

我们来看下btsnoop

步骤4)发送BLE搜索使能的command(LE set scan enable)

我们来看下command格式(OGF=8,OCF=0xc)

我们看下btsnoop

步骤5)收到步骤3)4)的command complete

这个command我们已经在传统蓝牙HCI介绍了,我们直接贴下btsnoop

步骤6)解析BLE广播event的数据包

此部分的event code是0x3e(LE Meta event)

其中Subevent_Code = 2就是LE广播封包的event

我们首先来看下参数

这是一个关键的event,我们来详细说下广播数据,其他参数自己体会

广播参数格式如下:

一个1byte的length,n byte的type,后面跟的是这个item的广播数据,符合L T V格式

L:length  T:Type   V:value

其中Type跟HCI EIR基本一样,在文档CSS_V9中,想详细看的可以看下

Data Type Value Data Type Name Reference for Definition
0x01 «Flags» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.3 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.3 and 18.1 (v4.0)Core Specification Supplement, Part A, section 1.3
0x02 «Incomplete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.1 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.1 and 18.2 (v4.0)Core Specification Supplement, Part A, section 1.1
0x03 «Complete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.1 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.1 and 18.2 (v4.0)Core Specification Supplement, Part A, section 1.1
0x04 «Incomplete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.1 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, section 18.2 (v4.0)Core Specification Supplement, Part A, section 1.1
0x05 «Complete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.1 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, section 18.2 (v4.0)Core Specification Supplement, Part A, section 1.1
0x06 «Incomplete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.1 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.1 and 18.2 (v4.0)Core Specification Supplement, Part A, section 1.1
0x07 «Complete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.1 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.1 and 18.2 (v4.0)Core Specification Supplement, Part A, section 1.1
0x08 «Shortened Local Name» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.2 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.2 and 18.4 (v4.0)Core Specification Supplement, Part A, section 1.2
0x09 «Complete Local Name» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.2 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.2 and 18.4 (v4.0)Core Specification Supplement, Part A, section 1.2
0x0A «Tx Power Level» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.5 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.5 and 18.3 (v4.0)Core Specification Supplement, Part A, section 1.5
0x0D «Class of Device» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.6 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.5 and 18.5 (v4.0)Core Specification Supplement, Part A, section 1.6
0x0E «Simple Pairing Hash C» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.6 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.5 and 18.5 (v4.0)
0x0E «Simple Pairing Hash C-192» Core Specification Supplement, Part A, section 1.6
0x0F «Simple Pairing Randomizer R» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.6 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.5 and 18.5 (v4.0)
0x0F «Simple Pairing Randomizer R-192» Core Specification Supplement, Part A, section 1.6
0x10 «Device ID» Device ID Profile v1.3 or later
0x10 «Security Manager TK Value» Bluetooth Core Specification:Vol. 3, Part C, sections 11.1.7 and 18.6 (v4.0)Core Specification Supplement, Part A, section 1.8
0x11 «Security Manager Out of Band Flags» Bluetooth Core Specification:Vol. 3, Part C, sections 11.1.6 and 18.7 (v4.0)Core Specification Supplement, Part A, section 1.7
0x12 «Slave Connection Interval Range» Bluetooth Core Specification:Vol. 3, Part C, sections 11.1.8 and 18.8 (v4.0)Core Specification Supplement, Part A, section 1.9
0x14 «List of 16-bit Service Solicitation UUIDs» Bluetooth Core Specification:Vol. 3, Part C, sections 11.1.9 and 18.9 (v4.0)Core Specification Supplement, Part A, section 1.10
0x15 «List of 128-bit Service Solicitation UUIDs» Bluetooth Core Specification:Vol. 3, Part C, sections 11.1.9 and 18.9 (v4.0)Core Specification Supplement, Part A, section 1.10
0x16 «Service Data» Bluetooth Core Specification:Vol. 3, Part C, sections 11.1.10 and 18.10 (v4.0)
0x16 «Service Data - 16-bit UUID» Core Specification Supplement, Part A, section 1.11
0x17 «Public Target Address» Bluetooth Core Specification:Core Specification Supplement, Part A, section 1.13
0x18 «Random Target Address» Bluetooth Core Specification:Core Specification Supplement, Part A, section 1.14
0x19 «Appearance» Bluetooth Core Specification:Core Specification Supplement, Part A, section 1.12
0x1A «Advertising Interval» Bluetooth Core Specification:Core Specification Supplement, Part A, section 1.15
0x1B «LE Bluetooth Device Address» Core Specification Supplement, Part A, section 1.16
0x1C «LE Role» Core Specification Supplement, Part A, section 1.17
0x1D «Simple Pairing Hash C-256» Core Specification Supplement, Part A, section 1.6
0x1E «Simple Pairing Randomizer R-256» Core Specification Supplement, Part A, section 1.6
0x1F «List of 32-bit Service Solicitation UUIDs» Core Specification Supplement, Part A, section 1.10
0x20 «Service Data - 32-bit UUID» Core Specification Supplement, Part A, section 1.11
0x21 «Service Data - 128-bit UUID» Core Specification Supplement, Part A, section 1.11
0x22 «LE Secure Connections Confirmation Value» Core Specification Supplement Part A, Section 1.6
0x23 «LE Secure Connections Random Value» Core Specification Supplement Part A, Section 1.6
0x24 «URI» Bluetooth Core Specification:Core Specification Supplement, Part A, section 1.18
0x25 «Indoor Positioning» Indoor Positioning Service v1.0 or later
0x26 «Transport Discovery Data» Transport Discovery Service v1.0 or later
0x27 «LE Supported Features» Core Specification Supplement, Part A, Section 1.19
0x28 «Channel Map Update Indication» Core Specification Supplement, Part A, Section 1.20
0x29 «PB-ADV» Mesh Profile Specification Section 5.2.1
0x2A «Mesh Message» Mesh Profile Specification Section 3.3.1
0x2B «Mesh Beacon» Mesh Profile Specification Section 3.9
0x2C «BIGInfo»  
0x2D «Broadcast_Code»  
0x3D «3D Information Data» 3D Synchronization Profile, v1.0 or later
0xFF «Manufacturer Specific Data» Bluetooth Core Specification:Vol. 3, Part C, section 8.1.4 (v2.1 + EDR, 3.0 + HS and 4.0)Vol. 3, Part C, sections 11.1.4 and 18.11 (v4.0)Core Specification Supplement, Part A, section 1.4

我们来分析一组raw data让你加深理解,方便自己写code的时候解析广播数据

Raw data为:02 01 06 03 03 00 FF 04 08 42 4c 45 03 19 80 00

02 -》此个item的length为2

01-》Type为1,也就是«Flags»

06 -》 flag的值

03 -》此个item的length为3

03 -》«Complete List of 16-bit Service Class UUIDs»

00 FF -》UUID的值

04 -》此个item的length为4

08 -》«Shortened Local Name»

42 4c 45 -》 名字为BLE

03 -》此个item的length为3

19 -》«Appearance»

80 00 -》 «Appearance»的值

步骤7)发送结束搜索的command(LE set scan enable)以及收到commnd complete event

LE set scan enable我们已经在步骤4)说明了,我们直接贴下btsnoop

低功耗蓝牙搜索广播的实现流流程介绍 /BLE scan flow ----- 蓝牙低功耗协议栈相关推荐

  1. BLE广播流程介绍 蓝牙广播 低功耗蓝牙广播的实现流流程介绍 /BLE Advertising flow ----- 蓝牙低功耗协议栈

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack)低功耗蓝牙广播的流程以及协议栈的实现流程,BLE  Advertising flow btsnoop以及流程在资料中的......\S ...

  2. android 蓝牙搜索、配对连接通信总结

    蓝牙协议可以实现一个蓝牙设备和6到8个蓝牙设备进行通信. 1.蓝牙搜索的实现 利用蓝牙的发现和完成动作动态注册广播接受者获得蓝牙设备. 第一步,获得蓝牙适配器 BluetoothAdapter mBt ...

  3. Android 蓝牙 A2dp 听歌卡音?audio数据到a2dp通道流程解析----A2dp流控原理(Acl Flow Control),一文搞懂蓝牙卡音问题处理

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 本文章将卡音 ...

  4. 安卓蓝牙开发(1)BLE蓝牙基础知识和一般开发流程

    一.BLE(Bluetooth Low Energy)低功耗蓝牙基本知识 Android 4.3(API级别18)引入了以低功耗蓝牙(BLE)为中心角色的内置平台支持,并提供应用程序可用于发现设备,查 ...

  5. 蓝牙通信,完整的通信流程!

    无线通信方案,有三种方案可以实施: 1.NFC 2.蓝牙 3.WIFI 下面是对这三个知识点做的一个总结,参照对比可以选择合适的方案.而本章着重讲的蓝牙之间通信. 首先介绍一下蓝牙的两个广播Recei ...

  6. NXP KW38蓝牙开发(一)入门第一课:官网蓝牙广播和连接例程,NMI禁止

    首先要下载开发使用的IDE:MCUXpresso IDE 下载链接: 进入nxp的官网,搜索KW38 向下翻看,找到Xpresso,点击进入 习惯使用IAR开发的同学也可以下IAR版本,这里以Xpre ...

  7. 转载 解密蓝牙mesh系列 | 第五篇 【好友(Friend)和低功耗节点(LPN)】【友谊(Friendship)参数】【友谊建立】【友谊(Friendship)消息传送】【安全性】【友谊终止】

    YD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了B ...

  8. 蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 --传统蓝牙搜索演示以及实现原理

    零. 概述 主要介绍下蓝牙协议栈开发板跑传统蓝牙搜索AT指令以及上位机操作步骤,以及原理 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝 ...

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

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

最新文章

  1. 数据结构与算法:05 Leetcode同步练习(一)
  2. 深入理解Presto(1) : Presto的架构
  3. rosetta软件_苹果 Mac 换用 ARM,但不用担心跑 X86 软件会卡
  4. 2018年台湾为陕西最大贸易伙伴
  5. django项目允许其他机器访问
  6. 存储过程,触发器,事务和锁
  7. ubantu实现linux命令的实验_C语言实现linux命令---ls
  8. [C++11]推荐使用auto的场景
  9. java api class_Java API:Object class
  10. linux 目录硬链接,linux为什么不能给目录做硬链接
  11. 51单片机复习:外部中断,定时器/计数器中断
  12. 课下作业——对正在使用的搜索类软件/输入法进行评价
  13. Java开发笔记(八十八)文件字节I/O流
  14. 云端部署大数据解决方案该用IaaS还是PaaS?
  15. 给Ionic写一个cordova(PhoneGap)插件
  16. 对比了解Grafana与Kibana的关键差异
  17. WPS快捷键之 通用基础
  18. java验证码问题(不区分大小写)升级版,输入不正确则一直输入
  19. mysql evict_善用MySQL AHI加速神器,让你的InnoDB查询飞起来!
  20. 学C语言和C++它有毛关系吗?

热门文章

  1. WebRTC Trickle ICE 策略
  2. Mocha Pro 2022(合集)
  3. [CTF]Rabbit加密
  4. 计算机网络课程实验4——编程实现路由算法(迪杰斯特拉算法)
  5. DVB-条件接收系统(CAS)
  6. element的formatter失效的解决方案
  7. 基于Springboot2.x+vue3.x整合实现微信扫码登录
  8. 身份证最后一位验证[python]
  9. 如何提高自媒体文章阅读量?2个简单小步骤,1秒学会
  10. php 对文件加密,PHP文件加密