我们知道BLE通信过程是建立在连接基础之上的,按角色不同可以分为蓝牙主设备、蓝牙从设备,也叫中央设备和外围设备。以下简称为主机和从机。一次蓝牙通信,通常由主机发起,从机响应。我在调试蓝牙主机程序的过程中,发现经常会出现“秒断”的现象,即主机连接上从机,然后立马又断开了,断开原因是0x3e。经过查找资料和抓包分析,终于搞清楚了发生这个现象的原因。

先看下BLE核心规范《 Core_v4.2》中对0x3e的断开原因是怎么说明的,在文档的385页可以找到相关描述:

从字面意思看,是非常笼统的,意思发起了一个连接,但这个连接建立失败了。要想弄清楚这个问题的原因,必须要对蓝牙的连接过程有所了解。下面就结合BLE核心规范《 Core_v4.2》来看一下蓝牙的连接过程。在这个文档的第144页,可以找到和连接过程相关的描述:

上图中,设备A是蓝牙主机,B是蓝牙从机。BLE的连接过程,大致分为6个步骤:

1)主机进入连接态,侦听待连接设备的广播包。如果在指定时间内没侦听到,会导致连接超时,这个时间由开发者指定。

2)主机成功接收到从机的广播包。

3)主机发送一个连接请求包。

4)主机发出连接请求包后,不管从机有没有收到,都会立即转入连接状态,同时报给用户层一个“已连接上”的消息,也就是图中的4A。如果从机能收到这个连接请求包,则从机也立即转入连接状态,并报给用户层一个“已连接上”的消息。如果从机未能收到连接请求包,则不会发4B的消息。

5)主机随即发送一个同步包。

6)从机收到同步包后,回给主机一个同步包,然后不停循环5和6两个步骤,连接才是真正建立了。如果5和6任何一个包丢失,都会导致连接建立失败,报0x3e的断开原因。

知道了BLE连接的详细过程,再结合抓包工具抓取连接过程的数据包分析,可以很容易发现,通常是丢失第5步或者第6步的数据包,导致连接建立失败。而这两个包丢失,通常发生在周围存在很多蓝牙设备,导致信道十分拥挤的情况下。通过在空旷无多余蓝牙设备的地方实验发现,出现这个现象的概率大大降低,由此验证了这个推论。当周围蓝牙设备不可避免地过多时,应用层可以通过多次重连来规避这个问题。

BLE连接过程分析及异常断开0x3e错误原因分析相关推荐

  1. Linux数据链路tcp失败,TCP连接中的异常断开情况处理

    1.TCP连接中可能出现的异常断开情况 假设存在这样一种情况:在两个不同的主机Machine1.Machine2系统上分别运行两个应用程序Application1.Application2,在Appl ...

  2. win10更改计算机名无法连接网络,Win10宽带无法连接提示调制解调器报告了一个错误原因及解决方法...

    Win10系统是目前最新的版本之一,目前笔记本的初装系统都是Win10,而我们如果没有路由器的情况下,我们则需要拨号才可以上网,在过程中遇到宽带无法连接的情况,系统提示"调制解调器(或其他连 ...

  3. 段错误原因分析和查找

    转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  4. Lua(Codea) 中 table.insert 越界错误原因分析

    2019独角兽企业重金招聘Python工程师标准>>> Lua(Codea) 中 table.insert(touches, touch.id, touch) 越界错误原因分析 背景 ...

  5. “undefined reference to JNI_GetCreatedJavaVM”和“File format not recognized”错误原因分析...

    "undefined reference to JNI_GetCreatedJavaVM"和"File format not recognized"错误原因分析 ...

  6. Property 'X' not found on type entity.Customer错误原因分析

    错误原因分析: 实体类 entity.Customer的属性x一定要小写,规范规定 属性值的首字母必须小写. 另外需要在映射表上把小写字母属性值x 映射到数据库的表里的值大写X

  7. 项目连接不了mysql_关于Java项目中连接mysql失败的几种情况原因分析

    很多基础比较薄弱的童鞋对于Java链接mysql的错误原因不是很了解,今天我将罗列一下几种比较常见的错误类型,大家可以根据自己遇到的情况对号入座.密码错误导致的mysql连接不上,密码错误分为以下几种 ...

  8. Entity Framework 数据并发访问错误原因分析与系统架构优化

    本文主要记录近两天针对项目发生的数据访问问题的分析研究过程与系统架构优化,我喜欢说通俗的白话,高手轻拍 1. 发现问题 系统新模块上线后,使用频率较高,故在实际使用和后期的问题重现测试中,产生了一下系 ...

  9. Invalid project description.错误原因分析与解决方案

    今天使用 eclipse 创建 maven 项目的时候遇到了一个问题,经过多次搜索排查,最终找到了对应的解决方案. 发生 Invalid project description 错误的原因可能不止一种 ...

最新文章

  1. LEGO EV3 通信开发者套件
  2. sx1268 中文_STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
  3. 【Day05】Html5 有哪些新特性?如何处理 Html5 新标签的浏览器兼容问题?如何区分 Html 和 Html5?
  4. 功夫小子实践开发-菜单场景之游戏秘籍场景的分析和实现
  5. Vivado中常用的几种仿真浅论
  6. 如何编写makefile文件
  7. IMazing for Mac破解版永久激活方法
  8. 适用于ARM开发板的Armbian Linux22.08发布
  9. VMware 虚拟机 Nat 模式无法上网
  10. landesk 卸载_LANDesk软件分发在项目中的深入探索(续2)—客户端已安装应用程序的远程卸载...
  11. pycharm安装redis
  12. led动态显示 c语言,单片机LED点阵的横向移动(动态显示)
  13. Android APP升级时解析程序包时出现问题
  14. 软件设计模式—命令模式
  15. android paint 圆角 绘制_android 绘制椭圆 圆角矩形 详细解析
  16. 安全研究 # 二进制代码相似性检测综述
  17. Hadoop的脚本语言Pig应用
  18. 互联网公司分布式集群架构图入门解析(简单通俗易懂,超详细)
  19. 我自己做了一个小站,刚学做网站。大家帮忙给看看吧!
  20. java 后台大写到前端变小写

热门文章

  1. 利用Kali进行WiFi钓鱼测试实战
  2. 帮你读懂人民币汇率问题的好文
  3. Html中行内元素有哪些?块级元素有哪些?
  4. hive中行转列、列转行的实现
  5. C++语言如何实现查找水仙花数、四叶玫瑰数、五角星数等
  6. 朴應南 退庵 焚其廬而出之
  7. 【驱动】以太网扫盲(三)PHY的控制器驱动框架分析
  8. android仿探探卡片右滑缩小,仿探探卡片滑动选择
  9. 如何修改apn服务器,手机apn怎么设置服务器
  10. [英语歌曲]Just one last dance