BLE 协议架构总体上分成3块,从下到上分别是:控制器(Controller),主机(Host)和应用端(Apps);3者可以在同一芯片类实现,也可以分不同芯片内实现,控制器(Controller)是处理射频数据解析,数据接收和发送,主机(Host)是控制不同设备之间如何进行数据交换;应用端(Apps)实现具体应用。

1.控制器Controller

Controller实现射频相关的模拟和数字部分,完成最基本的数据发送和接收,Controller对外接口是天线,对内接口是主机控制器接口HCI(Hostcontroller interface);控制器包含物理层PHY(physicallayer),链路层LL(linker layer),直接测试模式DTM(Direct Test mode)以及主机控制器接口HCI。

·物理层PHY

GFSK信号调制,2402MHz~2480MHz,40个channel,每两个channel间隔2MHz(经典蓝牙协议是1MHz),数据传输速率是1Mbps。

·链路层LL

基于物理层PHY之上,实现数据通道分发,状态切换,数据包校验,加密等;链路层LL分2种通道:广播通道(advertising channels)和数据通道(data channels);广播通道有3个,37ch(2402MHz),38ch(2426MHz),39ch(2480MHz),每次广播都会往这3个通道同时发送(并不会在这3个通道之间跳频),为防止某个通道被其它设备阻塞,以至于设备无法配对或广播数据,只所以定3个广播通道是一种权衡,少了可能会被阻塞,多了加大功耗,还有一个有意思的事情是,三个广播通道刚好避开了wifi的1ch,6ch,11ch,所以在BLE广播的时候,不至于被wifi影响(冒出一个很邪恶想法,如果要干扰BLE广播数据,一个最最简单的办法,同时阻塞3个广播通道);当BLE匹配之后,链路层LL由广播通道切换到数据通道,数据通道37个,数据传输的时候会在这37个通道间切换,切换规则在设备间匹配时候约定。为了增加容量,增大抗干扰能力,连接不会长期使用一个固定的Physical Channel,而是在多个Channel(如37个)之间随机但有规律的切换,这就是BLE的跳频(Hopping)技术,主机和从机建立连接之后,会生成一个channel map,这个channel map就是主从商量好的调频通道。

·主机Host/控制器controller接口HCI

HCI作为一种接口,存在于主机Host和控制器controller当中,控制器Host通过HCI发送数据和事件给主机,主机Host通过HCI发送命令和数据给控制器controller。 HCI逻辑上定义一系列的命令,事件;物理上有UART,SDIO,USB,实际可能包含里面的任意1种或几种(常见RF测试时,我们常使用UART发送标准的HCI指令控制Controller,后续文章会详解HCI)。

2.主机HOST

主机host是蓝牙协议栈的核心部分,GAP层负责制定设备工作的角色,SS层负责指定安全连接,Logic Link层功能非常强大,官方作用为协议/通道的多路复用,负责上层应用数据(L2CAPService Data Units,SDUs)的分割(和重组),生成协议数据单元(L2CAP Packet Data Units,PDUs),以满足用户数据传输对延时的要求,并便于后续的重传、流控等机制的实现。

·L2CAP Protocol

数据经过Link Layer的抽象之后,两个BLE设备之间可存在两条逻辑上的数据通道:一条是无连接的广播通道;另一条是基于连接的数据通道,是一个点对点(Master对Slave)的逻辑通道。如之前文章讲到,BT 4.2 最大传输的数据包长度为251字节,那么应用层要传输的数据包长度超过了251个字节,这个时候就靠L2CAP层进行分包处理,送到LL层进行数据发送。Physical Layer负责提供一系列的PhysicalChannel;基于这些Physical Channel,LinkLayer可在两个设备之间建立用于点对点通信的Logical Channel;而L2CAP则将这个Logical Channel换分为一个个的L2CAPChannel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP欢快的跑起来了。

·Attribute Protocol

Attribute Protocol定义了一套数据传输机制,采用client-server的形式,为数据传输提供一个通道。提供信息(以后都称作Attribute)的一方称作ATTserver(一般是那些传感器节点),访问信息的一方称作ATT client。一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。ATT层相当于数据传输通道,所有的数据都会通过该通道上传或者下发。

·Security Manager(SM)

Security Manager负责BLE通信中有关安全的内容(毫无疑问,在物联网时代,安全变得更重要,谁也不想卧室的灯在深夜的时候会无缘无故的亮吧),包括配对(pairing,)、认证(authentication)和加密(encryption)等过程。

·Generic AttributeProfile

Attribute Protocol之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪些信息,ATT并不关心,这是GATT(Generic Attribute Profile)的主场。GATT相对ATT只多了一个‘G‘,但含义却大不同,因为GATT是一个profile,下篇文章详细介绍GATT和profile。

·Generic AccessProfile 通用访问

定义GAP层的蓝牙设备角色(role)

1. Broadcaster Role,设备正在发送advertisingevents;

2. Observer Role,设备正在接收advertising events;

3. Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);

4. Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

GAP层定义了用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),实现单向的,无连接的通信方式,配对,连接操作等;同时GAP层也定义了User Interface相关的蓝牙参数,比如蓝牙地址,名称,类型等。

3.应用层

应用层可以分为两部分,以从机为例,我们可以通过GATT层定义自己的Profile,供主端设备读取放在从机服务器上的数据;另外我们需要做自己的应用层程序,这个和普通MCU并无差别。需要注意的是,市面上流行的芯片的软件框架都是基于RTOS展开,应用层单独是一个TASK执行,协议栈是另外的TASK在执行,协议栈是通过回调函数和应用层进行交互,协议栈通过消息传递机制让应用层TASK知道有蓝牙相关的操作,应用层通过相应的回调函数发现是GAP层的状态改变还是GATT层有数据进行传递,然后执行我们设计的功能。

C语言蓝牙协议栈讲解,通俗易懂讲解蓝牙协议栈软件框架相关推荐

  1. 蓝牙聊天App设计3:Android Studio制作蓝牙聊天通讯软件(完结,蓝牙连接聊天,结合生活情景进行蓝牙通信的通俗讲解,以及代码功能实现,内容详细,讲解通俗易懂)

    前言:蓝牙聊天App设计全部有三篇文章(一.UI界面设计,二.蓝牙搜索配对连接实现,三.蓝牙连接聊天),这篇文章是:三.蓝牙连接聊天. 课程1:Android Studio小白安装教程,以及第一个An ...

  2. java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈

    详解BLE连接建立过程 https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式-兼BLE Link layer协议解析 https://www. ...

  3. Android蓝牙BLE的详细讲解

    我今天分享的主题是 Android 上低功耗蓝牙的实践.这个主题比较小众.我在过去的一年多的时间里,主要是在做低功耗蓝牙相关的开发.接触过程中发现,BLE 的开发和通常的 Android APP 的开 ...

  4. 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

    目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...

  5. php rsa加密实例,关于PHP语言的RSA加密实例讲解

    本文主要向大家介绍了关于PHP语言的RSA加密实例讲解,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 这几天做了一些接口的对接需要用到RSA加密,百度一番发现原来有个openssl_p ...

  6. C语言答案解析,C语言题库带详细讲解答案解析.doc

    C语言题库带详细讲解答案解析.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  7. c语言编程等腰三角形,用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形?...

    导航:网站首页 > 用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形? 用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形? ...

  8. C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解 "<<".">>"为移位运算符. "<<"为左移位运算符,即数据字节中的每个 ...

  9. C语言快速幂(入门讲解)

    新手在平时刷题或者入门竞赛的时候,经常遇到一些需要我们求一个数的n次方的情况,数学表示为X^n. 一般在这种时候,我们大多会采用两种思路: 一.循环求解. #include<stdio.h> ...

最新文章

  1. 2011年春季 软件项目管理 实验安排
  2. [PHP] 持续交付Jenkins安装
  3. for循环与while循环效率对比·5年以下编程经验必看C#】
  4. android actionbar 背景,Android应用开发之定制页面背景及Actionbar overflow menu的背景色...
  5. 熟悉HBase基本操作
  6. 清华大学信息 计算机科学与技术,清华大学信息科学与技术国家实验室
  7. 隐秘攻击:恶意病毒可使智能手机加速老化
  8. leetcode:骑士在棋盘上的概率
  9. 平衡小车simulink仿真_到底该用哪款神器来仿真我的机器人?
  10. 爱心的数学函数方程_笛卡尔的爱心函数
  11. 广义线性模型和广义加法模型_广义线性模型代码
  12. Django中.py文件详解
  13. 在线传输文件的方法有哪些?镭速云帮您领略最快文件传输的攻略!
  14. 超级电视与海信电视争第一,这是一场胜负已定的战争
  15. android:gravity=quot;centerquot;,android:layout_gravity=bottom不起作用问题
  16. 【Python 实战基础】 如何绘制中国地图展示省份GDP数据
  17. 这样整理关键词,竞价推广更高效
  18. 企业内网防火墙搭建实验
  19. 路平石模具铺设路缘石公路项目质量提升的过程
  20. 用python的xlsxwriter库写EXCEL大文件时,内存占用过高

热门文章

  1. Clutter为设备和开发增加了新酷元素
  2. 【Java学习整理】2021最新版 Eclipse下载+安装+页面介绍+常见问题解答+查看源码+常用快捷键+Debug调试(详细)
  3. 压缩感知——突破香农采样定理
  4. pcap如何转换为pcd_极光扫描操作系统漏洞.doc
  5. 昂达主板(ONDA)B460SD4 装机无说明书装机说明
  6. 排序算法之 二分法排序
  7. 《和声学教程》学习笔记(五):II级和弦和VI级和弦
  8. 笔记3:关于VBS整人代码的浅谈
  9. 【C语言】实现求两个数的最大公约数【四种算法】
  10. 已知道三个点求平面方程(这些玩意都忘了好久了~~)