蓝牙协议系列之(五) ATT

5  Attribute Protocol

由上面章节的描述可知,在BLE协议栈中:
Physical Layer负责提供一系列的Physical Channel;
基于这些Physical Channel,Link Layer可在两个设备之间建立用于点对点通信的Logical Channel;
而L2CAP则将这个Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP欢快的run起来了。

谈起应用程序,就不得不说BLE的初衷----物联网。物联网中传输的数据和传统的互联网有什么区别呢?抛开其它不谈,物联网中最重要、最广泛的一类应用是:信息的采集。
这些信息往往都很简单,如温度、湿度、速度、位置信息、电量、等等。
采集的过程也很简单,节点设备定时的向中心设备汇报信息数据,或者,中心设备在需要的时候主动查询。
基于信息采集的需求,BLE抽象出一个协议:Attribute protocol,该协议将这些“信息”以“Attribute(属性)”的形式抽象出来,并提供一些方法,供远端设备(remote device)读取、修改这些属性的值(Attribute value)。
Attribute Protocol的主要思路包括:
1)基于L2CAP,使用固定的Channel ID(0x004,具体可参考“图3”)。
2)采用client-server的形式。提供信息(以后都称作Attribute)的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。
3)一个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。

Attribute Value代表Attribute的值,可以是任何固定长度或者可变长度的octet array(理解为字节类型的数组即可)。

4)Attribute可以定义一些权限(Permissions),以便server控制client的访问行为,包括:
访问有关的权限(access permissions),Readable、Writeable以及Readable and writable;
加密有关的权限(encryption permissions),Encryption required和No encryption required;
认证有关的权限(authentication permissions),Authentication Required和No Authentication Required;
授权有关的权限(authorization permissions),Authorization Required和No Authorization Required。

5)根据所定义的Attribute PDU的不同,client可以对server有多种访问方式,包括:
Find Information,获取Attribute type和Attribute Handle的对应关系;
Reading Attributes,有Read by type、Read by handle、Read by blob(只读取部分信息)、Read Multiple(读取多个handle的value)等方式;

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


5  Attribute Protocol

由上面章节的描述可知,在BLE协议栈中:
Physical Layer负责提供一系列的Physical Channel;
基于这些Physical Channel,Link Layer可在两个设备之间建立用于点对点通信的Logical Channel;
而L2CAP则将这个Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP欢快的run起来了。

谈起应用程序,就不得不说BLE的初衷----物联网。物联网中传输的数据和传统的互联网有什么区别呢?抛开其它不谈,物联网中最重要、最广泛的一类应用是:信息的采集。
这些信息往往都很简单,如温度、湿度、速度、位置信息、电量、等等。
采集的过程也很简单,节点设备定时的向中心设备汇报信息数据,或者,中心设备在需要的时候主动查询。
基于信息采集的需求,BLE抽象出一个协议:Attribute protocol,该协议将这些“信息”以“Attribute(属性)”的形式抽象出来,并提供一些方法,供远端设备(remote device)读取、修改这些属性的值(Attribute value)。
Attribute Protocol的主要思路包括:
1)基于L2CAP,使用固定的Channel ID(0x004,具体可参考“图3”)。
2)采用client-server的形式。提供信息(以后都称作Attribute)的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。
3)一个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。

Attribute Value代表Attribute的值,可以是任何固定长度或者可变长度的octet array(理解为字节类型的数组即可)。

4)Attribute可以定义一些权限(Permissions),以便server控制client的访问行为,包括:
访问有关的权限(access permissions),Readable、Writeable以及Readable and writable;
加密有关的权限(encryption permissions),Encryption required和No encryption required;
认证有关的权限(authentication permissions),Authentication Required和No Authentication Required;
授权有关的权限(authorization permissions),Authorization Required和No Authorization Required。

5)根据所定义的Attribute PDU的不同,client可以对server有多种访问方式,包括:
Find Information,获取Attribute type和Attribute Handle的对应关系;
Reading Attributes,有Read by type、Read by handle、Read by blob(只读取部分信息)、Read Multiple(读取多个handle的value)等方式;

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


6  Generic Attribute Protocol

6.1 功能介绍
ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪些信息,ATT并不关心,这是GATT(Generic Attribute Profile)的主场。
GATT相对ATT只多了一个‘G‘,但含义却大不同,因为GATT是一个profile(更准确的说是profile framework)。
在蓝牙协议中,profile一直是一个比较抽象的概念,我们可以将其理解为“应用场景、功能、使用方式”都被规定好的Application。传统的BR/EDR如此,BLE更甚。上面我们讲过,BLE很大一部分的应用场景是信息(Attribute)的共享,因此,BLE协议栈基于Attribute Protocol,定义了一个称作GATT(Generic Attribute)的profile framework(它本身也是一个profile),用于提供通用的、信息的存储和共享等功能。

6.2 层次结构

作为一个Profile framework,GATT profile提出了如下的层次结构:


由上图可知,GATT profile的层次结构依次是:Profile—>Service—>characteristic。

“Profile”是基于GATT所派生出的真正的Profile,位于GATT Profile hierarchy的最顶层,由一个或者多个和某一应用场景有关的Service组成。
一个Service包含一个或者多个Characteristic(特征),也可以通过Include的方式,包含其它Service。

Characteristic则是GATT profile中最基本的数据单位,由一个Properties、一个Value、一个或者多个Descriptor组成。
Characteristic Properties定义了characteristic的Value如何被使用,以及characteristic的Descriptor如何被访问。
Characteristic Value是特征的实际值,例如一个距离特征,其Characteristic Value就是距离长度。
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。


7  Generic Access Profile(GAP)

前面4到6章的内容,都是和基于连接的data channel有关,至于无连接的advertising channel,以及连接建立的过程,好像被我们忽略了。虽然Link Layer已经做出了定义(具体可参考第3章的介绍),但它们并没有体现到Application(或者Profile)层面,毕竟Link layer太底层了。
因此,BLE协议栈定义了一个称作Generic Access(通用访问)的profile,以实现如下功能:
1)定义GAP层的蓝牙设备角色(role)
和3.3中的Link Layer的role类似,只不过GAP层的role更接近用户(可以等同于从用户的角度看到的蓝牙设备的role),包括:
Broadcaster Role,设备正在发送advertising events;
Observer Role,设备正在接收advertising events;
Peripheral Role,设备接受Link Layer连接(对应Link Layer的slave角色);
Central Role,设备发起Link Layer连接(对应Link Layer的master角色)。

2)定义GAP层的、用于实现各种通信的操作模式(Operational Mode)和过程(Procedures),包括:
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,和发射功率有关);

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝牙协议栈BTstack是一种为蓝牙设备开发的基础框架。它旨在为使用低功耗蓝牙协议BLE)和传统蓝牙协议(BR / EDR)的设备提供通用接口。 BTstack提供了一组API,使开发人员可以使用不同平台上的相同代码来处理蓝牙样式的应用程序。 BTstack提供的API包括协议栈初始化,L2CAP,RFCOMM,SDP,ATT / GATT等。 BTstack的另一个优点是它是一个开源项目,可以在许多平台上使用。它已被移植到多种硬件平台和操作系统中,例如ARM Cortex-M3 / M4(例如STM32),ATmega,Arduino,Raspberry Pi,Windows,Linux,macOS和iOS。 BTstack的应用广泛,包括智能手机,平板电脑,手表,耳机,音响,传感器和医疗设备。随着IoT设备的普及,BTstack将越来越受到重视。 总之,BTstack是一个功能强大、开源、跨平台的蓝牙协议栈,为开发人员提供了通用API,使他们可以在不同的平台上开发相同的应用程序。它是蓝牙设备开发者的重要工具之一。 ### 回答2: 蓝牙协议栈是指一套硬件和软件技术,用于使不同设备间的数据传输更加方便快捷。蓝牙协议栈的运行方式是通过多层协议交互实现的,向上层应用提供数据传输的支持,向下层硬件提供调用接口。 BTstack是一种开源的蓝牙协议栈,提供了高效、可靠和易于使用的终端设备的蓝牙连接。BTstack支持各种蓝牙协议,包括BLE、HFP、A2DP、AVRCP和SPP等,可以在不同的操作系统和硬件平台上使用。BTstack的优点在于它是可移植的,可以快速适应各种不同的蓝牙设备。 BTstack还支持多个蓝牙连接,并提供了稳定的设备连接,具备智能重连和设备发现功能,同时还支持多个蓝牙配置文件。BTstack还支持单片机,特别是ARM Cortex-M处理器,以及一些嵌入式系统平台。 总之,BTstack是一种强大的、稳定的、高度可移植的蓝牙协议栈,可以帮助开发者快速开发出高效、可靠的蓝牙连接应用。 ### 回答3: 蓝牙协议栈是用来实现蓝牙通信协议的软件模块,因此需要进行一系列的层次化操作,这些层次可以分为物理层,链路层,传输层,应用层。而btstack则是其中一个基于C语言的开源协议栈。 btstack采用了模块化的设计,每个模块之间相对独立,且易于扩展。可以在移植到不同平台上时,很容易添加某些特定的硬件驱动和操作系统。同时,btstack也提供了丰富的API接口,便于快速实现各种蓝牙应用,例如数据传输、音频传输、打印机、键盘/鼠标等等。 除此之外,btstack还支持免费开源的蓝牙协议栈,可供个人开源项目和商业开发者使用。同步提供了符合不同使用场景的两种许可证:BSD和GPLv2。且支持大部分操作系统,包括Windows、MacOS、Linux、Android、IOS 和Windows Phone等,在各个平台上表现出色。 总而言之,btstack是个高度模块化、可移植性高、及具有完整的特性和相同的性能的优秀蓝牙堆栈。它极大地推进了蓝牙技术的发展,且为蓝牙应用开发者提供了更多的灵活自由,是目前蓝牙通信领域应用很广泛的协议栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值