一分钟读懂低功耗蓝牙(BLE)连接数据包
一分钟读懂低功耗蓝牙(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)


原文链接:
一分钟读懂低功耗蓝牙(BLE)连接数据包的更多相关文章
- 低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和 ...
- 深入浅出低功耗蓝牙(BLE)协议栈
深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解蓝牙"连接"?如果蓝牙协议只有ATT没有GATT会发生什么? 协议栈框架 一般而言,我们把某个协议的实现代码称 ...
- 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...
- 深入浅出讲解低功耗蓝牙(BLE)协议栈
详解BLE连接建立过程https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式—兼BLE Link layer协议解析https://www.cn ...
- 一分钟读懂互联网广告竞价策略GFP+GSP+VCG
原文:http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价策略呢?这 ...
- 【转】一分钟读懂互联网广告竞价策略GFP+GSP+VCG
参考这篇文章: http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价 ...
- 一片非常有趣的文章 三分钟读懂TT猫分布式、微服务和集群之路
原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分钟读懂TT猫分布式.微服务和集群之路 针对新手入门的普及,有过大型网站技 ...
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...
- Android低功耗蓝牙(BLE)开发的一点感受
最近一段时间,因为产品的需要我做了一个基于低功耗蓝牙设备的Android应用,其中碰到了一些困难,使我深深体会到Android开发的难处:不同品牌,不同型号和不同版本之间的差异使得Android应用适 ...
随机推荐
- windows服务器卸载补丁命令【转】
一.可以试用cmd命令 wusa.exe /uninstall /kb: wusa.exe /uninstall /kb: wusa.exe /uninstall /kb: 二.使用DISM卸载补 ...
- android -------- Base64 加密解密算法
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Ba ...
- docker本地化异常:/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
docker中经常设置不了 环境变量$LC_ALL, 导致报很多奇怪的编码错误: /bin/sh: warning: setlocale: LC_ALL: cannot change locale ...
- 【Java】单点登录(SSO)
单点登录介绍 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一 ...
- 使用draw.io桌面版代替visio制作流程图
前言 draw.io是一款在github上的开源产品,由于需要构建在线文档,需要插入画图类型, 对比多款开源产品,最终选择了draw.io. draw.io图标资源非常的丰富,方便导入图标资源,基本上 ...
- c-lodop回调函数简短问答及相关博文
回调函数相关博文:C-Lodop回调函数的触发.LODOP.FORMAT格式转换[回调和直接返回值].Lodop导出excel及提示成功[回调和直接返回值].c-lodop获取任务页数-回调里给全局变 ...
- 消息发送函数OSMboxPostOpt()
消息发送函数OSMboxPostOpt() 作用,ucos 3中的消息邮箱,具有广播功能,发送一条消息就可以使所有等待该消息的任务进入就绪状态,从而完成消息分发功能,具有一个消息唤醒多个任务的机制.
- Form表单验证组件
Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Tyrion主要有两大重要动能: 表单 ...
- html5获取自己定位的方法
html5获取自己定位的方法直接用高德地图api 不要用百度地图api 不准确 <pre><!doctype html><html><head> < ...
- linux svn开机自动启动服务
SVN设置开机自动启动 usr/lib/systemd/system/添加svn.service文件 home/sdbdatasvn/svnrepos(换成绝对路径) 如果出现权限问题,请chmod ...