BLE协议框架理解

BLE协议框架理解


前言

好久没来CSDN上总结了,以后会记得常来。。

前前后后也搞了不少蓝牙和WiFi芯片了(DA14580、PSOC4、CC3235、ESP32…)
用WiFi的项目还好,就是网络那一套比较容易理解,而且项目都不是太复杂,就是本地局域网传数据,用个socket就搞定了。
但是蓝牙的项目,虽然照着官方例程也能勉强搞一搞项目,但是有些时候一旦搞涉及到深一点的蓝牙协议栈,就有点懵b。主要还是对BLE这一块的理论知识还不够。今天就来补充补充BLE的知识



BLE协议框架
在这里插入图片描述




BLE的协议可分为Bluetooth Application和Bluetooth Core两大部分, 而Bluetooth Core又包含BLE Controller和BLE Host两部分。较重要的两个协议为GAP(通用访问协议)和GATT(通用属性协议),分别负责连接前数据广播和连接后的数据传输。

一、Physical layer

物理层

通信介质层,物理通道。频率范围是2.400-2.4835 GHz,2MHz为一个频道,总共有40个频道。这是实际的物理通道,physical Channel。



二、Link layer

链路层

在Physical layer的基础上收发数据,不可避免的控制RF收发参数以及实现physical Channel共享、提供校验和重传的机制

1.广播通信

40个通道中选用3个通道作为广播的通道。

2.连接通信

①状态:standby(准备)、advertising(监听/广播)、scanning(扫描)、initialing(发起连接)、connection(已连接)

在这里插入图片描述
连接后发送连接的Initialing作为master、接收连接请求Advertising作为slave。

②连接后通信时,不会一直在一个通道,会使用跳频技术切换通道来增加容量,增大抗干扰能力。

3.Air Interface Protocol

空中接口协议

①定义在Physical Channel上收发的数据包的格式
②定义不同类型的PDU及其格式
③以白名单(White List)的形式定义Link Layer的数据过滤机制



三、Host Controller interface(HCI)

主机控制接口层,通信层,向host和controller提供一个标准化的接口。该层可以由软件API实现或者使用硬件接口 uart、spi、usb来控制。



四、Logical link control&Adaption protocol(L2CAP)

逻辑链路控制及自适应协议层,相当于快递,将数据打包,为上层提供数据封装服务,可以让客户点对点的通信。

Link layer抽象出了广播通道和基于连接的通道,但依然存在一些问题:①只有一条物理通道,但却不止一个上层应用。②传输数据大于物理通道所能传输的有效payload长度:251bytes.③传输数据出错的问题。

L2CAP提供:协议/通道的多路复用,重传、流传机制、流式传输功能来解决。



五、Attribute Protocol(ATT)

属性协议层

Physical Layer负责提供一系列的Physical Channel。

Link Layer可在两个设备之间建立用于点对点通信的Logical Channel。

而L2CAP则将这个Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP跑起来了。

基于信息采集的需求,ATT将信息以“Attribute(属性)抽象出来”并且提供一些方法,供远端设备修改、读取

思路:
①基于L2CAP,使用固定的Channel ID:0x004

②采用client-server的形式。提供信息(以后都称作Attribute)的一方称作ATT server,访问信息的一方称作ATT client

③一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。
Attribute Type用于标示Attribute的类型,类似于我们常说的“温度”、“湿度”等人类可识别的术语,不过与人类术语不同的是,
Attribute Type使用UUID(Universally Unique IDentifier,16-bit、32-bit或者128-bit的数值)区分。
Attribute Handle是一个16-bit的数值,用作唯一识别Attribute server上的所有Attribute。Attribute Handle的存在有如下意义:
a)一个server上可能存在多个相同type的Attribute,显然,client有区分这些Attribute的需要。
b)同一类型的多个Attribute,可以组成一个Group,client可以通过这个Group中的起、始handle访问所有的Attributes。


a)Read Attributes:Read by type、Read by handle、Read by blob(只读取部分信息)、Read Multiple(读取多个handle的value)等

b)Writing Attributes,包括需要应答的writing、不需要应答的writing等

链路层状态(master(主机)、和slave(从机))与设备的ATT 角色是相互独立的,也就是说,主机设备可以是 ATT 服务器,也可以是 ATT客户端,从机也一样。



六、Generic Attribute Protocol(GATT)

通用属性文件配置层

GATT规定了配置文件(profile)的结构,profile一直是一个比较抽象的概念,我们可以将其理解为“应用场景、功能、使用方式”都被规定好的Application。用于提供通用的、信息的存储和共享等功能。两个建立连接的设备之间的所有数据通信都是通过 GATT 子程序处理,应用程序和 profile 直接使用 GATT层,数据交互也是再GATT层。

GATT profile的层次结构依次是:Profile—>Service—>characteristic

1.Profile

Profile位于GATT最顶层,由一个或多个应用场景有关的Service组成。

2.Service

Service包含一个或者多个Characteristic,也可以通过Include的方式,包含其它Service。

3.Characteristic

Characteristic为最基本的数据单位,由一个Properties、一个Value、一个或者多个Descriptor组成

a)Characteristic Properties定义了characteristic的Value如何被使用,以及characteristic的Descriptor如何被访问。
b)Characteristic Value是特征的实际值,例如一个距离特征,其Characteristic Value就是距离长度。
c)Characteristic Descriptor则保存了一些和Characteristic Value相关的信息(例如value记录距离长度,那么Descriptor可以是长度单位m/km)。

以上除“Profile”外的每一个定义,Service、Characteristic、Characteristic Properties、Characteristic Value、Characteristic Descriptor等等,都是作为一个Attribute存在的,包括之前所描述的Attribute的所有特征:Attribute Handle、Attribute Types、Attribute Value和AttributePermissions。

4.GATT的Service和Client

初始化GATT,GATT有Service和Client之分,Service 作为服务端,GATT 提供 read/write 接口。一般情况下,Central 作为 Client,Peripheral 作为 Service ,所以主机Central会调用GATT_WriteCharValue 或者GATT_ReadCharValue 来和作为Service端的 Peripheral从机通信, 而Peripheral 需要通过notify的方式,也就是调用GATT_Notification 发起和主机的通信。通常,Peripheral的notify方式,速度要比直接读写的速度要慢 。



七、Generic Access Profile(GAP)

通用访问协议

L2CAP、ATT和GATT都是关于基于连接的通信、没有涉及无连接的广播通信,虽然Link layer有所提及,但是Link layer太底层了,完全没有涉及Application(或者Profile)层面。所以就孕育出了GAP。

1.定义GAP层的蓝牙设备角色

Broadcaster Role,设备正在发送advertising events
Observer Role,设备正在接收advertising events
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色)
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)
通常Central和Peripheral一起使用,是连接后传输数据。Observer和 Broadcaster一起使用。

2.定义GAP层的用于实现各种通信的操作模式和过程

Broadcast mode and observation procedure,实现单向的、无连接的通信方式
Discovery modes and procedures,实现蓝牙设备的发现操作
Connection modes and procedures,实现蓝牙设备的连接操作
Bonding modes and procedures,实现蓝牙设备的配对操作

3.定义User Interface有关的蓝牙参数

蓝牙地址(Bluetooth Device Address)
蓝牙名称(Bluetooth Device Name)
蓝牙的pincode(Bluetooth Passkey)
蓝牙的class(Class of Device,和发射功率有关)

主要还是学习接近应用层的GAP和GATT,GAP是负责蓝牙连接的或者广播数据,GATT是负责基于连接的数据传输的。

总结

今天基本上都是纯理论知识,看了很多别人的,在根据自己的一些理解总结了下。,后面再用实际的代码联系起来学习,用Cypress的PSOC4吧。。感觉那个DA14580有点混乱,有点难,争取按着理论自己构造框架,不用别人的例程来修改了。。菜是原罪。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值