本文是参考一些博文和书籍做的笔记,如有不适联系删除

参考:https://www.cnblogs.com/iini/p/8977806.html

参考文章: 《BLE4.0 低功耗蓝牙 协议 总结 

目录

1、广播

1.1、广播间隔

1.2、三个信道切换时间间隔

1.3、广播事件

2、扫描与应答

3、建立连接

3.1、锚点

3.2、重要的时间参数

3.3、连接状态--主机

3.2、连接状态--从机

4、广播软件设计流程图



 1、广播


在广播事件中, 每一个广播事件都会在 3 个广播信道中进行数据传输, 而且每一个事件都是以最小的信道编号开始传输;也就是说当广播事件来了,这个 PDU 是依次从广播通道 37、 38、 39 中进行传输。并不是一起同时在三个信道一起广播;设备B不断发送广播信号给手机(Observer),如果手机不开启扫描窗口,手机是收不到设备B的广播的,如下图所示,不仅手机要开启射频接收窗口,而且只有手机的射频接收窗口跟广播发送的发射窗口匹配成功,而且广播射频通道和手机扫描射频通道是同一个通道,手机才能收到设备B的广播信号。也就是说,如果设备B在37通道发送广播包,而手机在扫描38通道,那么即使他们俩的射频窗口匹配,两者也是无法进行通信的。由于这种匹配成功是一个概率事件,因此手机扫到设备B也是一个概率事件,也就是说,手机有时会很快扫到设备B,比如只需要一个广播事件,手机有时又会很慢才能扫到设备B,比如需要10个广播事件甚至更多。


1.1、广播间隔


T_advEvent = advInterval + advDelay

T_advEvent 也就是图1中的 t ; advInterval 是 0.625ms 的倍数,在 20ms~10.24s 之间。如果广播类型是非定向扫描事件或者非定向不可连接广播事件,这个值不能小
100ms。如果广播事件类型是非定向可连接事件,这个是只需大于20ms 即可;

advDelay 是一个随机数,在 0ms~10ms 之间,在每一个广播事件中都有。 由于设备间的时钟会有不同程度的漂移,所以这个随机延时的作用不但能消除设备之间时钟漂移,还能避免相同信道及时间点上的冲突;


1.2、三个信道切换时间间隔


上面有说道广播事件之间有时间间隔,那么广播本身里面有 3 个信道进行数据传输,这 3 个信道之间的时间间隔是多少?在协议中有规定:也就是两个连续的通用广播之间的时间必须小于等于 10ms


1.3、广播事件


在广播状态下,链路层在广播事件中发送广播 PDU 。 广播事件共有 4 种:

  1. 非定向可连接事件(ADV_IND)
  2. 定向可连接事件(ADV_DIRECT_IND)
  3. 非定向不可连接事件(ADV_NONCONN_IND)
  4. 非定向扫描事件(ADV_DISCOVER_IND/ADV_SCAN_IND)

(1)非定向可连接事件(ADV_IND):这个报文发送之后可以接收由扫描者发送的(SCAN_REQ PDU)扫描请求, 或者由发起者发送的(CONNECT_REQ PDU)连接请求。 而接收后链路层需要早同一个信道上进行扫描者或者发起者的应答。 当接收的数据报文没能通过广播滤波政策, 要么就用下一个广播信道进行广播要么就关闭广播事件。后面都是以这个事件做解析

(2)定向可连接广播事件(ADV_DIRECT_IND)

这个广播是为了快速建立连接。这种报文包含两个地址:广播者地址和发起者的地址。 发起设备收到发给自己的定向广播报文后,可以立刻发送连接请求事件作为回应,并进入连接状态。定向广播事件有特殊的时序要求。完整的广播事件必须每 3.75ms之内重复一次。这一要求似的扫描设备只需扫描 3.75ms 便可以收到定向广播设备的消息。

(3)非定向不可连接事件(ADV_NONCONN_IND)
这是一个很奇葩的事件,它像是一个车模,大张旗鼓的告诉别人,但是不允许别人摸她,而这个事件比模特更加的奇葩,模特至少可以合个影,但是这个事件大声的告诉别人我在这里,之后就不搭理别人
了,不接受任何信息,只管自己在每个广播事件中发送数据。时间要求和通用广播事件一样。它只能根据主机的要求在广播态和就绪态之间切换,也是唯一可用于只有发射机而没有接收机设备的广播类型

(4)可发现不可连事件(ADV_DISCOVER_IND/ADV_SCAN_IND)

这个广播其实是一个非定向可发现的广播,它和通用广播的时间控制是一样的,应答也是 SCAN_REQ PDU 和 SCAN_RSP PDU,这个广播和通用广播的区别是,它不能建立连接, 只能处于广播态或者就绪态。这是一种适用于广播数据的广播形式,动态数据可以包含于广播数据中, 而静态数据可以包含于扫描响应数据之中。


2、扫描与应答


如果接收到的 SCAN_REQ PDU 通过了滤波政策,那么广播者需要在同一信道并且在接收到数据到发送 SCAN_RSP PDU 扫描应答报文的时间一定是 150±2 µs 完成


3、建立连接



3.1、锚点


连接事件开始的点叫做锚点(The start of a connection event iscalled an anchor point)。主机在锚点开始连接事件,从机需要在锚点前进入侦听状态。在连接状态下锚点由从机接收的第一个连接事件报文决定,并决定了将来的锚点。


3.2、重要的时间参数


CONNECT_REQ PDU中包含了两个重要的参数,解析如下:

(1)Transmit window offset

transmitWindowOffset = WinOffset * 1.25 ms

它是传输窗口偏移的时间,同样这个值需要乘以 1.25ms 才是真正的传输窗口偏移时间。 这个参数其实只在第一连接事件发生前或者连接参数更新时用; 范围:[0, connInterval]

(2)Transmit window size  它为传输窗口的时间

transmitWindowSize = WinSize * 1.25 ms

它为传输窗口的时间,而且这个值乘以 1.25ms 才是真正的传输窗口时间 范围:[1.25ms,MIN(10ms, connInterval - 1.25 ms)]

(3)connect_Interval 这个就是传说中的连接间隔时间

connInterval = Interval * 1.25 ms

它是 1.25ms 的倍数,范围:[7.5ms,4.0S]

(4)Latency 从机潜伏次数

范围:[0, MIN(((connSupervisionTimeout / connInterval) - 1),500)]

(5)timeout 连接超时

如果连接状态下,很长时间都没有连接事件发生,或者连接事件发送总是得不到从机的应答,是不是该考虑连接出了问题呢?在协议中 也 有 规 定 一 个 参 数 — — 连 接 监 管 超 时

100ms~30.0s

timeout  > (1 + connSlaveLatency) *connInterval    // 这应该好理解,从机潜伏期是双方沟通和允许的事情,所以超时时间一定要大于上面表达式才行


3.3、连接状态--主机


在第一个连接事件中,锚点是由 CONNECT_REQ PDU 中的参数决定的。当主机发送完 CONNECT_REQ 报文之后,接着发送第一个连接事件的报文,而从机接到 CONNECT_REQ 报文后,做好进入连接状态的准备工作后,根据 CONNECT_REQ 中的参数,决定开始侦听的时间,但是必须保证,主机在锚点前从机必须已经进入侦听状态;

从上可知传输偏移一定是在 1.25ms 之后。也就是说,连接状态的第一包数据传输一定是在[1.25 ms + transmitWindowOffset, 1.25ms + transmitWindowOffset + transmitWindowSize]之间


3.2、连接状态--从机


对于从机接收到CONNECT_REQ 之后,协议留了至少 1.25ms 的时间让其准备进入连接状态,进入之后偏移一个传输窗口的时间,进而进入扫描窗口开始侦听空中的包,看是否有自己需要的报文,所以在上面的图中传输窗口都是用虚线的,也就是说传输口规定了最大时间,但是并不一定要等这么久的时间,收到数据就可以去处理,并开始计时连接间隔时间,等到连接间隔时间到,再次进入扫描窗口,侦听报文。

从机第一个连接事件接收失败处理过程:

对于主机来说控制着连接状态下的几乎所有权利,可是对于配合者的从机却是有些难办。如果理想状态,晶振没有任何偏差,那么有了这个时序,就很容易完成这个程序的编写。事实总是很残酷的,晶振总有一些漂移的,这样就会带来主机肯定是发送了连接事件中的第一个报文,但是从机并不一定能接收得到,所以看看从机如果在第一个连接事件中没有接收到数据报文的话,时间又是怎么控制的:

如果持续6次从机都没有应答,意味着连接建立失败;


4、广播软件设计流程图


BLE蓝牙笔记----广播连接过程相关推荐

  1. android 实现ble蓝牙自动配对连接

    蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框. 本文章用来连接蓝牙设备ai-thinker,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值 ...

  2. android 多个蓝牙连接电脑,Android BLE蓝牙多设备连接

    多设备连接的问题很典型,一方面实际应用中存在同时和多个设备通信的场景,另一方面蓝牙连接较耗时,如果能尽可能保持连接,则可省去不少时间,用户体验更好. 然而多设备连接也有一些问题要注意,有以下几点: 一 ...

  3. BLE蓝牙的广播类型

    广播的类型一般分为四种,见如下表格: 1. 可连接的非定向广播(Connectable Undirected Event Type): 这是一种用途最广的广播类型,包括广播数据和扫描响应数据,它表示当 ...

  4. 蓝牙BLE的连接过程,自动连接过程

    BLE连接,再次连接 BLE的第一次连接 1 蓝牙连接过程中的角色 2 连接过程中两个角色对应的状态 ble蓝牙的连接过程 二. 再次自动连接 1 二次连接的特点: BLE的第一次连接 所谓连接,分为 ...

  5. BLE蓝牙广播包的比特流处理之白噪化和CRC校验

    目标: 1. 通过蓝牙协议了解BLE蓝牙的广播帧结构 2.了解蓝牙比特流处理流程 3.使用matlab重现白噪化和CRC校验 1.蓝牙的广播帧结构: 通过蓝牙BLE协议我们可以看到,蓝牙的广播帧结构如 ...

  6. ble连接过程建立_BLE配对绑定过程梳理

    (一)BLE SM为以下三种procedure提供支持: 1. Pairing; 2. Bondig; 3. Encryption Re-establishment; 区别于传统蓝牙的配对过程,BLE ...

  7. Android BLE学习(三):编写自己的 BLE蓝牙读写工具(功能仿照nrf master control panel)

    http://my.csdn.net/lidec 背景 由于nordic官方的nrf master control panel只提供了apk,很多同学学习起来都得自己摸索蓝牙的读写,项目中整理了BLE ...

  8. ble连接过程建立_BLE4.0教程一 蓝牙协议连接过程与广播分析

    1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低功耗蓝牙技术,将三种规范合而为一.它继承了蓝牙技术在无线 ...

  9. IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析

    IoT:BLE4.0教程一 蓝牙协议连接过程与广播分析 1.蓝牙简介 什么是蓝牙4.0 蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,蓝牙4.0版本涵盖了三种蓝牙技术,即传统蓝牙.高速蓝牙和低 ...

最新文章

  1. 解决 sh: java: command not found 问题
  2. 关于读构建之法后的疑惑
  3. 这样做,RMAN备份速度可提高6倍!
  4. 婚宴座位图html5,婚礼小知识,婚宴座位怎么安排才不得罪人(主桌)
  5. 《强化学习》中的第11章:基于函数逼近的离轨策略方法
  6. sql server 查询数据库所有的表名+字段
  7. docker for windows pull镜像文件的安装位置改变方法
  8. 数据-第15课-栈的应用实战一
  9. CodeForces 650A Watchmen
  10. Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树
  11. 图案怎么导入ps?Photoshop图案导入教程
  12. 微信小程序调查问卷避坑
  13. 光电自动避障小车_凌鸟智能总结了一下激光导航反射板AGV小车的优缺点!
  14. __raw_writel, writel_relaxed 和 writel的区别
  15. ios 线条球_烧脑挑战画线给小球回家
  16. Matlab蒙特卡罗模拟
  17. HTML/CSS 圆形头像
  18. python zxing 识别条码_详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强...
  19. 电子电路期末考试复习预测题一(内附详细解析)
  20. 14 面对对象(多态;抽象类;接口)

热门文章

  1. JYM虚拟机性能监控与故障处理工具
  2. matlab获取矩阵的行数与列数
  3. MySQL之窗口函数
  4. hadoop概念及框架介绍
  5. R语言解决出现Error in install.packages(highcharter) : 找不到对象‘highcharter‘的问题
  6. rust编程:函数返回值
  7. 风之大陆 服务器不稳定,风之大陆9月26日合服公告 合并服务器的常见问题
  8. 优化算法SGD/ASGD/AdaGrad/Adadelta/RMSprop/Adam/Adamax/SparseAdam/L-BFGS/Rprop
  9. 【codevs2293】山海经 线段树
  10. 旧android 4 平板,小米平板4是否值得买?简单体验后我退货了