【Bluetooth蓝牙开发】七、BLE协议之链路层

      最后更新:2022-07-01 07:01:15 手机定位技术交流文章

      img
      个人网页:东戈谈技术
      我是东哥,一个嵌入式星际创造者
      创造性哲学:关注分享高质量的嵌入式文章,让每个人都能为利润阅读!
      img

      文章目录

        • 7.1 前言
        • 7.2 国家 和 作用 的 定义
        • 7.3空气接口数据包
          • 7.3.1序言
          • 7.3.2访问地址字段
            • 静态地址
            • 私人地址
          • 7.3.3PDU字段
            • 7.3.3.1 Advertising Channel PDU
            • 7.3.3.2 Data Channel PDU
          • 7.3.4CRC字段
        • 7.4 总结

      7.1 前言

      ble_stack

      经过Physical Layer通过定义,通信所需的物理通道已经正常,即40RF Channel(后面统一使用Physical Channel指代)

      此时Link Layer它的主要功能,可以在舞台上涂上,是:Physical Channel同时,控制与RF接收有关的参数是不可避免的。 此外,我们必须:

      • Physical Layer只提供有限的40个Physical Channel而且在BLE中参与通信的实体数量肯定不是这个数量水平。Link Layer需要解决Physical Channel的共享问题
      • 通信是两个实体之间的问题,而对于这两个实体来说,他们都希望自己看到一个传输渠道(即我们熟悉的逻辑链)。Logical Link)。这也是Link Layer需要解决的
      • Physical Channel不可靠的,任何数据传输都可能因干涉问题而损坏或丢失,这对于某些应用来说是不能接受的。 因此,Link Layer需要提供校正、重新传输等机制,以确保数据传输的可靠性。
      img

      7.2 国家 和 作用 的 定义

      BLE协议在Link Layer层抽象出5种状态:

      • 待机状态:待机状态,不发送数据或接收数据。 状态可以从任何状态输入,也可以切换以排除Connection国家以外的任何国家。
      • 广告状态: 广播状态, 可以传输, 听, 和响应广播频道包, 从待机状态输入.
      • 扫描状态: 由广播设备发送的广播包可以由待机监测和输入的状态。
      • 启动状态:启动状态监视指定设备的广播频道包,对广播包作出响应,并发送连接请求以建立与广播设备的连接。Initiater和对应的Advertiser都会切换到Connection状态:状态由预备状态输入。
      • 连接状态:与实体建立一个单独的通道的状态。建立该通道后,Initiating StateAdvertising State当频道被切断时,它就会返回Standby状态。

      image-20220614154315747

      进入Connect State随后 确定 了 两 个 作用 :

      • 主角色:由Initiating State进入的Connect State连接成功后,它成了Master Role
      • 奴隶角色:由Advertising State进入的Connect State连接成功后,它成了Slave Role

      7.3空气接口数据包

      本节的正式文件地址为:Core5.0 P2562

      一旦 完成 地位 和 角色 定义, 其余 是 简单 的, 主要 包括 两 个 类别 :

      • 提供国家与另一实体的相应国家之间数据交换的机制;
      • 根据最高级别实体的指示,以及实际情况,负责国家间的交换。

      BLE在协议中,这些都是通过所谓的空中接口数据包进行的(Air Interface Packets)的家伙负责。

      空气接口包定义包的格式,主要用于描述LE Uncoded PHYadvertising channeldata channel的通信格式。

      包的格式如下:

      image-20220615113138249

      7.3.1序言

      Preamble先驱代码:是0和1的交换序列,当物理通道是LE 1M PHY时,前导码为1Byte;当前导码为LE 2M PHY时,前导码为2Byte

      格式如下:

      image-20220615141655627

      7.3.2访问地址字段

      Access Address对于所有在广播频道发送的数据包,它们的值是0x8E89BED6.一旦链层处于启动状态,生成一个新的链层Access Address用于连接。该Access Address为一个4Byte的值。

      蓝牙使用Access Address来标识不同的设备,访问地址可以是公开地址或随机地址无论哪种地址,它都是48bits长度。

      • 公共地址: 官方定义的一些规范, 一般地址, 没有在这里解释.
      • 随机地址: 它可能是静态地址或私人地址.

      静态地址

      静态地址通常是随机生成的,但必须遵守以下规则:

      • 地址的两个最大有效位数应等于1
      • 随机地址部分,其中至少有一个是0
      • 随机地址部分,其中至少有一个是1

      image-20220615101057288

      大多数设备(移动电话)在启动后启动静态地址;一旦启动,静态地址保持不变;重新启动后,生成一个新的静态地址。

      私人地址

      私人地址也分为无法分析的私人地址和可以分析的私人地址。

      无法分析的私人地址

      不要分析私人地址,并遵循以下生成规则:

      • 地址的两个最大有效位数应该等于0
      • 随机地址部分,其中至少有一个是0
      • 随机地址部分,其中至少有一个是1
      • 不能与公共地址冲突

      image-20220615101813212

      可以分析的私人地址

      可以分析的私人地址,如白色斑点,是由加密算法生成的。Local Identity Resolving Key (IRK)或者the Peer Identity Resolving Key (IRK)这两个密钥,生成24bit的号码,

      可以分析的私人地址必须遵守以下规则:

      • 地址的两个最高有效位是0和1。
      • 随机地址部分,其中至少有一个是0
      • 随机地址部分,其中至少有一个是1

      image-20220615112120527

      摘要:上两个有效位置代表设备地址的类型

      7.3.3PDU字段

      Air Interface Packets整体的包结构是众所周知的,下面是主要的分析PDU字段。

      PDU广播频道有两种传输方式。Advertising Channel PDU;数据通道上传输Data Channel PDU,长度为2-257字节

      7.3.3.1 Advertising Channel PDU

      广播通道PDU,包括Advertising PDUScanning PDUInitiating PDU三种类型。

      广播通道的PDU,由16bit的数据头和1-255Byte变量大小数据的组成.

      image-20220615145215843

      16bit数据头组成如下:

      image-20220615145358790

      • 有几种类型的PDU类型字段,如下:

      image-20220615145704203

      有多种类型的PDU, 文本位置:core 5.0 P2567,可自行查阅。

      • ChSel:该位为1,支持LE Channel Selection Algorithm, 即LE通道选择算法, 相反, 不支持.
      • TxAdd:该位为0,表明PayloadAdvA这个领域是公开的;职位为1,显示PayloadAdvA字段为随机的。
      • Length:该字段表明了Payload的长度

      官方文档定位:core 5.0 P2569

      常见的Advertising PDU有:

      • ADV_IND:PDU用于连接和扫描不对称广播事件。

      image-20220615151023353

      • ADV_DIRECT_IND:PDU用于连接和扫描广播事件。

      image-20220629142104005

      • ADV_NONCONN_IND:此PDU用于不能连接或扫描的非指向广播事件

      image-20220629142142991

      常见的Scaning PDU有:

      • SCAN_REQ:PDU发送扫描请求

      image-20220629142724738

      • SCAN_RSP:PDU包含广播公司的地址和返回的扫描响应数据。

      image-20220629143102110

      常见的Initiating PDU有:

      • CONNECT_IND:此PDU用于建立连接

      image-20220629143325051

      image-20220629143809007

      LLData域具有相应的链层参数,可以详细查看Core 5.0 P2578

      每一种PDU Type,都会定义自己的Payload组成。

      7.3.3.2 Data Channel PDU

      数据通道PDU格式,包括16位Header,可变大小的Payload以及消息完整性检查MIC.

      包的格式如下:

      image-20220629144449919

      Header包括

      image-20220629144521418

      LLID这个字段将这个包标识为LL Data PDU或者LL Control PDU

      NESN:下次期望的序列号

      image-20220629145217504

      根据LLID字段,Data Channel PDU又分为LL Data PDULL Control PDU两种类型。

      • LL Data PDU: PDU用于向链层发送数据。

      LLID01b时,并且Length=0时,表示一个Empty PDU

      LLID10b在这种情况下,长度不能设置为0。

      • LL控制PDU: PDU用于控制链层的连接。

      image-20220629145700883

      还有一些 Opcode 代码:

      image-20220629145740229

      image-20220629145749688

      每个操作代码都符合不同的数据长度。core5.0 P2589

      7.3.4CRC字段

      CRC在链层包装结束时,检查所有PDU数据,大小长度为3Byte

      如果PDU数据被加密, CRC将计算加密的PDU数据。

      CRC算法以多项式求解的形式出现, 值得理解.Core 5.0 P2601

      image-20220630161953263

      7.4 总结

      本篇主要讲了BLELink Layer,包括链层所定义的角色和状态,空中接口数据包的通信格式,以及每个领域的意义,以促进我们的分析LOG和定位问题。

      img

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/28827.html

          热门文章

          文章分类