文章目录

  • 1 概述
    • 1.1 链路层状态
      • 1.1.1 允许的状态和角色组合
      • 1.1.2 只支持部分状态的设备
    • 1.2 比特序列
    • 1.3 设备地址
      • 1.3.1 公共地址
      • 1.3.2 随机地址
        • 1.3.2.1 静态设备地址
        • 1.3.2.2 设备私有地址产生
        • 1.3.2.3 私有地址解析
    • 1.4 物理通道
      • 1.4.1 物理通道索引

1 概述

1.1 链路层状态

链路层的操作可以用含有以下状态的状态机来描述:

  • 待机状态
  • 广播状态
  • 扫描状态
  • 发起状态
  • 连接状态
  • 同步状态
  • 同步广播状态

链路层状态机在同一时间只允许有一个状态,链路层需要有一个至少支持广播状态和扫描状态的状态机,链路层可以有多个链路层状态机的实例。

链路层在待机状态不进行任何数据包的收发,可以从任意状态进入待机状态。

链路层在广播态可以在广播信道上发送数据包并且可以监听和应答由广播数据包触发的应答。处于广播态的设备被认为是一个广播者,广播态可以从待机状态进入。

在扫描状态,链路层会在广播信道上去监听处于广播态的设备发送的广播包,处于扫描态的设备被认为是扫描者,扫描态可以从待机状态进入。

处于发起状态时,链路层会监听来自特定射逼得广播包,并且给出相应的应答以便与另一个设备建立连接,处于发起状态的设备被认为是发起者,发起状态可以可以通过待机状态进入。

连接态的可以从发起状态或广播状态进入,处于连接态的设备被认为处于连接当中。
连接状态下,一共有2个角色:

  • 主设备
  • 从设备

当从发起状态进入连接态,则连接是作为主设备角色,当从广播态进入连接态,则连接是作为从设备角色。

主设备的链路层和从设备进行通讯并定义传输时序。

从设备端链路层和单个的主设备进行通讯。

同步态链路层会定期的监听来自一个定期广播的设备的定期广播队列。同步状态可以通过待机状态进入,这种情况下,主机可以指定链路层去监听来自一个广播BIG信息的特定设备的同步数据包,处于同步状态下的设备作为同步接收机来接收同步数据包。

在同步广播状态下的链路层会在同步物理通道上发送同步数据包,同步广播状态可以从待机状态下进入,处于同步广播状态下的设备被称为同步广播者。
###

1.1.1 允许的状态和角色组合

链路层可以可选择的支持多个状态机,如果支持多个状态机,那么任意的状态和角色的组合都可能会被支持,特别的,链路层允许使用主机角色和从机角色同时处于连接状态中,然而,任意的两个设备间不应该有超过1个的连接。

注意:支持扫描定期广播(见章节4.4.3.4)的设备必须支持2个状态机

链路层的实现不需要强制性的去支持所有协议规范所允许的状态组合。但是,如果它支持表1.1中“组合A”列中给出的状态或状态组合,那么它也要支持在"组合B"列中的状态或状态组合。

每一种情况下,其他状态 C的组合可以是空的,在最后2行,其他状态包括其他可连接的广播状态。

1.1.2 只支持部分状态的设备

只支持部分链路层状态或者连接状态中的一个角色的设备,不会被要求支持设备不支持的状态或者模式的特性(包括支持特定PDUs,规程,数据长度或HCI指令或者HCI指令的一个特定特性)。

1.2 比特序列

在包或协议数据单元(PDU)内定义字段时的比特序列在链路层规范中遵循小端格式,使用如下规则:

  • 最低有效位(LSB)对应于b0
  • LSB是发送到空中的第一位数据
  • 在插图中,LSB展示在左边

此外,在链路层中定义的数据字段,如PDU header字段,发送的时候需要LSB先被发送,示例如下:一个3位的数据X=3为 b0b1b2 = 110

在空中的时候,首先发送1,然后发送1,最后发送0,在规范中,就是110.

规范中定义的二进制值遵循 0b10101010 这样的格式(如章节2.1.2 中描述的广播物理通道的接入地址)在写的时候MSB在最左边。

多字节的字段,除了循环冗余校验(CRC)以及消息完整性校验(MIC),发送的时候都是最后一个字节先发送。每一个多字节的字段除了CRC,都应该遵循LSB发送的方式,如PDUs中48位的地址应该先发送最后一个字节,然后是剩下的按序排列的5个字节。

多字节的字段,CRC初始值,MSB在最左边,如0x112233445566种,0x11是MSB字节。

1.3 设备地址

设备通过设备地址和地址类型进行标识,地址类型指示设备是一个公共地址还是随机地址,公共地址和随机地址长度都是48位。

设备最少需要使用一种设备地址类型,也可以使用多个地址类型。

设备的身份地址是他在发送的包里面用到的公共地址或者静态私有地址,如果设备使用私有可解析地址,那么他也应该有一个身份地址。

当两个设备地址对比的时候,对比应该包括地址类型,如两个设备地址类型不同,那么即使其他48bit都是相同的,他们两个也不是不同的地址。

1.3.1 公共地址

公共地址需要按照 章节2 Part B 第1.2节来创建,除非公共设备地址也将被用作BR/EDR控制器的的BD_ADDR,否则对LAP值的限制不适用。

1.3.2 随机地址

随即地址可以是以下选项之一:

  • 静态地址
  • 私有地址

子类型通过随即地址的前2位来进行表示,如表1.2所示:

Address[47:46] Sub-Type
0b00 私有不可解析地址
0b01 私有可解析地址
0b10 预留
0b11 静态地址

术语随即地址涉及到静态地址和私有地址类型

随机设备地址的传输是可选的,设备应该接受从远端设备传来的随机设备地址。

1.3.2.1 静态设备地址

静态设备地址随机是一个48位的随机地址并且需要遵循以下要求:

  • 至少有1位随机部分需要是0
  • 至少有1位随机部分需要是1

静态地址的格式如图1.2所示:

设备可以在每次重新上电以后初始化它的静态地址位一个新的值,在未重新上电的时候,一旦静态地址初始化完成,不应该再进行修改。

注意:一旦设备的静态地址改变,那么存储在对端的设备地址将会失效并且使用旧地址进行重连的功能也会丢失。

1.3.2.2 设备私有地址产生

私有地址可以有以下两种子类型之一:

  • 不可解析的私有地址
  • 可解析的私有地址

为了创建不可解析的地址,设备需要按照下面要求生成4一个8位的地址:

  • 地址随机部分至少有1位是1
  • 地址随机部分至少有1位是0
  • 地址不能和公共地址相同

不可解析的私有地址格式如图1.3所示:

为了创建可解析的私有地址,设备必须有本地的IRK或者对端设备的IRK,可解析的私有地址需要通过IRK和一个24位的随机数进行创建,随机数作为装饰,并且需要遵循以下要求:

  • prand的随机部分至少有1位的0
  • prand的随机部分至少有1位的1

私有可解析地址的格式如图1.4所示:

哈希值通过章节3 Part H 第2.2.2部分锁定义的随即地址函数 ah使用设备的IRK作为输入参数K,prand作为参数r来产生。
hash=ah(IRK,prand)hash = ah(IRK, prand)hash=ah(IRK,prand)

prand和哈希值按下列方式连接起来生成随机地址(随机地址):
randomAddress=hash∣∣prandrandomAddress = hash || prandrandomAddress=hash∣∣prand

哈希值的最低有效字节为随机地址的最低有效字节,prand的最高有效字节为随机地址的最高有效字节。

1.3.2.3 私有地址解析

如果对应设备的IRK是可用的,那么私有可解析地址是可以被解析的,如果私有可解析地址被解析成功,那么设备可以把该地址和对端设备关联起来。

私有可解析地址被划分为一个24位的随机部分(prand)和24位的哈希部分,私有可解析地址的最低有效字节为哈希部分的最低有效字节,最高有效字节为prand的最高有效字节,本地哈希值可以通过定义在 章节3 Part H 第2.2.2章节部分的随即地址哈希函数使用IRK作为参数K和prand作为参数r来生成:
localHash=ah(IRK,prand)localHash = ah(IRK, prand)localHash=ah(IRK,prand)
本地哈希值用来和从私有可解析地址中提取的哈希值进行对比,如果相匹配,则对端设备的地址被解析成功。

如果设备有不止一个的IRK,则设备重复上面的过程去查看是否有一个IRK是可以匹配的,直到设备地址被解析成功或者所有的IRKs都被尝试一遍。

注意:不能在 T_IFS解析私有地址的设备,可能会在下一个事件中进行响应。

不可解析的私有地址不能够被解析。

1.4 物理通道

如Vol 6 Part A Section 2所描述的,在2.4GHz ISM频段定义了40个RF通道,这些无线通道划分了3被称为首要广播通道的信道,用来初始化广播和所有的广播活动,另外的37个通道被称为通用通道,主要用于通讯,每一个无线通道都申请一个独一无二的通道编号,见章节1.4.1

上面2组无线通道用在4种LE物理信道上:广播,定期,同步和数据,广播物理通道使用2组信道来发现设备,建立连接和广播数据,

其中首要广播通道组成首要广播物理通道,通用通道组成次要广播物理通道,其余的物理通道使用通用通道。

两个准备通讯的设备使用同样的物理通道,因此在同一时刻,射频收发机需要被调整到同样的无线通道上来。

考虑到射频信道的数量有限,而且许多蓝牙设备可能在同一区域内独立运行,因此很有可能两个独立蓝牙设备的收发器被调到同一射频信道,从而导致物理信道碰撞。为了减轻这种冲突的不良影响,物理通道上的每个传输都从一个被设备调整到物理通道的关联码的访问地址开始进行,访问地址是物理通道的一个属性,在每次数据包传输的开始处提供。

链路层在一个时刻使用一个物理通道。

每当链路层与时间片、频率和物理通道的访问物理同步时,它被称为在数据物理通道上“连接”或“同步”到定期物理通道或同步物理通道(无论它是否参与通道的通信)

1.4.1 物理通道索引

表1.3展示了PHY通道到物理通道的映射以及无线通道分组。‘●’在表1.3中表示PHY通道和索引是该组别的一部分。

蓝牙规范-Vol 6:低功耗控制器 Part B 链路层规范 章节1 概述相关推荐

  1. 蓝牙规范-Vol 6:低功耗控制器 Part A 物理层规范

    文章目录 1 概述 2 频段和信道 3 发射机特性 3.1 调制特性 3.1.1 稳定的调制系数 3.2 杂散辐射 3.2.1 调制频谱 3.2.2 带内杂散辐射 3.2.3 带外杂散辐射 3.3 频 ...

  2. Bluetooth 蓝牙介绍(二):低功耗蓝牙BLE协议栈

    文章目录 Physical LAYER Link LAYER 角色 地址 物理信道 Air Interface Packet PDU Advertising physical channel PDU ...

  3. 三 蓝牙低功耗(BLE)协议栈 之 HCI层

    一 HCI介绍 HCI (Host Controller interface), 为Host访问Controller提供一组标准的接口. 主要完成3个任务: Host通过HCI发送命令给Control ...

  4. 蓝牙学习笔记(二)——低功耗蓝牙(BLE)的体系结构

    前言 :最近开始学习蓝牙相关技术,做了一些笔记整理.本次阅读参考书籍是<低功耗蓝牙开发权威指南> 低功耗蓝牙的体系结构   低功耗蓝牙体系结构主要分为三个部分:控制器.主机和应用程序.在控 ...

  5. Bluetooth 蓝牙介绍(三):低功耗蓝牙BLE空口协议Ⅰ

    文章目录 帧空间 时序要求 链路层设备过滤 NON-CONNECTED STATES Standby state Advertising state Advertising events Extend ...

  6. 五 蓝牙低功耗(BLE)协议栈 之 ATT层

    一 介绍 ATT全称是Attribute protocol(数据交互协议),这一层的关键词是Attribute(属性).一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层 ...

  7. android蓝牙 uuld,BLE4.0低功耗蓝牙协议总结

    一位大牛在蓝牙BLE领域干了十来年的总结,总结得很到位.都准备出书了.非常好.在这里共享给大家! 版权所有 273.扫描态. 46 274.发起态 275.软件设计广播状态流程图.-.-. ::::: ...

  8. 蓝牙技术|蓝牙(BLE)低功耗你所不了解的特性

    蓝牙是蓝牙技术联盟设计和销售的一种个人局域网络技术,旨在用于医疗保健.运动健身.信标(Beacon).安防.家庭娱乐等领域的新兴应用.相较经典蓝牙,蓝牙低功耗技术旨在保持同等通信范围的同时显著降低功耗 ...

  9. Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别

    找到一篇介紹BT与BLE使用差别的文章, 写的很清晰,看完基本明白了 ----------------------------------------------------------------- ...

  10. android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...

    电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上) 前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝 ...

最新文章

  1. 深入剖析Vue源码 - 响应式系统构建(上)
  2. 修改linux的时间可以使用date指令
  3. python自动测试g_Python自动化测试如何自动生成测试用例?
  4. number java_java中Number Math 类方法
  5. 使用TortoiseSVN下载SourceForge.net上的代码
  6. 2020统计局的行政划分表_湖州市有几个区和县?湖州市2020年县级以上区划名单...
  7. c ++异常处理_C ++中的异常处理
  8. 怎样调整input框背景颜色_不用花钱,自己也能制作证件照,更换背景色、排版全搞定...
  9. Visual Studio Debug Practice
  10. 互联网日报 | 张朝阳宣布2020年搜狐已盈利;永辉超市达成千店目标;腾讯云原生注册用户规模超100万...
  11. Android主题换肤实现原理与Demo
  12. 合唱队形(NOIP)
  13. Word如何取消打印前自动更新域
  14. 2021nian开源SLAM 算法
  15. 阿里云如何绑定域名(阿里云域名如何绑定ip)
  16. php 直接显示缩略图,PHP自动生成缩略图函数的源码示例
  17. 爬虫------爬取搜狗图片
  18. 素描学习入门零基础学习静物素描的几种方法
  19. 记一次bug,由于前端参数不对导致的bug,no int/Int-argument constructor/factory method to deserialize from Number valu
  20. 在Python中调用C/C++:cython及pybind11

热门文章

  1. [论文笔记|VIO]On the Comparison of Gauge Freedom Handling in Optimization-based V-I State Estimation
  2. DDR3基本概念1 - 存储单元结构和原理
  3. 【网安入门】学习笔记(一)
  4. matlab 定义自然数变量,matlab数值数据和变量名
  5. hdoj 超级赛亚ACMer (贪心)
  6. 移动前端自适应适配布局解决方案和比较
  7. 面向对象技术之——转发(forwarding)
  8. 我的2018---艰难的一年
  9. 利用vim编辑器创建和编辑正文文件
  10. 程序员快速记忆英文单词的专属诀窍