蓝牙广播 连接资料整理 2
3 BLE连接过程
总体流程大致为:发现设备->配对/绑定设备->建立连接->数据通信
具体过程:
主设备(连接过程中实际是一个client)通过扫描到从设备(连接过程中实际是一个server)广播的的数据信息,其中的address作为目标目标蓝牙设备的MAC地址,通过调用连接方法获取设备连接。
3.1 广播间隔:
图中AdvInterval是0.625ms的倍数,在20ms – 10.24s 之间。如果广播类型是非定向扫描事件或者非定向不可连接广播事件,这个值不能100ms。如果广播时间类型是非定向可连接事件,这个值只需大于20ms即可;
AdvDelay是一个随机数,在0ms – 10ms 之间,在每个广播事件中都有,由于设备的时钟会有不同程度的漂移,所以这个随机延时的作用不但能消除设备之间时钟漂移,还能避免相同信道及时间点上的冲突。
广播间隔时序:
3.2 三信道切换时间间隔:
除广播事件之间有时间间隔,广播本身里面有3个信道进行数据传输,在蓝牙协议中规定,两个连续的通用广播之间的时间必须小于等于10ms。
3.3 扫描与应答
如果广播者接收到Scan_Req,广播者需要在通一信道发送Scan_Rsp, 应答报文的时间一定是150±2us完成。
3.4 建立连接
根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,主机在扫到了从机后,并发出了连接请求CONNECT_REQ。
3.4.1 概念补充
3.4.1.1 锚点
事件开始的点叫做锚点(The start of a connection event iscalled an anchor point)。在连接状态下锚点由从机接收的第一个连接事件报文决定,并决定了将来的锚点。
3.4.1.2 CONNECT_REQ 数据包
主要结构如下。
Access Address + Packet Header + Initator Address(主设备) + Advertising Address(从设备) + Link Layer Data
Link Layer Data 主要结构如下:
Access Address + CRC Init + Window Size + Window Offset + Interval(数据间隔时间) + Latency(时延) + Timeout(中断连接最大时延) + Channel Map(跳频通道图) + HOP及CLOCK + CRC
(1)Transmit window offset 传输窗口偏移的时间,范围:[0, connInterval]
transmitWindowOffset = WinOffset * 1.25 ms
(2)Transmit window size它为传输窗口的时间,范围:[1.25ms,MIN(10ms, connInterval - 1.25 ms)]
transmitWindowSize = WinSize * 1.25 ms
(3)connect_Interval 这个就是传说中的连接间隔时间,范围:[7.5ms,4.0S]
connInterval = Interval * 1.25 ms
(4)Latency 从机潜伏次数
范围:[0, MIN(((connSupervisionTimeout / connInterval) - 1),500)]
(5)timeout 连接超时,范围[100ms – 30s]
如果连接状态下,很长时间都没有连接事件发生,或者连接事件发送总是得不到从机的应答,称为连接超时,
Timeout > (1 + connSlaveLatency) *connInterval超时时间一定要大于此表达式才行
3.4.2具体连接过程
如上图所示,Observer在收到Advertiser的ADV_IND(A1)后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS后给Advertiser发送一个CONNECT_REQ命令(A2),CONNECT_REQ其实是告诉Advertiser,主机将在Transmit window 期间发送第一个同步包(P1)给你,从机需在这段时间内,奖射频接收窗口打开,从机收到P1后,T_IFS后将给主机回复数据包P2,一旦主机接收到了数据包P2,即认为建立连接成功,后续将以P1为连接锚点,以Connection_Interval周期,周期性给从机发送Packet.
Packet除了充当数据传送功能,它还有如下两个非常重要的功能:
- 同步连接发起者和设备的时钟,也就是说,设备每收到连接发起者发来的一个包,都会把自己的时序原点重新设置,以跟连接发起者同步。
- 告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(手机或网关)称为Master或者Central,把被连接者(之前的Advertiser)称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能把自己的数据回传给Master。
3.4.3 连接后数据交互时序
Connection events
连接成功后,master和slave在每一个connection interval开始的时候,都必须交互一次,即master给slave发一个包,slave再给master发一个包,整个交互过程称为一个connection event。蓝牙芯片只有在connection event期间才把射频模块打开,此时功耗比较高,其余时间蓝牙芯片都是处于idle状态的,因此蓝牙芯片平均功耗就非常低。Master不可能时时刻刻都有数据发给slave,所以master大部分时候都是发的空包(empty packet)给slave。同样slave也不是时时刻刻都有数据给master,因此slave回复给master的包大部分时候也是空包。另外在一个connection event期间,master也可以发多个包给slave,以提高吞吐率。
连接成功后的通信时序图(每个connection event只发一个包)
连接成功后的通信时序图(每个connection event可能发多个包)
Connection event 细节图
Slave latency
在每一个connection interval开始的时候,Master和Slave必须交互一次,哪怕两者之间交互的是empty packet(空包),但如果slave定义了slave latency,比如slave latency = 9,此时slave可以每9个connection interval才回复一次master,也就是说slave可以在前面8个connection interval期间一直睡眠,直到第9个connection interval到来之后,才回复一个packet给master,这样将大大节省slave的功耗,提高电池续航时间。当然如果slave有数据需要上报给master,它也可以不等到第9个connection interval才上报,直接像正常情况进行传输即可,这样既节省了功耗,又提高了数据传输的实时性。
3.4.4 连接失败原因
有如下几种典型的连接失败情况:
- 如上图所示,如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败。此时应该排查master那边的问题,看看master为什么没有在约定的时间把P1发出来。
- 如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去,那么连接也会失败。此时应该排查slave这边的问题,看一看slave为什么没有把P2回过去
- 如果master把P1发出来了,slave也把P2回过去了,此时主机还是报连接失败,这种情况有可能是master软件有问题,需要仔细排查master的软件。
- 还有一种比较常见的连接失败情况:空中射频干扰太大。此时应该找一个干净的环境,比如屏蔽室,排除干扰后再去测试连接是否正常。
蓝牙广播 连接资料整理 2相关推荐
- 蓝牙广播“嗅探”模式应用
蓝牙广播"嗅探"模式应用 一:什么是蓝牙广播"嗅探"模式? 蓝牙BLE通信中分别配置为"蓝牙主设备"和"蓝牙从设备".通 ...
- IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析
IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析 1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低 ...
- android 蓝牙广播协议,Android蓝牙协议-蓝牙配对与连接
蓝牙设备在连接前,会先检查设备是否已经配对过,如果没有则先配对,配对完成后,再开始连接. onPreferenceTreeClick 蓝牙连接开始于设备列表 DeviceListPreferenceF ...
- ble连接过程建立_BLE4.0教程一 蓝牙协议连接过程与广播分析
1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低功耗蓝牙技术,将三种规范合而为一.它继承了蓝牙技术在无线 ...
- BLE4.0教程一 蓝牙协议连接过程与广播分析
1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低功耗蓝牙技术,将三种规范合而为一.它继承了蓝牙技术在无线 ...
- 蓝牙广播数据包_蓝牙BLE数据包格式汇总
以蓝牙4.0为例说明: BLE包格式有:广播包.扫描包.初始化连接包.链路层控制包(LL层数据包).逻辑链路控制和自适应协议数据包(即L2CAP数据包)等: 其中广播包又分为:定向广播包和非定向广播包 ...
- 【低功耗蓝牙】① 蓝牙广播数据格式分析
摘要 本文章主要讲解了蓝牙的发展史,蓝牙信号,蓝牙广播数据的格式.最后使用ESP32芯片MicroPython固件给出了蓝牙广播的具体代码,是蓝牙初学者很好的参考资料. 也可以参考下我在B站的蓝牙视频 ...
- BLE广播流程介绍 蓝牙广播 低功耗蓝牙广播的实现流流程介绍 /BLE Advertising flow ----- 蓝牙低功耗协议栈
零. 概述 主要介绍下蓝牙协议栈(bluetooth stack)低功耗蓝牙广播的流程以及协议栈的实现流程,BLE Advertising flow btsnoop以及流程在资料中的......\S ...
- 2.4G芯片做蓝牙广播发送数据(伪蓝牙)
伪蓝牙LE(Faking Bluetooth LE) Bluetooth LE是蓝牙4.0规范中引入的一项新技术. 除了名称外,它与蓝牙完全无关.它是为低功耗而设计的,设计表明了这一点.它不像真正的蓝 ...
最新文章
- 标星 6.1K!《Python 机器学习在线指南》分享
- oracle双机python连接_Python连接Oracle
- 使用 Caddy 自动化发布 Web 应用
- springboot整合mybatis增删改查(三):mybatis逆向工程
- linux 7 zip软件下载,linux安装使用7zip教程
- iOS:(接口适配器3)--iPhone适应不同型号 6/6plus 前
- 烂泥:更换ESXI5.0管理网卡及管理IP地址
- linux安装vmwareTools
- 微信原生支付 Native扫码支付( V3.3.7 版本)
- python的turtle库画苹果
- OpenGL第八版--初识OpenG
- 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
- AS179-92LF pHEMT GaAs FET单刀双掷(SPDT)开关SKYWORKS
- HiWork告诉你:拿什么来拯救你,我的时间
- windows中SyncToy(微软同步工具) v2.1汉化版
- 阻碍你成功的五个不良习惯
- 一、linux驱动开发-8.1-platform设备驱动
- 麦肯锡三部曲_《学会提问:麦肯锡工作法》—读书笔记导图分享
- unity 发布苹果商店_[Mac] Unity 导出 iOS 游戏并上架 App Store
- 单细胞测序分析及单细胞转录组