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

原创 专注于无线通信的蓬勃 2020-10-27 08:17

零. 概述

主要介绍下蓝牙协议栈(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学院链接(进入选择你想要学习的课程):

蓝牙交流扣扣群:970324688

Github代码:

入手开发板:

蓝牙学习目录

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

二. 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

专注于无线通信的蓬勃 朝气蓬勃——不积跬步 无以至千里, 不积小流 无以成江海
评论
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 77浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 105浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 159浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 76浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 167浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 512浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 125浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 187浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 197浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 118浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 68浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 221浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦