一分钟读懂低功耗蓝牙连接数据包
一分钟读懂低功耗蓝牙(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, 下载次数: 192)
em9304 fineme 071117.zip (19.05 KB, 下载次数: 117)
原文链接:
http://www.viewtool.com/bbs/foru ... e=1&extra=#pid71204
微信公众号: 纬图物联
一分钟读懂低功耗蓝牙连接数据包相关推荐
- mtu蓝牙_一分钟读懂低功耗蓝牙(BLE)MTU交换数据包
一分钟读懂低功耗蓝牙连接数据 包 " ) 做个对比就可以知道 BLE MTU 比较小(不过新的 BLE 标准 MTU 已经大幅提升,详见 即将发表在 VIEWTOOL BBS 上的后续文章) ...
- 蓝牙广播数据包_一分钟读懂低功耗蓝牙(BLE)广播数据包
一分钟读懂低功耗蓝牙(BLE)广播数据包 低功耗蓝牙 => BLE (Bluetooth Low Energy) 1. 怎样抓取BLE广播数据包 * 硬件:一个BLE设备(具有广播功能): 一台 ...
- 大数据入门-五分钟读懂HDFS
目录 大数据入门系列文章 一.概念 二.架构及组件概念 三.读写流程 四.大白话 五.其他 大数据入门系列文章 最近在收集整理大数据入门文章,各位盆友关注点赞不迷路,每天都要开心鸭! 大数据入门系列文 ...
- 地铁供电系统原理图_策划|5分钟读懂地铁运行原理
原标题:策划|5分钟读懂地铁运行原理 今日摘要 每日小编乘地铁上下班,昨天下午乘坐地铁时突然脑子中闪过一个问题那就是:地铁运行原理是什么?地铁隧道是怎么修建的?人踩在上面会不会有危险呢?今天小编带你一 ...
- python高阶函数(三分钟读懂)
python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...
- 【光剑藏书轩2021】5分钟读懂《贫穷的本质》:“穷人通常缺少信息来源”
5分钟读懂<贫穷的本质> <贫穷的本质:我们为什么摆脱不了贫穷>是2013年中信出版社出版的图书,作者是阿比吉特·班纳吉 (Abhijit V.Banerjee)与埃斯特·迪弗 ...
- centos 删除文件夹_手机文件夹是英文,占空间还不敢乱删?花一分钟读懂手机语言...
不少人肯定发现,自己的手机里面有一些莫名其妙的文件夹,占据内存空间.且占据很大,想删除,但全部是由英文标注,不知道从何删起. 今天小兰就来帮助大家决绝这么问题,一分钟教你读懂这些手机语言,快速清理手机 ...
- Uni-App使用低功耗蓝牙连接血压仪测量
1.Uni-APP蓝牙使用流程 在阅读这篇内容之前,建议您详细浏览一遍uni-app官方关于蓝牙和低功耗蓝牙(BLE)使用教程文档 uni-app官方低功耗蓝牙接口,如果您有微信小程序方面的开发经验, ...
- Vue安装与IDE HBuilder安装(一分钟读懂)
Vue安装与IDE安装(一分钟读懂) 官网下载IDE HBuilder 解压该文件后,打开 官网下载vue.js 创建demo文件夹,把vue.js放进这里面并且创建index.html文件 然后把这 ...
最新文章
- 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
- python Gevent – 高性能的Python并发框架
- JDK注解(内置和自定义)
- MIDDLEWARE 在传输大量数据时,经常会发生堵塞,如果有一条错误的数据整个队列将无法处理
- Permutations CodeForces - 736D (矩阵逆)
- 也谈跨域数据交互解决方案
- 小车故障灯亮显示大全_原创案例丨17款迈锐宝XL缺缸故障
- 关于凸包算法和叉积的应用
- VB 6.0 可以使用MQTT
- HTML代码实现简易购物车-web前端教程
- LTE无线接入网的架构
- FPGA零基础学习:SDR SDRAM 驱动设计
- element-tree 实现部门-人员选择(支持ID相同)
- 【移动安全技术】_安卓逆向5:绕过单机游戏的商店支付
- 乐理:十二平均律与大小调
- python实现压缩文件夹
- css缓慢执行hover
- python 基础代谢率计算_基于python实现计算且附带进度条代码实例
- LOGO的国际标准规范
- 基于单片机的CO2温湿度电路设计(#0217)