zoukankan      html  css  js  c++  java
  • LE蓝牙协议学习笔记(1)

    1.参考文章

    蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍:http://www.wowotech.net/bluetooth/ble_stack_overview.html
    nordicN51822 ble_app_hrs 属性服务器 示例 句柄分布:https://blog.csdn.net/caodaxia/article/details/78567996


    2.蓝牙协议栈层次结构

    ------------
        GAP
    ------------
        GATT
    ------------
        ATT
    ------------
        L2CAP
    -----HCI-------
        LL
    ------------
        PHY
    ------------

    GAP(Generic Access Profile, 通用访问规范):
    定义了很多种规程(Procedure),即怎么去发现设备、连接设备、怎么去授权、认证、加密。

    GATT(Generic Attribute Profile, 通用属性规范):
    定义了怎么通过下层ATT提供的能力去发现服务(Service),发现特性(Characteristic),读写特性(特性也就是一种属性)。GATT需要通过ATT
    这一层去读写这些属性才能提供对应的服务。GATT严重依赖ATT,它只是在属性的基础上综合提供服务。

    ATT(Attribute Protocol, 属性协议):
    定义了两种机制(向对方获取属性信息),流程为请求(Request),响应(Response),命令(Command)。

    L2CAP(Logical Link Control And Adaptation Protocol):
    为了分辨各来源的数据,引入了软件上的channel的概念来标记数据的来源和目的地。为了传输大数据包,引入了分片重组(分段合并也有可
    能是在HCI层做的)。为了让传输更加可靠,引入了配置和流控的概念。

    HCI(Host Controller Interface, 主机/控制器接口):
    定义了Soc如何如蓝牙芯片进行通信,就是数据怎样通过串口/USB口传给蓝牙芯片。

    LL(Link Layer, 链路层):
    定义了广播包(6种)、数据包(控制包、起始包、连续包)的格式。为解决数据发给谁的问题引入了AA(Access Address)。重新定义了一些
    规程(Procedure),比如怎么更新Channel Map(哪些频段可用)、怎么加密等等。


    ATT层最重要的概念是属性;GATT层最重要的概念是服务;L2CAP层最重要的概念是channel;LL层最重要的概念是访问地址,表明把数据发给
    谁;PHY层最重要的概念是调频,选择最干净的信道传输;GAP层定义了一些流程,必须要根据这些流程来使用设备。

    之间还有其它层,比如提供安全服务的SM(Security Manager)层,这里没有列出来。

    HCI上面的称为Host,是主机,HCI下面的称为Controller,也就是控制芯片。

    3.LE蓝牙数据格式

    数据分为广播数据和普通面向连接的数据:

    (1)广播数据(Advertising channel PDU):广播数据包的地址恒为0x8E89BED6,格式如下:

    [0x8E89BED6] [type] [Advertising channel PDU]

    [0x8E89BED6]:是广播包地址
    [type]:用于区分是哪种广播包
    [Advertising channel PDU]:广播的数据

    (2)普通数据包(data channel PDU)格式如下:

    [Random] [LLID(10b,01b)] [LL DATA PDU for L2CAP]
    
    [Random] [LLID(11b)] [opcode] [LL Control PDU]

    [Random]: 是一个随机数,用于表示目的设备的地址。
    蓝牙设备A一旦和蓝牙设备B建立连接,就会分配一个随机数,这个随机数称为Access Address. 如果断开,又重新建立连接,又会分配为另一
    个随机数,这个随机数各不相同。可以理解为可以使用这个随机数代表一个连接。那么一端就可以使用这个随机数代表已经建立连接的对端的
    设备。
    [LLID]: 表示数据是来自本层(LL层)还是来自上层的L2CAP层。若是来自本层(LL层),[LLID]就是11b,但是LL层的数据类型有LL_XXX_REQ、LL_XXX_RSP、
    LL_XXX_IND,使用[opcode]表示具体是哪种类型。若数据来自L2CAP层,那么LLID就是10b或01b,后面跟的就是来自L2CAP层的数据,此时LL层
    不会去解析数据内部的结构,解析任务交由L2CAP层完成。

    L2CAP层负责解析[LL DATA PDU for L2CAP],其组成:

    [Channel ID] [Data for upper layer(ATT and so on)]                这个是上层委托L2CAP层传输的数据
    [Channel ID] [Signaling Packet(Code+Identifier+Length+Data)]    这个是L2CAP层数据

    注意[Channel ID]是在L2CAP出来时才加上去的,在L2CAP层是没有的。
    L2CAP可能要传输的是本层的数据,也可能是传输上层委托给它的数据,通过[Channel ID]来进行分辨。传输L2CAP层的数据又有多种类型,通
    过Code域区分。

    ATT层赋负责解析[Data for upper layer(ATT and so on)],其组成:

    [att opcode] [att params]  [auth sig]

    [att opcode]: 用于区分数据类型。这一层不需要再传输上面的数据了。

    (3)空中传输的蓝牙数据格式:

    [0x8E89BED6] [type] [Advertising channel PDU]        //空中的广播数据包格式(应该也是到LL层的)
    
    [Random] [LLID(11b)] [opcode] [LL Control PDU]        //空中的来自LL层的数据包格式
    
    [Random] [LLID(10b,01b)] [Channel ID(05/06)] [Signaling Packet(Code+Identifier+Length+Data)]  //空中的来自L2CAP层的数据包格式
    
    [Random] [LLID(10b,01b)] [Channel ID(04)] [att opcode] [att params] [auth sig]    //空中的来自ATT层的数据包格式

    4.通信信道

    LE使用的2.4G ISM频段被划分为40个蓝牙信道,每个信道带宽为2MHz。选择3个信道作为广播信道,广播包在3个不同的信道(测试发现是37/38/39
    三个信道)中实现跳频,数据包在其它37个信道上调跳频。


    5.数据包大小限制

    (1)Link Layer对传输要求的数据片要求有效payload长度不超过251B。


    6.属性协议(Attribute protocol)

    基于信息采集的需求,BLE抽象出一个协议:Attribute protocol,该协议将这些信息以属性的形式抽象出来,并提供一些供远端设备读取、修改这些属性的值的方法。

    (1)Attribute Protocol的主要包括:
    a.基于L2CAP,使用固定的Channel ID(0x004)。
    b.采用client-server的形式。提供Attribute的一方称作ATT server(一般是那些传感器节点),访问信息的一方称作ATT client。
    c.一个Attribute由Attribute Type、Attribute Handle和Attribute Value组成。
    Attribute Type: 用于标示Attribute的类型,使用UUID(Universally Unique IDentifier,16-bit、32-bit或者128-bit的数值)区分。
    Attribute Handle:是一个16-bit的数值,用作唯一识别Attribute server上的所有Attribute。存在意义如下:
      ①一个server上可能存在多个相同type的Attribute,此时使用handle区分。
      ②同一类型的多个Attribute,可以组成一个Group,client可以通过这个Group中的起、始handle访问所有的Attributes。
    Attribute Value:代表Attribute的值,可以是任何固定长度或者可变长度的数组。

    d.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。

    e.根据所定义的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等。


    7.经过Link Layer的抽象之后,两个BLE设备之间可存在两条逻辑上的数据通道:一条是无连接的广播通道,另一条是基于连接的数据通道,是
    一个点对点(Master对Slave)的逻辑通道。

    8.L2CAP中的Channel ID也起到多路复用的作用
    数据发送时,将用户数据分割为一定长度的数据包(L2CAP Packet Data Units,PDUs),加上一个包含特定“ID”的header后,通过逻辑链路发送出去。
    数据接收时,从逻辑链路接收数据,解析其中的“ID”,并以此判断需要将数据转发给哪个应用。

    9.Channel ID的分配
    在通信之前,先建立一个基于Logical Channel的虚拟通道(称作L2CAP channel,和TCP/IP中的端口类似)。L2CAP会为这个通道分配一个编号,称作channel ID(简称CID)。

    10.GATT(Generic Attribute Profile)
    ATT之所以称作“protocol”,是因为它还比较抽象,仅仅定义了一套机制,允许client和server通过Attribute的形式共享信息。而具体共享哪
    些信息,ATT并不关心,这是GATT的主场。GATT是一个profile(更准确的说是profile framework)。在蓝牙协议中,profile一直是一个比较
    抽象的概念,可以将其理解为“应用场景、功能、使用方式”都被规定好的Application。

    BLE协议栈基于Attribute Protocol,定义了一个称作GATT(Generic Attribute)的profile framework(它本身也是一个profile),用于提
    供通用的、信息的存储和共享等功能。

    10.安全管理(Security Manager)
    Security Manager负责BLE通信中有关安全的内容

    11. 通用访问配置文件(Generic Access Profile(GAP))的作用
    (1)定义GAP层的蓝牙设备角色(role)
    和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,和发射功率有关);
    等等。

  • 相关阅读:
    CRM PrincipalObjectAccess(POA)
    crmForm.SubmitCRMForm
    transactionCurrencyId needs to be supplied to format a transaction money field.
    GitLab 之 Linux十分钟快装
    GitLab 之 Linux十分钟快装
    秒杀系统架构分析与实战
    秒杀系统架构分析与实战
    秒杀系统架构分析与实战
    创建微服务?请先回答这10个问题
    创建微服务?请先回答这10个问题
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10849216.html
Copyright © 2011-2022 走看看