精华内容
下载资源
问答
  • interval latency timeout BLE连接间隔对于功耗的影响

    interval
    latency
    timeout
    BLE连接间隔对于功耗的影响

    展开全文
  • 亲测有用的,还有普通连接,ble连接,数据读取,数据同步等等
  • BLE连接流程图

    2021-06-12 22:12:08
    BLE连接流程图,基于android11

    BLE连接流程图,基于android11

    展开全文
  • 详解BLE连接建立过程

    万次阅读 多人点赞 2018-04-30 09:06:06
    同一款手机,为什么跟某些设备可以连接成功,而跟另外一些设备又连接不成功?同一个设备,为什么跟某些手机可以建立连接,而跟另外一些手机又无法建立连接?同一个手机,同一个...BLE连接示例假设我们有一台手机A...

    同一款手机,为什么跟某些设备可以连接成功,而跟另外一些设备又连接不成功?同一个设备,为什么跟某些手机可以建立连接,而跟另外一些手机又无法建立连接?同一个手机,同一个设备,为什么他们两者有时候连起来很快,有时候连起来又很慢?Master是什么?slave又是什么?什么又是Connection event和slave latency?希望这篇文章能帮助你回答上述问题。

    BLE连接示例

    假设我们有一台手机A(以安卓手机为例),一个设备B(设备名称:Nordic_HRM),如下所示,我们可以通过安卓设置菜单里面的蓝牙界面,让两者连接起来。

    1. 打开安卓设置菜单
    2. 选择“蓝牙”条目
    3. 打开蓝牙
    4. 等待系统搜索结果,不出意外的话,设备“Nordic_HRM”会出现在结果列表中
    5. 点击“Nordic_HRM”,手机将与此设备建立连接

    上述即为大家直观感受到的“连接”,那么手机要与设备Nordic_HRM建立连接,具体包含哪些流程?他们为什么可以连接成功?下面给大家一一道来。

    广播(advertising)

    在手机跟设备B建立连接之前,设备B需要先进行广播,即设备B(Advertiser)不断发送如下广播信号,t为广播间隔。每发送一次广播包,我们称其为一次广播事件(advertising event),因此t也称为广播事件间隔。虽然图中广播事件是用一根线来表示的,但实际上广播事件是有一个持续时间的,蓝牙芯片只有在广播事件期间才打开射频模块,这个时候功耗比较高,其余时间蓝牙芯片都处于idle状态,因此平均功耗非常低,以Nordic nRF52810为例,每1秒钟发一次广播,平均功耗不到11uA

     

    上面只是一个概略图,按照蓝牙spec,实际上每一个广播事件包含三个广播包,即分别在37/38/39三个通道上同时广播相同的信息,即真正的广播事件是下面这个样子的。

     

    设备B不断发送广播信号给手机(Observer),如果手机不开启扫描窗口,手机是收不到设备B的广播的,如下图所示,不仅手机要开启射频接收窗口,而且只有手机的射频接收窗口跟广播发送的发射窗口匹配成功,手机才能收到设备B的广播信号。由于这种匹配成功是一个概率事件,因此手机扫到设备B也是一个概率事件,也就是说,手机有时会很快扫到设备B,比如只需要一个广播事件,手机有时又会很慢才能扫到设备B,比如需要10个广播事件甚至更多。

     

     

    建立连接(connection)

    根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,手机在第三个广播事件的时候扫到了设备B,并发出了连接请求conn_req

     

    上图的交互流程比较粗略,为此我们引入下图,以详细描述连接建立过程。

    图5:连接建立过程

    注:图中M代表手机,S代表设备B,M->S表示手机将数据包发给设备B,即手机开启Tx窗口,设备B开启Rx窗口;S->M正好相反,表示设备B将数据包发给手机,即设备B开启Tx窗口,手机开启Rx窗口。

    如图所示,手机在收到A1广播包ADV_IND后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS后给Advertiser发送一个connection request命令,即A2数据包,告诉advertiser我将要过来连你,请做好准备。Advertiser根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:

    • Transmit window offset,定义如图5所示
    • Transmit window size,定义如图5所示
    • connect_req数据包完整定义如下所示  

    connect_req其实是在告诉advertiser,手机将在Transmit Window期间发送第一个同步包(P1)给你,请在这段时间里把你的射频接收窗口打开。设备B收到P1后,T_IFS时间后将给手机回复数据包P2。一旦手机收到数据包P2,连接即可认为建立成功。后续手机将以P1为锚点(原点),Connection Interval为周期,周期性地给设备B发送Packet,Packet除了充当数据传送功能,它还有如下两个非常重要的功能:

    1. 同步手机和设备的时钟,也就是说,设备每收到手机发来的一个包,都会把自己的时序原点重新设置,以跟手机同步。
    2. 告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(手机)称为Master或者Central,把被连接者(之前的Advertiser)称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能把自己的数据回传给Master。

    连接失败

    有如下几种典型的连接失败情况:

    1. 如图5所示,如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败。此时应该排查master那边的问题,看看master为什么没有在约定的时间把P1发出来。
    2. 如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去,那么连接也会失败。此时应该排查slave这边的问题,看一看slave为什么没有把P2回过去
    3. 如果master把P1发出来了,slave也把P2回过去了,此时主机还是报连接失败,这种情况有可能是master软件有问题,需要仔细排查master的软件。
    4. 还有一种比较常见的连接失败情况:空中射频干扰太大。此时应该找一个干净的环境,比如屏蔽室,排除干扰后再去测试连接是否正常。

    Connection events

    连接成功后,master和slave在每一个connection interval开始的时候,都必须交互一次,即master给slave发一个包,slave再给master发一个包,整个交互过程称为一个connection event。蓝牙芯片只有在connection event期间才把射频模块打开,此时功耗比较高,其余时间蓝牙芯片都是处于idle状态的,因此蓝牙芯片平均功耗就非常低,以Nordic nRF52810为例,每1秒钟Master和Slave通信1次,平均功耗约为6微安左右。Master不可能时时刻刻都有数据发给slave,所以master大部分时候都是发的空包(empty packet)给slave。同样slave也不是时时刻刻都有数据给master,因此slave回复给master的包大部分时候也是空包。另外在一个connection event期间,master也可以发多个包给slave,以提高吞吐率。综上所述,连接成功后的通信时序图应该如下所示:

     

    图7: 连接成功后的通信时序图(每个connection event只发一个包)

    图9: 连接成功后的通信时序图( connection event可能发多个包)

     

    图10:connection event细节图

    Slave latency

    图10中出现了slave latency(slave latency = 2),那么什么叫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才上报,直接像正常情况进行传输即可,这样既节省了功耗,又提高了数据传输的实时性。

    GAP层角色总结

    对上面提到的手机和设备B,在BLE通信过程中,随着时间的推移,他们的状态在发生变化,两者的关系也在发生变化,为此蓝牙spec根据不同的时间段或者状态给手机和设备B取不同的名字,即GAP层定义了如下角色:

    • advertiser。 发出广播的设备
    • observer或者scanner。可以扫描广播的设备
    • initiator。能发起连接的设备
    • master或者central。连接成功后的主设备,即主动发起packet的设备
    • slave或者peripheral。连接成功后的从设备,即被动回传packet的设备

    图11通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。同样,图11也把advertiser和peripheral串起来了,其实advertiser和peripheral也是相互独立的,即一个设备可以只作为advertiser角色,而不支持peripheral角色。

    图11:GAP层角色

     

    展开全文
  • ble library 和周边 ble 连接 sample
  • [BLE]详解BLE连接建立过程

    千次阅读 2019-07-26 19:33:31
    BLE连接示例 假设我们有一台手机A(以安卓手机为例),一个设备B(设备名称:Nordic_HRM),如下所示,我们可以通过安卓设置菜单里面的蓝牙界面,让两者连接起来。 打开安卓设置菜单 选择“蓝牙”条目 打开蓝牙 ...

    转载:

    https://www.cnblogs.com/iini/p/8972635.html

    BLE连接示例

    假设我们有一台手机A(以安卓手机为例),一个设备B(设备名称:Nordic_HRM),如下所示,我们可以通过安卓设置菜单里面的蓝牙界面,让两者连接起来。

    1. 打开安卓设置菜单
    2. 选择“蓝牙”条目
    3. 打开蓝牙
    4. 等待系统搜索结果,不出意外的话,设备“Nordic_HRM”会出现在结果列表中
    5. 点击“Nordic_HRM”,手机将与此设备建立连接
      在这里插入图片描述

    广播(advertising)

    在手机A(Observer)跟设备B建立连接之前,设备B需要先进行广播,即设备B(Advertiser)不断发送如下广播信号,t为广播间隔。每发送一次广播包,我们称其为一次广播事件(advertising event),因此t也称为广播事件间隔。虽然图中广播事件是用一根线来表示的,但实际上广播事件是有一个持续时间的,蓝牙芯片只有在广播事件期间才打开射频模块,这个时候功耗比较高,其余时间蓝牙芯片都处于idle状态,因此平均功耗非常低,以Nordic nRF52810为例,每1秒钟发一次广播,平均功耗不到11uA。
    在这里插入图片描述
    上面只是一个概略图,按照蓝牙spec,实际上每一个广播事件包含三个广播包,即分别在37/38/39三个射频通道上同时广播相同的信息,即真正的广播事件是下面这个样子的。
    在这里插入图片描述
    设备B不断发送广播信号给手机(Observer),如果手机不开启扫描窗口,手机是收不到设备B的广播的,如下图所示,不仅手机要开启射频接收窗口,而且只有手机的射频接收窗口跟广播发送的发射窗口匹配成功,而且广播射频通道和手机扫描射频通道是同一个通道,手机才能收到设备B的广播信号。也就是说,如果设备B在37通道发送广播包,而手机在扫描38通道,那么即使他们俩的射频窗口匹配,两者也是无法进行通信的。由于这种匹配成功是一个概率事件,因此手机扫到设备B也是一个概率事件,也就是说,手机有时会很快扫到设备B,比如只需要一个广播事件,手机有时又会很慢才能扫到设备B,比如需要10个广播事件甚至更多。
    在这里插入图片描述

    建立连接(connection establishment)

    根据蓝牙spec规定,advertiser发送完一个广播包之后150us(T_IFS),advertiser必须开启一段时间的射频Rx窗口,以接收来自observer的数据包。Observer就可以在这段时间里给advertiser发送连接请求。如下图所示,手机在第三个广播事件的时候扫到了设备B,并发出了连接请求CONN_REQ(CONN_REQ又称为CONNECT_IND)。
    在这里插入图片描述
    上图的交互流程比较粗略,为此我们引入下图,以详细描述连接建立过程。
    在这里插入图片描述
    注:图中M代表手机,S代表设备B,M->S表示手机将数据包发给设备B,即手机开启Tx窗口,设备B开启Rx窗口;S->M正好相反,表示设备B将数据包发给手机,即设备B开启Tx窗口,手机开启Rx窗口。

    如图所示,手机在收到A1广播包ADV_IND后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS时间后给Advertiser发送一个connection request命令,即A2数据包,告诉advertiser我将要过来连你,请做好准备。Advertiser根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:

    • Transmit window offset
    • Transmit window size
    • connect_req数据包完整定义如下所示
      在这里插入图片描述

    connect_req其实是在告诉advertiser,手机将在Transmit Window期间发送第一个同步包(P1)给你,请在这段时间里把你的射频接收窗口打开。
    设备B收到P1后,T_IFS时间后将给手机回复数据包P2(ACK包)。
    一旦手机收到数据包P2,连接即可认为建立成功。
    当然,实际情况会比较复杂,手机有可能收不到P2,这个时候手机将持续发送同步包直到超时时间(supervision timeout)到,在此期间只要设备B回过一次ACK包,连接即算成功。
    所以一旦P1包发出,主机(手机)即认为连接成功,而不管有没有收到设备的ACK包。这也是为什么在Android或者iOS系统中,应用经常收到连接成功的回调事件(该回调事件就是基于P1包有没有发出,只要P1包发出,手机即认为连接成功,而不管有没有收到设备的ACK包),但实际上手机和设备并没有成功建立连接。后续手机将以P1为锚点(原点),Connection Interval为周期,周期性地给设备B发送数据包(Packet),Packet除了充当数据传送功能,它还有如下两个非常重要的功能:

    1. 同步手机和设备的时钟,也就是说,设备每收到手机发来的一个包,都会把自己的时序原点重新设置,以跟手机同步。
    2. 告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(手机)称为Master或者Central,把被连接者(之前的Advertiser)称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能在规定的时间把自己的数据回传给Master。

    连接失败

    有如下几种典型的连接失败情况:

    1. 如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败。此时应该排查master那边的问题,看看master为什么没有在约定的时间把P1发出来。
    2. 如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去或者没有在超时时间内把P2回过去,那么连接也会失败。此时应该排查slave这边的问题,看一看slave为什么没有把P2回过去
    3. 如果master把P1发出来了,slave也把P2回过去了,此时主机或者从机还是报连接失败,这种情况有可能是软件有问题,需要仔细排查master或者slave的软件。
    4. 还有一种比较常见的连接失败情况:空中射频干扰太大。此时应该找一个干净的环境,比如屏蔽室,排除干扰后再去测试连接是否正常。

    Connection events

    连接成功后,master和slave在每一个connection interval开始的时候,都必须交互一次,即master给slave发一个包,slave再给master发一个包,整个交互过程称为一个connection event或者gap event。蓝牙芯片只有在connection event期间才把射频模块打开,此时功耗比较高,其余时间蓝牙芯片都是处于idle状态的,因此蓝牙芯片平均功耗就非常低,以Nordic nRF52810为例,每1秒钟Master和Slave通信1次,平均功耗约为6微安左右。Master不可能时时刻刻都有数据发给slave,所以master大部分时候都是发的空包(empty packet)给slave。同样slave也不是时时刻刻都有数据给master,因此slave回复给master的包大部分时候也是空包。另外在一个connection event期间,master也可以发多个包给slave,以提高吞吐率。综上所述,连接成功后的通信时序图应该如下所示:

    在这里插入图片描述

    图7: 连接成功后的通信时序图(每个connection event只发一个包)

    在这里插入图片描述

    图9: 连接成功后的通信时序图( connection event可能发多个包)

    在这里插入图片描述

    图10:connection event细节图

    Slave latency

    图10中出现了slave latency(slave latency = 1),那么什么叫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才上报,直接像正常情况进行传输即可,这样既节省了功耗,又提高了数据传输的实时性。

    GAP层角色总结

    对上面提到的手机和设备B,在BLE通信过程中,随着时间的推移,他们的状态在发生变化,两者的关系也在发生变化,为此蓝牙spec根据不同的时间段或者状态给手机和设备B取不同的名字,即GAP层定义了如下角色:

    • advertiser。 发出广播的设备
    • observer或者scanner。可以扫描广播的设备
    • initiator。能发起连接的设备
    • master或者central。连接成功后的主设备,即主动发起packet的设备
    • slave或者peripheral。连接成功后的从设备,即被动回传packet的设备
      在这里插入图片描述

    通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。同样,图11也把advertiser和peripheral串起来了,其实advertiser和peripheral也是相互独立的,即一个设备可以只作为advertiser角色,而不支持peripheral角色。

    在这里插入图片描述

    展开全文
  • android_Bluetooth_ssp-BLE,一个可以选择spp或者BLE连接的数据交换app
  • 该参考设计还包含全套 BLE 连接设计,可轻松连接到已启用 BLE 的智能手机、平板电脑等设备 特性采用AFE4490同时作为脉动式血氧计测量的 LED 传输和接收路径 用于保留算法和校准数据的 MSP430F5528 MCU 采用 TI CC...
  • 设备A为BLE连接发起方,B为Advertiser。从上图,大概可以分解出BLE连接的几个步骤: A携带连接设备B的信息,发起连接,开始侦听待B的广播包; 待连接设备B,负责发起广播包; 如果A能在设定...
  • BLE连接参数更新过程详解 有关连接参数概念和作用我们在 Generic Access Profile (GAP) 一章中已经详细讲解过,这一章演示如何通过修改simple_peripheral例程实现连接参数更新,并分析程序流程。 介绍 连接...
  • Adnroid 4.0 BLE连接以及数据传输.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 微信小程序蓝牙BLE连接读取

    千次阅读 2020-03-17 19:41:53
    微信小程序蓝牙BLE连接读取 链接: 微信官方文档. 调用小程序相关的函数,文档有小程序函数的具体说明 相关的API查看 ...连接流程顺序: 1, 开启蓝牙适配 wx.openBluetoothAdapter...
  • 如何使用C#根据扫描到的蓝牙mac地址进行BLE连接</p>
  • android ble连接设备demo

    2020-11-13 09:56:12
    android 低功耗蓝牙连接demo 有连接 读写操作,制定设备可以改源码
  • 前言由于自己工作中需要开发ble的项目,于是在折腾了一段...BLE前身是NOKIA开发的Wibree技术,主要用于实现移动智能终端与周边配件之间的持续连接,是功耗极低的短距离无线通信技术,并且有效传输距离被提升到了100...
  • 同一款手机,为什么跟某些设备可以连接成功,而跟另外一些设备又连接不成功?同一个设备,为什么跟某些手机可以建立连接,而跟另外一些手机又无法建立连接?同一个手机,同一个设备,为什么他们两者有时候连起来很快...
  • Android 蓝牙ble连接前一定需要配对么?从网上查资料有人专做配对的, 但是我要求连接是不需要配对的。我按照官方文档上写的代码,发现写出来连接前需要配对,有没有做过的人帮忙解答一下。
  • 蓝牙ble连接参数更新和低功耗原理

    千次阅读 2016-03-26 09:12:06
     当一个蓝牙BLE连接活跃了一段时间以后,连接参数也许不再适用于当前服务或者出 于高效率的目的,主设备对从设备的连接参数进行更新。主设备发出连接参数更新请求以 后,主从设备不需要进行协商,从设备接受,...
  • imuduino-ble-js 用于通过 BLE 和 Node/IO 连接到 IMUduino 的库
  • BLE连接中的中心设备与外围设备 为在LE物理传输上运行的设备定义了四种GAP角色: •Broadcaster •Observer •Peripheral •Central   外围设备:  建立连接过程中接受建立一个活跃的物理连接请求的LE设备...
  • 我有几个问题/疑问:1)有没有办法设置/覆盖BLE中央设备的连接或通知间隔。我发现Android的默认连接间隔固定为7.5ms。有没有办法更改此连接/通知延迟间隔设置。2)在连接远程设备时,我经常在随机的时间间隔内面临断开...
  • Android 蓝牙4.0 Ble 连接Ble模块

    万次阅读 2015-06-05 11:55:43
    Ble连接之后就不是像以前那样,建立个Socket通信,请求ServerSocket允许连接,然后就开始眉来眼去的相互收发数据了。在取得BluetoothGatt后,需要读取蓝牙模块提供的Service、Characteristic,选择需要的通道进行...
  • BLE 连接过程具体分析

    2020-05-06 11:31:36
    在熟悉以下的连接过程需要掌握的: BLE 框架、HCI pack、L2CAP pack
  • 前两天在使用自家的app上发现了一个问题,在使用app通过ble连接上从机后,从机断开电源导致蓝牙断开的情况下,部分手机的onConnectionStateChange方法和相关监听ble断开的广播许久都没有返回,返回慢(三星s7,...
  • BLE 连接间隔

    千次阅读 2015-12-11 10:58:09
    连接间隔就是两个连接事件之间的时间间隔,连接间隔以1.25为单位,连接间隔的值为6(7.5ms)~3200(4s).不同的应用可能要求不同的时间间隔。长的时间间隔的优势是显著地节省功耗,因为设备可以在连接事件之间有较长时间...
  • 10003是微信蓝牙连接经常碰到的问题,微信官方给出的文档中就简单的描述为“connection fail”,备注为“连接失败”。然而,实际上出现10003的状况有很多,比如根据deviceId连接蓝牙时,蓝牙设备未开启或异常导致...
  • 使用android4.3提供的BLE API,可以找到外围设备(用于检测心率的BLE设备,手机用的galaxy s3 刷的是三星官方给的rom),但在连接时,很快就断开(有连接成功的时候,昙花一现,后面再也没成功过),在BluetoothGatt内部...
  • 蓝牙协议分析——BLE连接有关的技术分析 转自:https://sanwen8.cn/p/214aKry.html 1前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connection)是一个相当消耗资源(power和带宽)的过程。特别...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,363
精华内容 6,145
关键字:

ble连接