目录

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的整体框架相关推荐

  1. 8X8X8光立方整体框架设计技术细节

    从一师兄那拿来的,东西是师兄自己做的,觉得特有才一人,只是进了互联网公司,感觉做嵌入式更适合他--- Powered by lihui & Liusheng @2012, Shenyang 太 ...

  2. 【推荐系统】推荐系统整体框架概览

    感谢博文作者 Kevin_Duan 原文链接:https://blog.csdn.net/chunyun0716/article/details/83152037 推荐系统整体架构 先说点题外话,最近 ...

  3. 通俗易懂SpringMVC整体框架理解

    最近又重新温习了一下前台SpringMVC框架,能够从整体上对SpringMVC有一个全局的认识.在这里也总结一下,为那些即将学习SpringMVC的亲们,做一个很好的开端吧! 1. SpringMV ...

  4. V4L2 driver(一). 整体框架

    1.1 从字符设备说起 熟悉v4l2用户空间编程的都知道, v4l2编程主要是调用一系列的ioctl函数去对v4l2设备进行打开, 关闭, 查询, 设置等操作. v4l2设备是一个字符设备, 而且其驱 ...

  5. 推荐系统整体框架概览

    推荐系统整体框架概览 推荐系统整体架构 推荐系统的核心组成部分 离线 核心节点 服务 UI 总结 推荐系统整体架构 先说点题外话,最近在看的书中讲到了怎么进行自学的方法,分了十个层级.第一个便是要了解 ...

  6. 浅谈opencl之整体框架

    结合四大模型,以CPU和GPU平台为例子,opencl整体框架如下: CPU为host端, GPU为device端, host和device端的交互是以context为主.context贯穿到整个op ...

  7. jQuery源码分析 整体框架部分及部分常用方法

    最近尝试看看jQuery的源码. 版本 version = "1.11.1" 相对于看一本jQuery如何使用的书,看jQuery源码对它可以有更深层次的理解.jQuery中大量使 ...

  8. 第一次总结:整体框架

    第一次总结:整体框架 tcp部份: 1.初始化WiFi连接路由器 wifi.begin();bool b = wifi.Initialize(STA, SSID, PASSWORD);连接局域网if( ...

  9. zeptojs库解读1之整体框架

    首先看的是整体框架, // zepto骨骼,这个函数的作用使得Zepto(slector, context)使用很多$.fn里面的方法 var Zepto = (function(){// zepto ...

最新文章

  1. 阶段式(瀑布式)传统软件研发流程
  2. 最强原创综述!当强化学习邂逅组合优化
  3. 一个简单的struts的例子
  4. Python循环的一些基本练习
  5. mysql 内存 256m_解决mySQL占用内存超大问题
  6. Requests API
  7. 中英文对照 —— 生物学基本概念
  8. 自制jlink ob stm32f072 版本。带串口
  9. 十分钟了解Http(1)——HTTP的报文到底是什么?
  10. 读书笔记-------修炼之道互联网产品从设计到运营
  11. Excel 宏编程的常用代码
  12. 大数据导论(二:大数据的架构)
  13. OSI第三层:网络层功能及作用OSI第三层:网络层功能及作用
  14. 推荐大家一部好电影:当幸福来敲门
  15. 2021-2022启航出发
  16. linux who命令详解,Linux who命令详解
  17. JS实现五星好评效果
  18. 使用jqprint打印网页指定区域的内容
  19. 机器学习反向传播的一些推导公式
  20. 打开u盘时出现“文件或目录损坏且无法读取“怎么解决

热门文章

  1. 振兴会杜振国分析目前传统基建板块的情况
  2. segfault at xxx rip xxx rsp xxx error 4(合并整理)
  3. 《ASP.NET Core 6框架揭秘》实例演示[10]:Options基本编程模式
  4. 水土不服的轻食,或注定是“一口风”
  5. fastadmin添加图片压缩处理
  6. 亚马逊笔试题目_亚马逊笔试题目
  7. MySql中的语句查询
  8. 三只松鼠利润在下降?店宝宝:零食电商怎么做才能突破现有瓶颈?
  9. 通关GO语言11 并发模式:Go 语言中即学即用的高效并发模式
  10. 闷声发大财,关于支付行业的秘密