【原创】BLE的整体框架
目录
1. BLE的框架结构
2. BLE的Controller和Host
2.1. 控制器(Controller)
2.2. Host
3. BLE的单芯片方案与多芯片方案
1. BLE的框架结构
2. BLE的Controller和Host
就如同前文的BLE框架图,BLE自下而上分成controller,host和profiles。其中Profiles可以理解为对应于各种不同应用场景的应用层协议的集合。而真正体现在硬件上就是Controller和Host。蓝牙的官方协议文档,也正是按照Host和Controller的功能划分来阐述蓝牙规范(注,蓝牙协议文档中也将HCI单独作为一个部分来介绍)。
2.1. 控制器(Controller)
Controller,顾名思义就是控制器。
控制谁?控制BLE的物理层信号。
通过谁来控制?通过主机(Host)来控制。
Controller包含物理层(PHY,也是BLE的射频部分)、链路层(LL)和主机命令接口(HCI)。
物理层PHY就不多说了,主要集成在Controller中提供符合BLE规范的射频信号。从软件的角度看,链路层(LL)和主机命令接口(HCI)才是Controller中的大部头。
首先介绍链路层。
按照OSI七层模型的定义,链路层(LL)的任务是:负责在两个相邻结点间的线路上,无差错的传送以帧为单位的数据。每一帧包括一定数量的数据和一些必要的控制信息。和物理层相似,数据链路层要负责建立、维持和释放数据链路的连接。在传送数据时,如果接收点检测到所传数据中有差错,就要通知发方重发这一帧。
那么BLE的链路层(LL)的作用是什么?BLE的链路层(LL)的作用和OSI七层模型中的定义相吻合。BLE的链路层(LL)详细定义了链路层的帧结构,并且进行差错检测、数据白化、时间同步、地址过滤等处理。这些功能笔者将会用专门文章来详细介绍。
接下来介绍主机命令接口HCI。
在蓝牙中,控制器(Controller)并不能独立工作,它的必须接收来自上层主机(Host)的数据包和对链路的配置。主机命令接口(HCI)就是一套用于主机(Host)和控制器(Controller)之间,用于配置和数据交换的命令接口协议。
主机(Host)和控制器(Controller)之间用什么物理总线通信呢?目前蓝牙主机命令接口(HCI)支持UART、USB、SDIO几种物理接口。
2.2. Host
Host,就是蓝牙协议主机部分。主机(Host)主要包括:主机命令接口(HCI)、逻辑链路控制和适配协议(L2CAP:Logical Link Control and Adaptation Layer Protocol)、服务发现协议(SDP:Service Discovery Protocol)、属性协议(ATT:Attribute Protocol)、通用属性配置(GATT:Generic Attribute Profile)、通用访问配置(GAP:Generic Access Profile)以及安全管理等。上面提到的这些协议都会在将来的相关文章中详述。今天,我们只是走马观花简要介绍一下:
主机命令接口(HCI):
这个就是为了和控制器(Controller)中的HCI配合使用。
逻辑链路控制和适配协议(L2CAP):
在经过控制器(Controller)中的Link Layer的抽象之后,两个BLE设备之间可存在两条逻辑上的数据通道:一条是无连接的广播通道;另一条是基于连接的数据通道,是一个点对点(Master对Slave)的逻辑通道。
广播通道暂且不说,这个数据通道(简称逻辑通道,Logical Channel)要怎么使用,还有一些问题需要解决,比如:
【1】Logical Channel只有一条,而要利用它传输数据的上层应用却不止一个,怎么复用?
【2】Logical Channel所能传输的有效payload长度最大只有251bytes,如何让上层应用传输更大的数据包?
【3】Logical Channel仅提供了简单的应答和流控机制,如果传输的数据出错怎么办?
以上问题,都是由L2CAP,一个介于应用程序上层协议和Link Layer之间的protocol负责。它提供的功能主要包括:
【1】协议/通道的多路复用,Protocol/channel multiplexing;
【2】上层数据包的分片与重组:Segmentation and reassembly
【3】基于L2CAP Channel的流控机制;
【4】错误控制和重传机制:Error control and retransmissions,;
【5】对数据流式传输的支持(如音频、视频等,不需要重传或者只需要有限重传);
【6】对QoS(Quality of Service)的支持。
服务发现协议(SDP):
在BLE系统中,客户只有通过服务发现协议(SDP)才能获得设备信息、服务信息及服务特征,才能在此基础上建立相互间的连接。通过这个协议,应用程序可以发现哪些服务可用以及服务的特性是什么
属性协议(ATT):
属性协议(ATT)是定义了BLE协议栈上层的数据结构和组织方式。是后面将于讲述的通用属性配置(GATT)和通用访问配置(GAP)的基础,它定义了BLE协议栈上层的数据结构和组织方式。
属性(Attribute)概念是ATT层的核心,以编程的眼光来看,属性是一个数据结构,它包括了数据类型和数据值,就如同C语言结构体的概念。
属性主要由以下四部分组成:属性句柄(Attribute Handler)、属性类型(Attribute Type)、属性值(Attribute Value)、属性权限(Attribute Permissions)。
通用属性配置(GATT):
通用属性配置(GATT)指定了两个BLE设备的应用层Profile数据交互的结构(Structure) 这个结构体定义了一些基本元素,如服务(Service)、特性(Characteristic)等。这些元素存在于属性(Attribute)中
通用属性配置(GATT)中最上层是Profile。 Profile由一个或多个服务(Service)组成;服务(Service)是由多个特征(Characteristic)组成,也可以包含其他服务的引用(Reference) ;特征(Characteristic)由值(Value)、属性(Property)以及描述符(Descriptor)组成。
通用访问配置(GAP)
BLE协议栈中的通用访问配置(GAP)负责处理设备访问模式,包括:被发现、建立连接、终止连接、初始化安全管理和设备配置。GAP层可以扮演四种角色之一:
Broadcaster 广播者----不可以连接,一直发送广播
Observer 观察者----可以扫描广播,但是不能发起建立连接的设备
Peripheral 外设----可以被连接,在单个链路层连接中作为Server
Central 中央设备----可以扫描广播并发起连接,在单个或多个链路层中作为Client
3. BLE的单芯片方案与多芯片方案
根据蓝牙控制器(Controller)和主机(Host)是不是工作在同一块芯片上,我们可以把BLE的实现方案分成单芯片方案和多芯片方案。
通常在一些简单的蓝牙应用中使用各种蓝牙SOC就是单芯片方案。比如常见的TI公司的CC25xx、CC26xx,Nordic公司的NRF51xxx、NRF52xxx等等。此类芯片一般可以直接做为 MCU 用,集成度很高。常用于产品功能比较单一的情况,如蓝牙耳机、智能手环、防丢器等。
多芯片方案就是把控制器(Controller)和主机(Host)分别放在不同的芯片中实现,适用于蓝牙应用程序较复杂的情况下使用,这里可以使用功能强大的MPU甚至是PC作为蓝牙主机(Host),而单独使用蓝牙芯片做控制器(Controller),两者使用主机命令接口(HCI)进行通信。
版权声明
所有原创文章(未进行特殊标识的均属于原创) 的著作权属于本人
所有转载文章(标题注明[转]的所有文章) 的著作权属于原作者。
所有译文文章(标题注明[译]的所有文章) 的原文著作权属于原作者,译文著作权属于本人。
转载注意事项
除注明外,所有文章均采用 Creative Commons BY-NC-ND 4.0(自由转载-保持署名-非商用-禁止演绎)协议发布。
你可以在非商业的前提下免费转载,但同时你必须:
保持文章原文,不作修改。
明确署名,即至少注明 作者:BoatOnMCU 字样以及文章的原始链接,且不得使用 rel="nofollow" 标记。
商业用途请电话联系本人。
微信公众号转载一律不授权,除非联系本人并获得授权。
欢迎访问本人公众号
【原创】BLE的整体框架相关推荐
- 8X8X8光立方整体框架设计技术细节
从一师兄那拿来的,东西是师兄自己做的,觉得特有才一人,只是进了互联网公司,感觉做嵌入式更适合他--- Powered by lihui & Liusheng @2012, Shenyang 太 ...
- 【推荐系统】推荐系统整体框架概览
感谢博文作者 Kevin_Duan 原文链接:https://blog.csdn.net/chunyun0716/article/details/83152037 推荐系统整体架构 先说点题外话,最近 ...
- 通俗易懂SpringMVC整体框架理解
最近又重新温习了一下前台SpringMVC框架,能够从整体上对SpringMVC有一个全局的认识.在这里也总结一下,为那些即将学习SpringMVC的亲们,做一个很好的开端吧! 1. SpringMV ...
- V4L2 driver(一). 整体框架
1.1 从字符设备说起 熟悉v4l2用户空间编程的都知道, v4l2编程主要是调用一系列的ioctl函数去对v4l2设备进行打开, 关闭, 查询, 设置等操作. v4l2设备是一个字符设备, 而且其驱 ...
- 推荐系统整体框架概览
推荐系统整体框架概览 推荐系统整体架构 推荐系统的核心组成部分 离线 核心节点 服务 UI 总结 推荐系统整体架构 先说点题外话,最近在看的书中讲到了怎么进行自学的方法,分了十个层级.第一个便是要了解 ...
- 浅谈opencl之整体框架
结合四大模型,以CPU和GPU平台为例子,opencl整体框架如下: CPU为host端, GPU为device端, host和device端的交互是以context为主.context贯穿到整个op ...
- jQuery源码分析 整体框架部分及部分常用方法
最近尝试看看jQuery的源码. 版本 version = "1.11.1" 相对于看一本jQuery如何使用的书,看jQuery源码对它可以有更深层次的理解.jQuery中大量使 ...
- 第一次总结:整体框架
第一次总结:整体框架 tcp部份: 1.初始化WiFi连接路由器 wifi.begin();bool b = wifi.Initialize(STA, SSID, PASSWORD);连接局域网if( ...
- zeptojs库解读1之整体框架
首先看的是整体框架, // zepto骨骼,这个函数的作用使得Zepto(slector, context)使用很多$.fn里面的方法 var Zepto = (function(){// zepto ...
最新文章
- 阶段式(瀑布式)传统软件研发流程
- 最强原创综述!当强化学习邂逅组合优化
- 一个简单的struts的例子
- Python循环的一些基本练习
- mysql 内存 256m_解决mySQL占用内存超大问题
- Requests API
- 中英文对照 —— 生物学基本概念
- 自制jlink ob stm32f072 版本。带串口
- 十分钟了解Http(1)——HTTP的报文到底是什么?
- 读书笔记-------修炼之道互联网产品从设计到运营
- Excel 宏编程的常用代码
- 大数据导论(二:大数据的架构)
- OSI第三层:网络层功能及作用OSI第三层:网络层功能及作用
- 推荐大家一部好电影:当幸福来敲门
- 2021-2022启航出发
- linux who命令详解,Linux who命令详解
- JS实现五星好评效果
- 使用jqprint打印网页指定区域的内容
- 机器学习反向传播的一些推导公式
- 打开u盘时出现“文件或目录损坏且无法读取“怎么解决