一分钟读懂低功耗蓝牙(BLE)连接数据包

1.概述

BLE 连接过程中有三个重要的数据包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ。

SCAN_REQ: 扫描请求,由主设备(MASTER DEVICE)向从设备(SLAVE DEVICE)发出,目的是为了获得从设备的响应以得到更多的从设备

广播数据信息(包括设备名字,或者服务UUID,及其它如厂家特定格式的信息(如硬件版本,软件版本号,设备系列号等等)

SCAN_RSP:  从设备对就主设备发起的SCAN_REQ的响应,作为广播包的补充,从设备可以给主设备更多的广播数据,比如说,有些设备在广播

包里面没有设备名字,这个时候就可以把设备名字放在这个包里面发给主设备

CONNECT_REQ:主设备向从设备发出连接请求。至此连接建立完成(从设备不会响应这个请求),如果从设备没有连接上面的问题的话,以后

主从双方会开始相互交换有效数据(基于GAP,GATT及SMP协议)或者交换空包。

以下对这三个数据包进行详细解读

2.关键字:Hollong BLE 侦听仪,低功耗蓝牙嗅探器, BLE 分析仪,BLE 数据抓取

Keyword: Hollong BLE Sniffer, BLE Data Analyzer,BLE Capture

3.抓取连接数据包的准备工作

* 硬件:一个BLE设备(从设备)及对应的主设备(如智能手机里面的相关应用程序,或者通用BLE 工具软件);

一台HOLLONG BLE SNIFFER (Hollong BLE 侦听仪)

* 软件:Hollong 蓝牙4.0/4.1 BLE协议监控分析仪 软件

下载链接:

http://www.viewtool.com/index.ph ... hollong-4-0-4-1-ble

4.SCAN_REQ 包

1)完整包

2) 存取地址 (Access Address)   对于广播包,这是一个固定长度(4个字节)及固定内容(0x8e89bed6)的主从设备识别广播包的存取地址。

3)  头信息 (Header Info)   固定为2个字节:分解为16个位来使用

位[0:3]:P广播包(PDU) 类型,总共有6个类型:

PDU Type

b3b2b1b0 Packet Name

0000 ADV_IND: 可连接通用连接广播

0001 ADV_DIRECT_IND:可连接定向连接(指定设备)广播

0010 ADV_NONCONN_IND:不可连接通用广播

0011 SCAN_REQ:扫描请求

0100 SCAN_RSP:扫描响应

0101 CONNECT_REQ:连接请求

0110 ADV_SCAN_IND:可扫描通用广播

0111-1111 Reserved

位[4:5]:保留

位[6]:RxAdd

位[7]:TxAdd

位[8:13]:广播数据长度 (最大为37 字节)

位[14:15]:保留

4) 主设备地址

5)从设备地址

6)CRC

4.SCAN_RSP 包

1)存取地址

定义同上

2)头信息

定义同上

3)从设备地址

固定6个字节的从设备地址(MAC ADDRESS)

4)响应数据(广播数据)

格式同广播数据格式(详见文“1分钟读懂低功耗蓝牙广播数据”), 在这个包里面,数据为0(没有数据)

5)CRC

固定为3个字节

5. CONNECT_REQ 包

1)存取地址

固定4个字节和内容(0x8e89bed6)的存取地址,BLE 芯片使用这个固定的地址作为广播通道的BLE数据接收。

2)头信息

二个字节的头信息(解析格式同上)

3)主设备地址

4)从设备地址

5)存取地址

在此指定连接后使用的存取地址(BLE 数据通道),这个地址是由内部指定的非确定的4个字节长度的地址,不像广播数据通道使用固定内容的存取地址。

6)CRC INIT

初始化的CRC 值,以后被使用于数据CRC 校验

7)窗口时间 (Win Size)

8) 窗口偏移

9)数据间隔时间 (CONNECTION INTERVAL)

发送两个数据包(或者空包)的间隔时间。

计算公式为:24 (0x18) * 1.25ms = 30ms, 在抓取的数据包中可以看到,每两个包之间的间隔是30MS。 下载此数据包需要注册。

10)时延(Latency)

11) 中断连接最大时延(TIME OUT)

当主从双方有一方在大于此时间后没有接收到任何数据包或者空包,则由连接状态转为非连接状态(主设备可以重新开始

扫描, 从设备也可以重新开始广播,具体做什么由应用程序决定)。

计算方法: 最大时延 = TIME_OUT * 10MS, 在此为:72 (0X48) * 10 = 720 MS, 也就是说,如果双方在0.72秒期间没有收到任何数据包或者空包,则视为连接中断,由连接状态转为非连接状态,开始做应用程序要求做的事情。

12)跳频通道图(CHANNEL MAP)

这个跳频图是由BLE 芯片根据周围环境中可以使用的BLE 通道而制定出来,根据扫描测试的环境不同(指被占用的频谱资源不同)而不同,当这个图(表)通过CONNECT_REQ 包发送给从设备后,主从双方都会根据这个图来同步跳频(HOPPING),低功耗蓝牙设备通过这个方法能够有效避开拥堵的频道,使用比较“干净”,无(少)干扰的频道来交换数据,从而大幅提升传输数据的稳定可靠性。

由于这个是在比较干净(周围几乎没有任何BLE 设备或者其它工作在2.4G频段,类似频道的强信号设备)的环境下面工作的主从设备,所以可以看出,它使用了所有频道(除了广播专用频道37,38,39)作为跳频图。

13) HOP 及CLOCK

0xAF (10101111)

HOP: 10101

CLOCK: 111 => 对应晶体精度 为0-20PPm

一个字节的前5个位指定HOP(跳频)算法中需要的数据(HOPINCREMENT),另外三个位指定晶体的精度等级(可以有多少PPM的误差)

SCA masterSCA, 三个位对应的晶体精度等级如下:       000: 251 ppm to 500 ppm

001: 151 ppm to 250 ppm

010: 101 ppm to 150 ppm

011: 76 ppm to 100 ppm

100: 51 ppm to 75 ppm

101: 31 ppm to 50 ppm

110: 21 ppm to 30 ppm

111: 0 ppm to 20 ppm

14)CRC

同上

Core_V4.0_LE.pdf(818.21 KB, 下载次数: 19)

em9304 fineme 071117.zip

原文链接:

http://www.viewtool.com/bbs/foru ... e=1&extra=#pid71204

一分钟读懂低功耗蓝牙(BLE)连接数据包的更多相关文章

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

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

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

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

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

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

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

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

  5. 一分钟读懂互联网广告竞价策略GFP+GSP+VCG

    原文:http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价策略呢?这 ...

  6. 【转】一分钟读懂互联网广告竞价策略GFP+GSP+VCG

    参考这篇文章: http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价 ...

  7. 一片非常有趣的文章 三分钟读懂TT猫分布式、微服务和集群之路

    原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分钟读懂TT猫分布式.微服务和集群之路   针对新手入门的普及,有过大型网站技 ...

  8. 低功耗蓝牙BLE之连接事件、连接参数和更新方法

    转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...

  9. Android低功耗蓝牙(BLE)开发的一点感受

    最近一段时间,因为产品的需要我做了一个基于低功耗蓝牙设备的Android应用,其中碰到了一些困难,使我深深体会到Android开发的难处:不同品牌,不同型号和不同版本之间的差异使得Android应用适 ...

随机推荐

  1. ActionFilter、IAuthorizationFilter 权限验证重定向跳转到其它页面

    方法一: public class IsAllowAttribute: ActionFilterAttribute { public override void OnActionExecuting(A ...

  2. grandle Project sync failed.please fix your project and try again

    Android Studio导入项目或者新建项目想运行的时候可能会报错Gradle project sync failed. Please fix your project and try again ...

  3. MXNet 定义新激活函数(Custom new activation function)

    https://blog.csdn.net/weixin_34260991/article/details/87106463 这里使用比较简单的定义方式,只是在原有的激活函数调用中加入. 准备工作下载 ...

  4. HTML-头部

    HTML <head> 元素 <head> 元素是所有头部元素的容器.<head> 内的元素可包含脚本,指示浏览器在何处可以找到样式表,提供元信息,等等. 以下标签 ...

  5. [转]使用apt安装nodejs10

    使用apt安装nodejs10 链接地址:https://blog.csdn.net/sunhaobo1996/article/details/80340513

  6. webpack实现跨域

    在devServer字段下配置proxy. // 本地开发 Server 配置 const DEV_SERVER_CONFIG = { historyApiFallback: true, hot: t ...

  7. 使用Termux,在手机上做nodejs编程,运行nodejs程序。

    如果你是一名nodejs开发者,是否想过以下问题:在手机上运行nodejs程序?用手机当nodejs服务器?在手机上做nodejs编程?YES!使用Termux,以上都可以做到! 下面展示如何实现这个 ...

  8. Spring boot后台搭建二集成Shiro权限控制

    上一篇文章,实现了用户验证 查看,接下来实现下权限控制 权限控制,是管理资源访问的过程,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等 Apache Shir ...

  9. laravel composer vendor 目录加载类库详细 之后做说明

    composer installLoading composer repositories with package informationInstalling dependencies (inclu ...

  10. VMware的包格式vmdk转换为virtualBox的ova

    使用winxp的vmdk作为案例 1 使用vmvare导入vmdk的winxp,点击文件---->导出为ovf 2 找到生成的ovf文件 3 打开virtualBox 管理---->导入虚 ...