本篇博客根据韦大仙视频,整理所得。

先上框图:

ATT层

从ATT开始看,在上篇博客讲的医院结构里面有个检验室,检验室可以得到各项结果,但是它并不知道这些结果代表什么含义。类比的在BLE
协议栈里面,ATT定义了各种属性、属性的操作方法,但是这些属性有什么作用,能给用户提供什么服务,它并不知道。举例如下:
假设有两个蓝牙设备,一个是手机,一个是手环,此手环戴在手上可以监测心跳。
在ATT这一层,手环提供数据,它是一个服务器。另一边的手机从手环获取数据,它是一个client.

在手环服务器这边,它定义了属性、属性的格式以及属性的方法,还有一些机制通知、指示、确认。
在手机客户端这边,它肯定定义了方法,可以去查询、获得、读、写属性。还有一些机制:请求、响应、命令
从这可以看出,ATT层利用这6中机制来查询、读写那些属性。

GATT层

前面已经说过,在ATT层中定义了很多属性,但是它不知道这些属性组合起来是什么含义。这需要更上一层来确定那些属性能提供什么服务。
GATT这一层的关键词是服务,来看一个例子。
https://blog.csdn.net/caodaxia/article/details/78567996,描述了一个真实的蓝牙设备,里面有24个属性,这24个属性如何组合起来提供服务呢?

由GATT这一层来定义的。在这一层,它定义了服务的格式(即这个服务里面应该包含哪些属性,这些属性应该如何排列)。有了服务之后,客户端手机这边如何使用这些服务呢?

在客户端手机这边需要定义如何发现服务,如何发现服务里面的特性,读写服务里面的特性。比如说心跳服务,如何去获得那个心跳值。
在服务器这边还可以定义如何主动去通知客户端我这边的值发生了变化。简单的说,GATT的作用就是定义服务,实现服务,提供访问服务的方法。

在上篇博客中,那位张三医生需要通过检验室获得眼科中心的检验结果。他综合判断这些结果,才能提供服务。

同样GATT层也是这样的,GATT想去获得某个服务,它需要ATT来读写那些属性,才能实现那些服务。GATT里面的那些方法,比如说发现服务、发现特性、读写特性,这些动作都要使用ATT 的request、response、command等机制来操作那些属性。GATT严重依赖于ATT,它只不过是在ATT的基础上综合了那些属性,提供了一个服务的概念。

L2CAP层

再来看一下L2CAP层,类比于医院的结构,它是收发室。收发室里面的人是医院的内部员工,它可以在医院内部来传动包裹。
客户端手机想去读取某个属性,它需要利用ATT这一层来发起请求,请求的数据需要经过L2CAP层以及下面的几层到达服务端的L2CAP层。
服务端L2CAP这一层,需要把请求的数据发给ATT层。
数据的来源有那么多,L2CAP层如何标识数据的来源呢?
在L2CAP层引入了一个channel的概念。它使用channel这个概念来标识数据的来源或目的地。

HCI层

之前提到对于蓝牙芯片,一般来说它和arm板通过串口或usb口等等接口相连。L2CAP层需要把数据通过串口或usb口传给蓝牙芯片。
在这个地方又引入了一层HCI层,HCI层用来描述从L2CAP传过来的数据如何通过串口或usb口传给蓝牙芯片。

在这里还要引入一个概念,从L2CAP传过来的数据包可能很大,此时就需要分段,把经过分段的数据传给LL层。
同样的道理,这些分段的数据由LL层传到L2CAP层时,还需要将数据合并。分段与合并有可能是在L2CAP中做的,也有可能是在HCI中做的,这并不重要。

LL层

现在来看一下LL层,在L2CAP那里由channel ID来表示这个数据在内部里面分发给谁。此时假设数据到达了芯片这里,问题来了,这个芯片要把数据发给哪个设备。

在我们的示意图中只有两个蓝牙设备,在真正的系统里面可能有许多蓝牙设备,那么LL层要把数据发给谁?
在LL层这里重要的概念就是访问地址。这些数据是作为一个广播包发送给所有的设备呢?还是作为一个数据包只发送给某一个设备。此时就需要在数据包前面加上一个访问地址。就相当于快递公司帖上那个快递单号一样,以表明数据要发给哪一栋大楼。此处的大楼就相当于设备,在设备里面再次将数据分发传达。
PHY层

LL层将数据加上了访问地址,这些数据要通过无线发送器(PHY)发送出去,另一端的无线接收器(PHY)接收数据,解码之后再将数据上传。
PHY层就相当于一个司机,司机的开车技术要好,这条路不通要换另外一条路。对于蓝牙设备来说,在物理层这里它使用了跳频技术。

举个例子:深圳有两个比较出名的电台,105.7  106.2

在听广播时,如果频率为105.7的电台被干扰了,就要换到106.2频率的电台。这就是所谓的跳频。

GAP层:
对比医院的结构,病人到达医院之后会进入大堂,在大堂里面按流程确定科室、挂号。同样在GAP层这里,定义了一些流程,必须根据流程来发现设备、连接设备才可以使用后续的服务。如何去发现设备、连接设备呢?一般来说,会直接使用LL层提供的功能去发出广播包来发现设备、连接设备。

总结如下:

Host(纯软件的概念)                                            (跟医院的功能简单类比)

GAP:   Generic Access Profile, 通用访问规范      (大堂: 按指定流程确定科室、挂号     <==> 发现设备、连接设备)

GATT:  Generic Attribute Profile, 通用属性规范  (医务室: 为病人提供服务    <==> 也是提供服务, 有哪些服务, 服务由哪些属性组成)

ATT:   Attribute Protocol, 属性协议                  (检验室: 提供检查结果, 给医生综合后由医生判断 <==> 提供属性及访问方法, GATT把这些属性组合起来构成服务)

L2CAP: Logical Link Control And Adaptation Protocol,    (收发室: 收发包裹(包裹来自各科室)   <==> 标记/识别数据来自哪个channel, 转发)

-----------------------------HCI(Host Controller Interface, 主机/控制器接口)-----------------------------

Controller(一般来说是一个芯片):

LL:    Link Layer, 链路层                    (快递驻点: 贴快递单        <==> 确定是广播包还是数据包(发给谁),加上Access Address)

PHY:   Physical Layer, 物理层            (快递员: 运输, 此路不通就另换一条     <==> 无线收发器,传输, 跳频)

第02节-BLE协议各层的形象化理解的更多相关文章

  1. 第13节-BLE协议L2CAP层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part A: Logical Link Control and Adaptation Proto ...

  2. 第10节-BLE协议链路层(LL)

    本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和 ...

  3. 第12节-BLE协议HCI层的数据格式

    学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...

  4. 第11节-BLE协议HCI层的硬件接口

    本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf < ...

  5. 第03节-BLE协议各层数据格式概述

    本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...

  6. 第15节_BLE协议GATT层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part G: Generic Attribute Profile (GATT) 这篇文章格式比较 ...

  7. 第16节_BLE协议GAP层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part C: Generic Access Profile 下面这个图是BLE协议各层跟医院的各 ...

  8. 第14节_BLE协议ATT层

    下面这个图是BLE协议各层跟医院的各个科室的类比图: 跟医院类比,ATT层就是化验室,通过它可以得到各种检查结果──属性.这些检查结果之间有什么联系,它们组合起来体现了什么,化验室是不知道的,这些得由 ...

  9. 第04节-BLE协议抓包演示

    在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可 ...

随机推荐

  1. [LeetCode] 281. Zigzag Iterator 之字形迭代器

    Given two 1d vectors, implement an iterator to return their elements alternately. Example: Input: v1 ...

  2. [LeetCode] 147. Insertion Sort List 链表插入排序

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  3. KMP 串的模式匹配 (25分)

    给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出.如果找不到,则输出“Not ...

  4. 3,[VS] 编程时的有必要掌握的小技巧_______________________________请从下面第 1 篇看起

    本文导览: 善用“并排显示窗口”功能 做作业/测试时使用 多项目 多个源文件 多个子函数 使用Visual Studio team代码同步工具,及时把项目文件保存到云端 关闭括号分号自动联想 技巧是提 ...

  5. Intellij IDEA通过Plugins导入vue.js

    最近再写vue.js的程序,刚开始使用Intellij IDEA没有导入插件,结果所有vue文件都是文本方式显示,无法使用开发工具的辅助功能,导入vue.js插件后即可. 路径是Setting-> ...

  6. oracle--LGWR

    一,LGWR功能 日志写进程(日志写比数据写更重要),因为内存中的数据一断电就消 失,要做数据的回滚.前滚只能依靠日志文件.log buffer 只是缓冲日志写 二,触发机制 ) 提交命令:commi ...

  7. 《Interest Rate Risk Modeling》阅读笔记——第四章:M-absolute 和 M-square 风险度量

    目录 第四章:M-absolute 和 M-square 风险度量 思维导图 两个重要不等式的推导 关于 \(M^A\) 的不等式 关于 \(M^2\) 的不等式 凸性效应(CE)和风险效应(RE)的 ...

  8. Redux + React-router 的入门和配置教程

    (转载)原文链接: https://juejin.im/post/5dcaaa276fb9a04a965e2c9b#heading-18 前言

  9. pytorch tutorial 1

    这里用torch 做一个最简单的测试 目标就是我们用torch 建立一个一层的网络,然后拟合一组可以回归的数据 import torch from torch.autograd import Vari ...

  10. 公众号对接百度翻译API

    有时候在公众号中需要对接一些翻译的功能或者其他.最常见的翻译API就是中英互译,程序员用的最多的也就是中译英. 1.到百度翻译官网申请账号 http://api.fanyi.baidu.com/api ...