低功耗蓝牙设备DA1458x芯片开发之更新连接参数
今天将详细的讲解下低功耗蓝牙设备和手机连接时的抓包,以此帮助我这样的小白,并积累经验~
我用的外设芯片是DA14580芯片,协议栈是Dialog的IP蓝牙协议栈,和手机相连,利用sniffer packet抓包~欢迎指导交流
首先来了解下理论知识,更新参数即在蓝牙主从设备建立连接之后,主设备或从设备发起的对连接过程中参数的更改的行为,下面我们进行的是从设备发起连接参数更改请求,主设备接收请求并更改参数:
从上图可以很清楚的看出从机发起连接时,和主机的交互流程。
然后进行操作,将Dongle和低功耗蓝牙开发板连上电脑,开发板中的程序运行起来~走起
进入到sniffer packet中(sniffer packet不会的请自行百度啊),单击上图中的三角形,运行抓包工具,如下,可以看到很多广播数据包
出现如下图所示的InitA,即进行连接
上图不清楚,下面用表格将图中的关键参数列出来~
上图中的参数为:
Channel:0x25,广播信道,转化为十进制为37;低功耗蓝牙的广播地址为37/38/39中的任意一个;
InitA:连接发起者的蓝牙设备地址,长度为6字节;
AdvA:广播者的蓝牙设备地址,长度为6字节;
AcessAddr:接入地址,在两个低功耗设备建立连接之前,master设备负责生成接入地址,类似于一个四个字节的随机数,当连接建立之后,master和slave都使用该地址进行通信;连接断开后,接入地址自动失效。
CRCInit:CRC初始值,是master和slave用来验证数据包的完整性的。
WinSize:定义了设备每次开启收发机的窗口时间,无论是master还是slave,都遵循WinSize的定义。
WinOffset:定义了在CONNECT_REQ命令之后的一个通信窗口的偏移量,在slave设备接收到请求命令后,设备需要占用一些时间,根据LLData参数进行一些相关的配置。
在CONNECT_REQ之后,第一个由master发送到slave的数据帧,称为“锚点”,因为之后的所有的连接事件都以该时刻为基准。
ConnInterval的取值范围在7.5ms至4s之间,因此,确定锚点之后,master和slave将按照ConnInterval确定的时间间隔进行数据交互。
ConnInterval = Interval*1.25ms
对低功耗蓝牙技术,为了实现低功耗特性,不需要每次ConnInterval都产生连接事件,因此引入参数 Latency,可以有效减少连接事件的产生,ConnSlaveLatency = Latency,这个参数定义了slave设备可以忽略多少个连续的连接事件,这表示slave不需要在每个连接事件产生的时刻都唤醒并打开射频接收机进行帧听,从而减少slave设备的功耗。
Timeout:定义了连接超时的长度,connSupervisionTimeout = Timeout*10ms,其值再100ms到32s之间。
注意:connSupervisionTimeout必须大于(1+ ConnSlaveLatency)*ConnInteral*2。否则,slave设备在Lantency状态,也会被认为是连接超时而导致连接断开。
ChM和Hop:跳频相关的,当连接建立以后,master和slave按照预先设定的信道图谱,和跳频跨度进行跳频工作。信道图谱来自ChM参数,每跳跨度来自Hop参数。Hop的取值范围在5—16之间。
我进行了外设发起连接参数更新的请求,手机端判断是否接受该请求并更新参数。下面是外设发起更新参数的过程
从上图可以看出,外设给出了最小Interval和最大Interval,SlaveLatency为0,Timeout时间延长。ATT将数据传输到LL层,粉色的LL层给出详细参数请求。
之后,土黄色的L2CAP层收到来自手机端的应答,其Result为0x0000,表示更新参数成功。
至此,低功耗蓝牙外设发起参数更新的过程结束啦~撒花~
低功耗蓝牙设备DA1458x芯片开发之更新连接参数相关推荐
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件是指主设备和从设备之间相互发送数据包的过程.连接事件的进行始终位于一个频率,每个数据包会在上个数据包发完之后等待 15 ...
- 微信小程序低功耗蓝牙BLE快速开发js
文章目录 1.前言 2.资料 3.BLE连接流程 BLE连接原理 4.index.js页面加载流程详细说明 完整代码: 1.前言 目的: 1.为了能三分钟快速开发BLE模块,特此做一个笔记,按照笔记的 ...
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法(程序解读)
关注公众号"迈微电子研发社",选择"星标★" 低功耗蓝牙BLE之连接参数de更新方法 0. 蓝牙的状态以及基本连接过程 0.1 蓝牙的状态: 0.3 蓝牙的连接 ...
- 低功耗蓝牙工具APP开发实战
<低功耗蓝牙工具APP开发实战> 什么是 LightBLE? 一个功能比较全面的蓝牙调试工具.支持所有使用蓝牙4.0低功耗的设备接入调试,提供蓝牙设备搜索.读取服务.浏览特征等操作. ...
- 使用低功耗蓝牙技术将可穿戴无线传感器连接到物联网---凯利讯半导体
工业物联网 (IIoT) 在很大程度上要依赖传感器从便携式可穿戴系统收集数据,以便监控运动.压力.湿度和其他众多特征,然后将这些数据馈送至云进行处理. 通过模块方式,我们可以快速轻松地将传感器添加到设 ...
- FL2440(S3C2440A 芯片) 开发板开发笔记
FL2440(S3C2440A 芯片) 开发板开发笔记 开发板的拨码开关指南: FL2440 改 vnfg 飞凌嵌入式 www. witech. com. cn 09. 8. 22 1 开发板使用手册 ...
- 低功耗蓝牙芯片CH579系列开发记录
低功耗蓝牙芯片CH579系列开发记录 文章目录 低功耗蓝牙芯片CH579系列开发记录 前言 一.CH579系列芯片 1.1 引脚排列 1.2 引脚描述 1.3 系统结构 1.4 最小系统 二.资料下载 ...
- 【BW16 应用篇】安信可BW16模组与开发板更新固件烧录说明
目录 前言 1 硬件准备 1.1 硬件准备 1.2 接线说明 1.3 固件烧录说明 1.3.1 设置模组或开发板进入烧录模式 1.3.2 烧录固件 注意 2 固件烧录完成验证操作 联系我们 前言 本文 ...
- 基于富芮坤的FR801 BLE芯片开发
基于富芮坤的FR801 BLE芯片开发 前言:本篇主要讲解如何利用官方的SDK和ble 协议栈知识开发所需的功能 注意:因为官方是每个工程都导入同一个底层-所以一旦修改了components ,全部工 ...
最新文章
- Docker(七):Docker build 、Docker Dockerfile 详解
- 为何BERT在 NLP 中的表现如此抢眼?
- keil2c语言使用教程,Keil教程(2)
- 网站图片多服务器选多大,网站上的图片一般多大合适
- android core log,Android 日志系统(Logcat)的实现分析
- JavaScript学习(五十六)—寄生式继承(临时构造器的使用)
- pytorch 训练过程acc_pytorch应用(四)训练过程可视化visdom
- 9.郝斌C语言笔记——变量的作用域和存储方式
- vue中使用阿里图标
- 打开Form时报错 FRM-18108:装载下列对象失败 FRM-10102不能附加PLSQL程序库
- 【我们一起写框架】MVVM的WPF框架(一)—序篇
- 将淘宝客链接转换为正常淘宝、天猫商品链接
- 未来的技术型人才,社会杰出人物的java人生实时记录
- Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
- win10 彻底卸载docker
- 阿里云OSS文件上传,后台签名方案
- SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)
- changeclass matlab,change用法?
- 网站如何解决图片过大加载慢的问题?
- 【高级持续性威胁跟踪】红队视角看Sunburst后门中的TTPs