一 基本概念

  蓝牙的连接过程是十分重要的,特别是做蓝牙的技术人员来说,这个是十分重要的。理它的流程,是一件必修课。虽然进入蓝牙行业很久了,以前没怎么系统化的做一些事情,趁此机会,就梳理一下这里面的内容吧。
  在paging流程结束之后,链接管理流程(LMP)一般就启动了,刚开始会完成时钟校准,版本,支持特性,名字和一些连接状态的初始化。paging 设备(设备A)会首先发起一个LMP_host_connection_req PDU.当另外一个设备(设备B)接收到这个消息时,会通知上层接收这个连接信息,设备B这时会相应的回一个接受连接(LMP accedpted PDU)或拒绝连接(LMP_not_accepted PDU)。 于此同时,如果这个从设备(slave)需要一个role switch, 它就会在接收到一个连接请求帧(LMP_host_connection_req PDU)之后,发送一个clock 偏转信息(LMP_slot_offset PDU)和 转换请求帧(LMP_switch_req PDU).如果role switch 成功,旧的slave设备会回复一个接受连接或者拒绝连接的命令。如果失败,对方就会发送一个拒绝role switch 的消息,原因码为(0x14)。
  如果发起paging 的设备接收到一个对方拒绝连接的消息。它就会立即发送(LMP_detach)通过发送一个来断开链接。
如果从设备接受了主设备的连接请求。蓝牙加密过程就有可能会被唤起(因为这个是可选项目,要根据主设备或者从设备的连接需求来定的)。如果没有加密的需求,主设备就会发送连接完成的消息给从设备,等两个设备都发送完连接完成的消息之后,系统底层的连接过程就算是结束了。整个流程如下图所示:

  

二 流程分析

  其实,蓝牙的链接流程比较复杂,和wifi相比,它多了很多可选项,这就导致看起来特别复杂。所以,在学习的时候,一定要有化繁为简的思维,从最简单的入手,下面的图就是完整的蓝牙连接流程图,如下所示。这个流程图向我们揭示了整个连接流程,乍一看,还是非常复杂的。假如你把这个流程分成两个步骤来看,就比较简单了,先看实线的部分,这个就是基本的连接过程,并且是必不可少的三个步骤。就是创建连接,连接请求,建立连接,断开连接四个步骤,每个步骤都是有请求和回复,这样理解就比较简单了。那些可选项,很多适合软件的关系不大的,重点只需要了解一下role switch和data flow。别的在有问题的时候,再翻一下协议栈看看估计就明白了,东西不多的。这样梳理一下,是不是你的蓝牙连接流程就清楚了?
  还有一个比较形象的描述,就像我们的销售美女拜访客户的过程:

第一回合:起动连接:

美女销售: 确认过眼神,是对的人。那就主动一点吧。先抛个媚眼,说声你好。
客户:环顾四周,好像是在给我说话呢。只能做个回答了。答应还是拒绝,就看人家对你的印象了。答应了,你好,请问有什么事情吗?
另外一种悲剧的结果:正在忙,不想理你,就直接回复了。不好意思,我不认识你。一口就回绝了。就没有后面的事情了。

第二个回合:连接请求:

美女销售: 我是XXX,什么公司的,想要根据什么产品的什么东西和你沟通一下啊,能否有时间,聊一下?
客户: 就看客户的心情了。老总答应了,那就会给个肯定的答复,可以接下来谈点事情了。
悲剧的结果:不好意思,我正在忙,改天你再来吧。谈话结束。

第三个回合:握手认识。

美女销售:伸出手,握手,算是认识了,接下来切入正题,开始谈业务了。
客户:握手,来会议室聊吧。

三 总结

  做了多年的协议,才发现协议的东西,很多都源于生活。其实,细想一下,本来就是这样子的。协议的作用就是为了方便人们沟通。它是人设计的,肯定很多东西都是基于人的思维和常用模式来做模型的。知道了这些,把生活中的场景和协议的场景对标起来,估计你很快就知道所谓的协议其实很简单了。虽然倒腾技术比较枯燥,假如你深入了进去,把产品当作你的孩子来看,估计会增添工作中多很多乐趣的。

 

Bluetooth(蓝牙)连接过程分析的更多相关文章

  1. Windows 10下通过蓝牙连接iPhone个人热点进行共享上网

    出处:qiuyi21.cnblogs.com 1.iPhone开启个人热点 在iPhone中打开蓝牙,然后进入“个人热点”并打开开关,如果提示热点发射方式请选择蓝牙那项,然后停留在“个人热点”界面并且 ...

  2. android bluetooth蓝牙移植

    http://blog.csdn.net/zhengmeifu/article/details/7705172 前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下 ...

  3. 基于swift语言iOS8的蓝牙连接(初步)

    看过一些蓝牙App的事例,大体上对蓝牙的连接过程进行了了解.但是开始真正自己写一个小的BLE程序的时候就举步维艰了.那些模棱两可的概念在头脑中瞬间就蒸发了,所以还是决定从最基本的蓝牙连接过程进行.这里 ...

  4. iOS - Bluetooth 蓝牙

    1.蓝牙介绍 具体讲解见 蓝牙 技术信息 蓝牙协议栈 2.iBeacon 具体讲解见 Beacon iBeacon 是苹果公司 2013 年 9 月发布的移动设备用 OS(iOS7)上配备的新功能.其 ...

  5. UBUTUN 通过蓝牙连接Hoary和诺基亚手机

    通过蓝牙连接Hoary和诺基亚手机 这个how to已经用Hoary.诺基亚6630和一个道尔芯片(Dongle)蓝牙(Usb蓝牙)测试过了.通过这个How to,你可以:-通过蓝牙,从你的电脑发送文 ...

  6. 用蓝牙连接debian和诺基亚手机

    本方法已经用debian 4.0.诺基亚9300和一个hl-united牌子的USB蓝牙适配器测试过了,效果很好.             1.安装必要的软件包:   #apt-get install ...

  7. win7蓝牙连接手机蓝牙

    今天有个需求,需要win7 PC连接手机蓝牙,并发送文件到手机端.在此记录下过程. 准备: win7 电脑主机. CSR 蓝牙dongle. 手机 1. 打开蓝牙服务 方法:打开控制面板,找到“管理工 ...

  8. bluetooth 蓝牙协议和标准,配置

    Bluetooth 配置文件表达了一般行为,Bluetooth 设备可以通过这些行为与其它设备进行通信.Bluetooth 技术定义了广泛的配置文件,描述了许多不同类型的使用案例.为了使用 Bluet ...

  9. iOS关于蓝牙连接的简单介绍与使用

    下面是两台iPhone6连接同一台蓝牙设备的结果: **成功连接**** peripheral: <CBPeripheral: 0x1700f4500, identifier = 50084F6 ...

随机推荐

  1. 关于STM32F103+ESP8266+阿里云过程之修改SDK连接至阿里云(二)

    继上篇的阿里云物联云平台设置之后,接下来的工作就是对安信可官方给的sdk进行修改 安信可ESP系列集成环境,SDK,aliyun_mqtt_app,下载地址在上一篇博客,https://www.cnb ...

  2. 【转】解决eclipse连接不到genymotion的问题

    (1)很多朋友在使用genymotion开发安卓应用程序的时候,会遇见完全正确的安装但是在运行的时候仍然找不到,genymotion上的设备,在打开的devices上找不到如下图所示: (2)解决的方 ...

  3. MOCTF-WEB-writeup

    MOCTF-WEB-writeup 好菜,除了简单的几个题,自己会做,难的都是看老大WP完成的,太菜了 啥姿势都不会,就此记录一下,供日后查看及反省.菜鸡的自我修养 0x01 一道水题 题目链接:ht ...

  4. 3、大型项目的接口自动化实践记录----开放API练习

    开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...

  5. java实现发短信功能---腾讯云短信

    目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...

  6. Java——数据结构(链表)

    链表,可扩展长度,泛型. public class Link { Node header = null; //头结点 int length;//当前链表长度 class Node { Node nex ...

  7. 【POJ - 2139】Six Degrees of Cowvin Bacon (Floyd算法求最短路)

    Six Degrees of Cowvin Bacon Descriptions 数学课上,WNJXYK忽然发现人缘也是可以被量化的,我们用一个人到其他所有人的平均距离来量化计算. 在这里定义人与人的 ...

  8. stm8s和stm8l低功耗对比

    在低功耗应用中,一般来说mcu是常态halt模式,然后偶尔被唤醒(外部中断或者内部定时唤醒)进入运行模式.所以对比低功耗性能,一般来说只需要对比run模式和halt下的功耗即可,因为项目选用的是通过内 ...

  9. 洛谷 P2024 [NOI2001]食物链

    题意简述 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 1."1 X Y",表示 X 和 Y 是同类. 2."2 X Y",表示 X 吃 Y . ...

  10. 调试应用不发愁,免安装的 curl 来帮忙

    1 cURL简介 cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行.它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具.cURL还包含了用于程序开 ...