BLE——协议层次结构
未完待续……
BLE协议 |
Bluetooth Application |
Applications |
|
GATT-Based Profiles/Services |
|||
Bluetooth Core (Stack) |
BLE Host |
ATT、GATT、SM |
|
GAP |
|||
L2CAP |
|||
HCI(对蓝牙协议无影响) |
|||
BLE Controller |
Link Layer |
||
Physical Layer |
1 Bluetooth Core(Stack)
蓝牙核心协议,关注蓝牙核心技术的描述和规范,只提供基础的机制。
蓝牙核心协议由Controller和Host两部分组成,在一个系统中,Host只有一个,但Controller可以有多个,如:单独的LE Controller;单独的BR/EDR Controller;单独的LE+BR/EDR Controller;在单独的BR/EDR Controller或LE+BR/EDR Controller基础上,增加一个或多个额外的AMP Controller。
1.1 Controller
Controller实现射频相关的模拟和数字部分,完成最基本的数据发送和接收,Controller对外接口是天线,对内接口是主机控制器接口HCI(Hostcontroller interface);控制器包含物理层PHY(physicallayer),链路层LL(linker layer),直接测试模式DTM(Direct Test mode)以及主机控制器接口HCI。
1.1.1 Physical Layer
频率选择(2402-2480MHz) + 信道选择(40) + 信道间隔(2MHz) + 调制方式(GFSK) + 数据传输速率(1Mbps)+ 接收灵敏度 + 发射功率 + 杂散辐射 + 射频容差
1、信道选择
物理信道(Physical Channel)为: F=2402+k*2MHz ,k=0,…,39,共40个信道。
Physical Channel = RF Channel
1.1.2. Link Layer
信道分类(3+37) + 广播信道定义(37、38、39) + 数据通道分发(跳频) + 状态角色定义和切换 + 数据包校验重传
LL – Link Layer – Logic Link
1、广播信道定义
37ch —— 2402MHz
38ch —— 2426MHz
39ch —— 2480MHz
之所以选定3个广播信道是一种权衡,少了可能会被阻塞,多了会增加功耗。3个广播信道刚好避开了WiFi的1ch,6ch,11ch,所以BLE广播的时候,不会被WiFi影响。(PS:可以人为阻塞这三个通道)
2、数据信道切换
BLE匹配之后,LL由广播信道切换到数据信道,具体使用哪个数据信道在匹配时约定,且连接不会长期使用一个固定通道,会通过跳频技术随机有规律切换。
3、定义状态和角色
图 2 Link Layer状态机
Standby状态是初始状态,即不发送数据,也不接收数据。根据上层实体的命令(如位于host软件中GAP),可由其它任何一种状态进入,也可以切换到除Connection状态外的任意一种状态。
Advertising状态是可以通过广播通道发送数据的状态,由Standby状态进入。它广播的数据可以由处于Scanning或者Initiating状态的实体接收。上层实体可通过命令将Advertising状态切换回Standby状态。另外,连接成功后,也可切换为Connection状态。
Scanning状态是可以通过广播通道接收数据的状态,由Standby状态进入。根据Advertiser所广播的数据的类型,有些Scanner还可以主动向Advertiser请求一些额外数据。上层实体可通过命令将Scanning状态切换回Standby状态。
Initiating状态和Scanning状态类似,不过是一种特殊的接收状态,由Standby状态进入,只能接收Advertiser广播的connectable的数据,并在接收到数据后,发送连接请求,以便和Advertiser建立连接。当连接成功后,Initiater和对应的Advertiser都会切换到Connection状态。
Connection状态是和某个实体建立了单独通道的状态,在通道建立之后,由Initiating或者Advertising自动切换而来。通道断开后,会重新回到Standby状态。
通道建立后(通常说“已连接”),处于Connection状态的双方,分别有两种角色Master和Slave:
Initiater方称作Master
Advertiser方称作Slave
4、Air Interface Protocol
解决两个问题:不同实体间在对应状态下的数据交换,根据上层实体的指令以及实际情况负责状态之间的切换。
定义Physical Channel上收发的数据包格式:
Preamble(1 octet) Access Address(4 octets) PDU(2 to 257 octets) CRC(3 octets)
定义不同类型的PDU及其格式:
Advertising channel中Advertising有关的PDU
Advertising channel中Scanning有关的PDU
Advertising channel中Initialing有关的PDU
Data channel中LL data有关的PDU
Data channel中LL control有关的PDU
针对广播通道以白名单(White List)的形式定义Link Layer的数据过滤机制
执行广播通道上实际的packet收发操作
定义连接建立的方式及过之后的应答、流控等机制
5、Link Layer Control
抽象出来一个链路控制协议(Link Layer Control),用于管理、控制两个Link Layer实体之间所建立的这个Connection,主要功能包括:
更新Connection相关的参数,如transmitWindowSize、transmitWindowOffset、connInterval等等(具体意义这里不再详述);
更新该连接所使用的跳频图谱(使用哪些Physical Channels);
执行链路加密(Encryption)有关的过程。
1.2. HCI
- HCI作用图解
图 3 HCI作用图解
定义Host和Controller(通常是两颗IC)之间的通信协议,对理解蓝牙协议来说,是无关紧要的。向上为主机提供软件应用程序接口(API)。
- HCI内容
HCI逻辑上定义一系列的命令,事件;
物理上有UART,SDIO,USB,SPI接口;
实际可能包含里面的任意1种或几种。常见RF测试时,我们常使用UART发送标准的HCI指令控制Controller。
1.3. Host
主机host是蓝牙协议栈的核心部分,GAP层负责制定设备工作的角色,SS层负责指定安全连接,Logic Link层功能非常强大,官方作用为协议/通道的多路复用,负责上层应用数据(L2CAPService Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现。
1.3.1 L2CAP
提供数据封装服务,将LL提供的Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。
逻辑连接控制和适配协议,Logic Link Control and Adaptation Protocol
Protocol/channel multiplexing,协议/通道的多路复用;
Segmentation and reassembly,上层应用数据(L2CAP Service Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现;
Flow control per L2CAP channel,基于L2CAP Channel的流控机制;
Error control and retransmissions,错误控制和重传机制;
Support for Streaming,支持流式传输(如音频、视频等,不需要重传或者只需要有限重传);
Fragmentation and Recombination,协议数据单元(PDUs)的分片(和重组),生成符合Link Layer传输要求的数据片(长度不超过251,具体可参考5.4.1中有关的介绍);
Quality of Service,QoS的支持。
Protocol/channel multiplexing
channel multiplexing(基于通道的多路复用)—— CID,Channel ID
Protocol multiplexing(基于协议的多路复用)——只允许在BR/EDR controller中使用
1.3.2 ATT(Attribute Protocol)
负责数据检索
对上文的总结:Physical Layer负责提供一系列的Physical Channel;基于这些Physical Channel,Link Layer可在两个设备之间建立用于点对点通信的Logical Channel;而L2CAP则将这个Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP欢快的run起来了。
- 特点
基于L2CAP,使用固定的Channel ID(0x004)
采用client-server的形式。提供信息(以后都称作Attribute)的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。
一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。
Attribute可以定义一些权限(Permissions),以便server控制client的访问行为
根据所定义的Attribute PDU的不同,client可以对server有多种访问方式
1.3.3 GATT(Generic Attribute Profile)
ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。
GATT是一个profile(更准确的说是profile framework)
在蓝牙协议中,profile一直是一个比较抽象的概念,我们可以将其理解为“应用场景、功能、使用方式”都被规定好的Application。传统的BR/EDR如此,BLE更甚。上面我们讲过,BLE很大一部分的应用场景是信息(Attribute)的共享,因此,BLE协议栈基于Attribute Protocol,定义了一个称作GATT(Generic Attribute)的profile framework(它本身也是一个profile),用于提供通用的、信息的存储和共享等功能。
图 4 GATT Profile层次结构
1.3.4 SM(Security Manager)
1.3.5 GAP(Generic Access Profile)
通用访问配置文件,实现功能如下:
- 定义GAP层的蓝牙设备角色
Broadcaster Role,设备正在发送advertising events;
Observer Role,设备正在接收advertising events;
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。
- 定义GAP层的、用于实现各种通信的操作模式和过程
Broadcast mode and observation procedure,实现单向的、无连接的通信方式;
Discovery modes and procedures,实现蓝牙设备的发现操作;
Connection modes and procedures,实现蓝牙设备的连接操作;
Bonding modes and procedures,实现蓝牙设备的配对操作。
- 定义User Interface有关的蓝牙参数
蓝牙地址(Bluetooth Device Address);
蓝牙名称(Bluetooth Device Name);
蓝牙的pincode(Bluetooth Passkey);
蓝牙的class(Class of Device,和发射功率有关);
等等。
- Security有关的定义
2. Application
蓝牙应用层协议,在蓝牙核心协议的基础上,根据具体的应用需求,定义出各种各样的策略,如FTP、文件传输、局域网等。
Profile是Application的代指,翻译为服务,具体有:SPP、HSP、HFP、FTP、IPv6/6LoWPAN等。
BLE——协议层次结构的更多相关文章
- CC2540开发板学习笔记(九)—— BLE协议简介
一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...
- 第13节-BLE协议L2CAP层
学习资料:官方手册 Vol 3: Core System Package [Host volume] Part A: Logical Link Control and Adaptation Proto ...
- 第12节-BLE协议HCI层的数据格式
学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...
- 第11节-BLE协议HCI层的硬件接口
本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf < ...
- 第10节-BLE协议链路层(LL)
本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和 ...
- 第04节-BLE协议抓包演示
在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可 ...
- 第03节-BLE协议各层数据格式概述
本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...
- 蓝牙 BLE 协议学习: 001-BLE协议栈整体架构
背景 在深入BLE协议帧之前,我们先看一下BLE协议栈整体架构. 转载自:<深入浅出低功耗蓝牙(BLE)协议栈> 架构 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片, ...
- [蓝牙] 2、蓝牙BLE协议及架构浅析&&基于广播超时待机说广播事件
第一章 BLE基本概念了解 一.蓝牙4.0和BLE区别 蓝牙4.0是一种应用非常广泛.基于2.4G射频的低功耗无线通讯技术.蓝牙低功耗(Bluetooth Low Energy ),人们又常称之为 ...
随机推荐
- 【ML基础】皮尔森相关系数(Pearson correlation coefficient)
前言 参考 1. 皮尔森相关系数(Pearson correlation coefficient): 完
- Windows Server 2008 R2怎样设置自动登陆(登录)
方法一: 打开电脑“菜单”,右键点击“运行”,在对话框输入“control userpasswords2”,点击“确定”. 弹出的窗口取消勾选“要使用本机用户必须输入用户名和密码”,取消后点击“确定” ...
- 【Docker学习之六】Docker容器互联
环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.基于Volume的互联就是-v参数,将本机文件或目录挂载到容器目录,实现文件目录共享 二.基于Link的互联 ...
- Spring-boot2X基于sharding-jdbc3.x分表分库
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的 ...
- Python键盘按键模拟
有时候我们需要使用python执行一些脚本,可能需要让程序自动按键或自动点击鼠标,下面的代码实现了对键盘的模拟按键, 需要安装pypiwin32,当然也可以直接用ctypes来实现. 输入:pip i ...
- Versioning information could not be retrieved from the NuGet package repository. Please try again later.
Versioning information could not be retrieved from the NuGet package repository. Please try again la ...
- Python 入门(1):hello world 到流程控制
1.hello world 在D:\python\目录下新建文件hello.txt,编写代码如下 print("hello world!") 修改后缀名为.py,执行hello.p ...
- memcached源码分析三-libevent与命令解析
转载请注明出处https://www.cnblogs.com/yang-zd/p/11352833.html,谢谢合作! 前面已经分析了memcached中的slabs内存管理及缓存对象如何利用ite ...
- scratch少儿编程第一季——09、声音模块:吹拉弹唱我也会
各位小伙伴大家好: 上期我们学习了外观模块的指令,学会了制作特效. 本期我们来学习如何给游戏配音. 声音模块的指令不是很多,我们一起来看看吧. 首先第一个就是播放声音,里面默认插入了喵叫声. 我们点击 ...
- busybox测试dns问题
获取svc [root@master01 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL- ...