BLE 4.0 协议知识点总结(三)

写在前面:本文参考了 BLE4.0 低功耗蓝牙 协议 总结 ,对其进行了缩减,整理出了个人能理解的感觉比较基本的内容,有问题请随时跟我沟通 个人QQ:993650814.

前面两篇请参考如下链接

BLE 4.0 协议知识点总结(一)

BLE 4.0 协议知识点总结(二)

正文:

 还是得再粘贴一次数据通道PDU:


1.    LL Control PDU:

    参考上篇文章LLID =11b时,表示链路层控制PDU,他的payload格式定义:

    

    第一个字节为操作码Opcode,BLE有14种Opode

    

    下面开始讲解这些Opcode:

    1.1 LL_CONNECTION_UPDATE_REQ

        连接参数更新请求,这个请求包的格式如下:

    

    BLE 4.0 协议知识点总结(二)  中有讲到 传输窗口(WinSize)、传输窗口偏移时间(WinOffset)、链接间隔(Interval)、从机潜伏次数(Latency)、监管超时(Timeout)这些参数的含义。

    这里主要讲 Instant:在连接更新参数时,并不是请求发过去参数就立刻使用,而是等一定的周期后才会有效,当连接事件的次数等于Instant时新的连接参数才会开始使用。

    1.2    LL_CHANNEL_MAP_REQ

        通道图的第一次也是主机CONNECT REQ事件传递的,包格式:

    

        这里Instant的含义跟LL_CONNECTION_UPDATE_REQ中的含义一样。

    1.3 LL_TERMINATE_IND

        终止连接,包格式

        

    1.4  LL_ENC_REQ ----加密请求

        LL_ENC_RSP ----加密应答

        LL_START_ENC_REQ-----开始加密请求

        LL_START_ENC_RSP------开始加密应答

       ......

    2、连接态的数据包确认和重发以及多数据包发送标志

    2.1  序列号(SN)

        SN:标志位序列号,为了保证数据传输的可靠,每个数据包都包含一个SN,连接建立后,第一个数据包的SN为0,每次发送新的数据包,SN都与上次不同。这样就能使得接受方可以判断上次发送方发送的数据包的性质,如果这次发送的SN跟上次发送的相同,则判断为重传报文,如果不同则为新报文。

  2.2    预期序列号(NESN)

        NESN:它是接受方希望收到的下一个包的SN。NESN的发送方通知对方自己期望的接受的数据包的SN。

  2.3   更多数据(MD)

      这个标志位是为了通知对方自己是否还有更多数据要发送,MD = 1:表示有更多数据准备发送;MD=0:表示没有更多数据准备发送。

    2.4 SN、NESN、MD 举例:

    


/**********************************以上都是控制器Controller部分,下面开始主机Host部分了********************************/

1.    主机简介

    

    主机(Host)是完全由软件实现的层。图中,整个黄色部分就包含了主机层,Host由通用访问规范(GAP)、安全管理协议(SMP)、通用属性规范(GATT)、属性协议(ATT)、逻辑链路控制和适配协议(L2CAP)组成。

    由图中可以看出,GAP可以通过两个路径将数据传递给底层,一个是L2CAP(通过L2CAP传输的是动态数据),一个是直接给底层(直接给底层的是原始数据)。

    经典的例子说明下GATT Profile 、GATT、ATT三者的关系,说是这么说但是跟代码结合起来感觉还是很抽象.....

    

    Profile:根据应用需求制定的模子。

    GATT:根据Profile制成的数据库。

    ATT:如何去访问GATT中的数据。

    下面开始展开分析每个协议。


2. 逻辑链路控制和适配协议(L2CAP)

    L2CAP相当于一个交通疏导员,控制器层的数据来到主机层之后相当于来到了一个十字路口,控制器层数据的头信息中包含了数据要往哪里流,L2CAP根据这些头信息,选择数据流向。这意味着,L2CAP层有几条固定的道路,在BLE中L2CAP有3条固定的道路---专业名词叫信道。

    2.1 L2CAP 信道

        信道就是数据传输的道路,BLE中有3条固定的信道,并有专门的名字,

    

        控制器传上来的数据中都会有一个信道标识符,L2CAP根据这个信道标识符决定将传上来的数据分配到哪个上层应用来进行数据处理。当然,上层的数据向下传输时也要告诉L2CAP数据包是属性协议还是低功耗信令信道还是安全管理协议,L2CAP加上信道标识符之后向下传输,控制层收到数据之后,会根据信道标识符来对不同的数据进行解析。

2.2    数据包格式

    

    Length:为Information payload的长度,BLE最大传输单元(MTU:Maximum transmission unit)为23Bytes,超过23Bytes的部分在LL层MD标志中会更新,Information payload信息存放在L2CAP上层ATT数据中。

    Channel ID: 0x0004,0x0005,0x0006三个选择。

    2.3    低功耗信令信道包格式

        对于L2CAP的三个信道,0x0004为属性协议(ATT)使用,0x0006安全管理协议(SMP)使用,那么0x0005给谁使用呢?答案就是通用访问规范(GAP)使用,GAP的数据是传递给L2CAP的,所以数据格式要在L2CAP中定义,L2CAP数据包还是这个格式:


    其中Channel ID = 0x0005,而Information payload的格式如下:


    Code :操作码,GAP发送的命令或接受的命令,具体如下:



    Identifier:标志符,每个命令都有不同的标志符。

    Length:Data部分的长度。

    Data  :数据

    不同操作码Code 下的数据包格式:

    (1)、命令拒绝:用于对接受到的不支持的数据包的回应

    

    Reason占两个字节:


  (2)、连接参数更新请求和相应

        这个指令智能由从机发给主机,若主机发给从机会回复命令拒绝。

        数据包格式:


    注意:从机不能决定具体链接参数,从机只能给主机提出自己的想法,如果主机同意,主机会发送 “LL_CONNECTION_UPDATE_REQ”这个指令给从机(上面讲过这个指令)然后进行参数更新。

    

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/80757711
今日推荐