我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 帧控制字段 >

认识BLE 5协议栈 —— 链路层

归档日期:08-11       文本归类:帧控制字段      文章编辑:爱尚语录

  链路层的核心是状态机,包含广播、扫描、发起和连接等几种状态,围绕这几种状态,BLE设备可以执行广播和连接等操作,链路层定义了在各种状态下的数据包格式、时序规范和接口协议。

  对于广播行为,链路层根据其可连接性,可扫描性,定向性三个维度定义了多种不同类型广播事件,相应的扫描行为和连接行为根据广播包的类型区分处理。连接过程涉及复杂的时序过程,利用连接参数可以配置连接过程时序。

  广播、扫描和连接各自具有白名单过滤机制,可以针对指定地址的设备进行操作。链路层提供了一些列控制规程,比如加密连接和数据长度更新等,上层协议可以利用这些规程控制链路层。

  观察上图,扫描态无法直接进入连接态,从待机状态进入连接状态通常发生在连接已经建立的情况。

  如果设备从发起态进入连接态称为主角色(Master Role)或主设备,如果从广播态进入连接态称为从角色(Slave Role)或从设备。主设备发起连接请求,并且会设定连接过程的时序参数,从设备接受主设备设定的参数进行通信。

  在一个时刻,状态机只能处于一种状态,而链路层可以同时拥有多个状态机。这就意味着BLE设备在一个状态机中保持连接状态的同时,另一个状态机保持广播状态,或者多个链路状态机同时处于连接状态,这是BLE设备实现多个连接的基础。

  如果设备A已经跟设备B保持连接,并且设备A是主设备,那么设备A能够跟其他从设备C再次建立连接。

  如果设备A已经跟设备B保持连接,并且设备A是从设备,那么设备A能够跟其他主设备C再次建立连接。

  如果设备A已经跟设备B保持连接,那么不能实现设备A扫描,设备B广播并再次建立连接。设备A与B之间只能维持一个连接状态机。

  设备地址代表了设备的唯一识别码,它是设备间相互识别的依据,不同的设备必须具有不同的设备地址。

  设备地址分为多种类型,最简单的是Public Address。这种地址固定不变,可以根据设备地址跟踪到该设备。

  其中前三个字节使用OUI(Organizationally Unique Identifier),后三字节自由分配。OUI代表了一个指定的组织机构识别码,全球已经有许多科技公司申请了自己的OUI。开发者可以从IEEE网站上下载已被分配的MA-L地址,也可以从第三方网站查询某个公司的OUI或某个OUI对应的公司。

  在物理层的介绍中,提到了BLE将2.4GHz频段分成了40个物理信道,相邻信道频率间隔为2MHz。

  非编码型物理层对应的链路层数据包结构包含四个部分:前导码,访问地址,PDU和CRC。如下所示:

  前导码:前导码内容为重复的0/1或1/0序列,用于频率同步、符号时序计算和自动增益控制。对于1M速率的物理层,其长度为1字节;对于2M速率的物理层,其长度为2字节。

  访问地址:用于区分不同的数据类型。对于主要广播信道的数据包,其访问地址是一个固定值,对于其他信道的数据包,其访问地址是一个随机值。

  CRC:针对PDU部分进行校验。假如PDU经过加密,则校验加密后的PDU。

  编码型物理层对应的链路层数据包做了FEC编码处理,增加了几个字段,其结构如下:

  编码型物理层的符号传输速率是1M Sym/s,当采用S=2编码,数据传输速率为500bit/s,当采用S=8编码,数据传输速率为125bit/s。

  广播信道包括主要广播信道和次要广播信道,在这些信道中可以传输广播数据、扫描数据、发起连接数据和扩展广播数据。

  ChM:信道占用图。该参数共40bit,第1位表示信道0,第2位表示信道1,以此类推。前37个比特位代表37个数据信道,如果对应的信道曾经被使用过,则设置1,否则设置0。

  SCA:睡眠时钟精度(Sleep Clock Accuracy)。SCA的取值与睡眠时钟精度的关系如下表:

  上面一行表示发送过程,数据流从左至右,BLE数据先进行加密,然后生成CRC校验信息,再进行白化(Whiten),从天线发射出去。

  白化过程对数据序列执行多项式变化,使连续的0或连续的1数字序列被打散。因为接收机长时间接收0或1会误以为信号发生了频偏。

  反白化则将白化数据还原成原始数据。由于白化和反白化是公开可逆的,所以它们无需加密。

  BLE数据接收时,再进入反白化之前,首先检查访问地址是否正确,检测失败的数据会被抛弃。CRC校验失败的数据也会被抛弃。

  编码过程包含前向纠错编码(FEC)和模式映射(Pattern Mapper)两个子过程。

  最终,S=2情况下1个比特变成了2个比特,S=8情况下1个比特变为8个比特。冗余的比特可以用来自矫正,从而减少重传次数,间接的提升了接收灵敏度。

  假如一个帧包含AuxPtr,最小辅助帧间隔表示该帧末尾与其辅助帧开头之间的时间。

  链路层需要用到两个时钟精度参数,广播事件和连接事件使用活动时钟精度,其他事件则使用睡眠时钟精度。

  活动时钟驱动的行为事件,其时序误差应小于±2us,睡眠时钟驱动的行为事件,其时序误差应小于16us。

  除此之外,BLE 5引入了一个距离延迟(Range Delay)的概念。

  由于BLE 5极大的扩展了通信距离,假如两个设备相距1km,那么电磁波在空间传输,会产生一个时延,称为距离延迟。

  电磁波速度为光速,考虑通信介质(空气),做了一个保守估计1/c = 4ns。

  链路层基于设备地址执行设备过滤机制,利用一个白名单,记录设备的地址和地址类型。

  广播状态、扫描状态和发起状态三种状态下的过滤机制相互独立,拥有各自的过滤策略,但是三种过滤机制共享一个白名单。

  在广播状态下,链路层在广播事件中发送广播数据PDU,一个广播事件中可以发送多个广播数据PDU。

  BLE 5扩展了广播能力,可以按照新增的广播功能对广播事件进行分类,如下:

  一次广播事件中,设备依次在37、38、39三个信道上传输相同的广播数据,并监听扫描请求和连接请求。收到请求时如果扫描过滤策略或连接策略允许,则做相应的响应,否则关闭本次广播事件或跳到下一个主要广播信道继续广播。如下图所示:

  两个相邻的广播事件之间的时间差称为广播间隔。广播间隔是一个整数乘以0.625ms,有效范围是20ms至10485.759375s。

  两个相邻广播之间会加入一个0-10ms的随机时延,称为advDelay。下图为三次广播事件,依次发生在37、38、39广播信道上:

  扩展的广播事件可以通过多个辅助PDU来传输广播数据,极大扩展了广播数据的容量。

  扩展广播事件包含了一个传统的广播PDU,以及一些列辅助广播PDU,如下图所示:

  周期广播,以一个恒定的连接间隔进行广播,广播一旦开始就不能更改广播间隔。

  周期广播,使用AUX_SYNC_IND作为广播周期的标识,两个相邻的AUX_SYNC_IND PDU之间的事件间隔称为周期广播事件的广播间隔。如下所示:

  按照能否连接、能否接受主动扫描和是否定向三个维度可以将广播事件做如下分类:

  链路层在扫描状态下在主要广播信道监听广播数据。被动扫描不发任何数据,主动扫描发出扫描请求并监听扫描响应。

  扫描行为的持续过程称为扫描窗口scanWindow,两次扫描行为之间的时间间隔成为扫描间隔scanInterval,显然扫描窗口不能大于扫描间隔,如果扫描窗口等于扫描间隔,链路层将持续扫描。

  链路层监听到广播数据,或接收到扫描响应数据,则向主机发出广播报告(Advertising Report)。

  一旦进入连接状态,就视为建立了连接。建立连接后,主机会发出一个数据并等待从机的响应,如果在6个连接间隔内都未等到从机的数据包,则视为连接断开。

  在连接状态下,两端设备发送数据包的最小单元称为连接事件。链路层仅在连接事件中发送PDU数据,在一个连接事件内,可以发出多个PDU,相邻PDU之间至少保留T_IFS时间。

  两个连接事件之间的事件间隔称为连接间隔。连接间隔是一个整数乘以1.25ms,有效范围是7.5ms至4s。

  从机无需监听每一次主机的连接事件,忽略的事件总数称为从机握手潜伏数。主机设置一个监听超时,当主机等待超时仍未获得从机的响应,则认为连接断开,并向主机报告。监听超时是一个整数乘以10ms,有效范围为100ms至32s。

  主机在发出CONNECT_REQ之后,即进入连接状态,然后等待一会时间,发送第一个数据包。

  主机的一个数据包总是在发送窗口(Transmit Window)中发送,发送窗口的时序位置由以上三个参数共同确定。

  在建立连接时,从机端需要监听主机端发出的第一包数据。假如从机错过了传输窗口,则在下一个连接间隔中监听主机第一包数据。如下图所示:

  如果连接事件中有多个PDU需要发送,那么将在PDU中设置MD(More Data)字段,在一个PDU发送完毕后持续发送,直到全部PDU发送完毕,再关闭连接事件。

  每次主机发送一个PDU,从机都需要返回一个响应。假如从机没有返回响应,则主机中断发送,关闭连接事件。如果PDU没有发送完毕,从机没有收到主机发送的数据包,则从机端关闭连接事件。如果PDU的CRC校验失败,则关闭连接事件。

  连接事件的时序由睡眠时钟决定,而两端设备的睡眠时钟的精度均是±500ppm,因此从机为了收到主机的PDU,需要提前一段时间唤醒以监听主机的数据。

  这段提前唤醒的监听时间,称为“窗口展宽”。显然提高睡眠精度将减少从机的窗口展宽时间。

  数据信道PDU中有两个参数可以实现确认机制:SN,NESN。其中SN表示当前数据包的序号SeqNum,NESN表示下一个期望包的序号NextExpectedSeqNum。

  SN和NESN字段长度均为1比特,在连接事件开始时,二者均设置为0,之后在0与1之间变换。

  设备接收数据包时,如果发现SN和NESN相同,表明该数据包为新数据,则跳变NESN。如果发现SN和NESN不同,表明上次发送从机未收到,该数据位重发数据,则不跳变NESN。

  设备发送数据包时,如果发现SN和NESN不同,表明上次数据被成功收到,则发送新的数据并跳变SN。如果发现SN和NESN相同,表明上次数据未被成功收到,则重发上次数据且不跳变SN。

  数据信道PDU中还包括MD(More Data)字段,表示当前数据包后面是否还有更多数据包。

  根据上表,对于不支持扩展数据包和非编码型物理层的设备,链路层传输一个27字节PDU的时间为328us。

  设备可以选择性支持链路层的功能特性,对于两端设备均支持的功能特性,才可以使用。

  链路层应该单线程操作规程,并且设置超时,如果同时进行两个不兼容的规程,将导致断开连接。

  链路层维护一个计时器,当计时器触发,则更新私有地址,如果连接断开,也更新私有地址。协议栈推荐该计时器的周期为15分钟。

  如果广播设备使用了可解析的私有地址,则PDU中的广播设备地址字段使用本地的IRK生成。

  如果发起设备使用了可解析的私有地址,则PDU中的设备地址字段可以使用该私有地址。

  如果广播设备收到了使用了可解析私有地址的扫描设备或发起设备的请求,则需要解析该地址。

  如果发起设备收到了使用了可解析私有地址的广播设备的广播数据,则需要解析该地址。

  ATT(AttributeProtocol)属性层是GATT和GAP的基础,它定义了BLE协议栈上层的数据结构和组织方式。属性(Attribute)概念是ATT层的核心,ATT层定义了属性的内容,规定...博文来自:joylihaiyong的博客

  蓝牙4.0BLE协议栈介绍问题:什么是BLE协议栈?BLE协议栈与BLE协议的关系?顾名思义,人类之间需要一种语言才能沟通,机器之间,电子之间也有一个标准,也就是作为通讯标准,也就是通讯协议。...博文来自:lidiya007的博客

  BLE协议栈为什么要分层?怎么理解BLE“连接”?如果BLE协议只有ATT层没有GATT层会发生什么?协议栈框架一般而言,我们把某个协议的实现代码称为协议栈(protocolstack),BLE协议栈...博文来自:iini01的博客

  之前在看斯坦福教程中whiteining这一章时,博文来自:whiteinblue的专栏

  蓝牙4.0BLE协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并提供一些应用层API,供用户调用。...博文来自:zzfenglin的博客

  转自:蜗窝科技,前言通过“蓝牙协议分析(2)_协议架构”的介绍,大家对蓝牙协议栈应该有了简单的了解,但是,肯定还有“似懂非懂、欲说还休”的感觉。有这种感觉太正常了,...博文来自:huariylee的博客

  物理层负责将比特流转换成信号,并传递给线缆。既不知道信号会发往何处,也不在意某一位是否会在某处丢失。数据链路层提供了一种能够正确且稳定地传输比特流的结构。在数据链路层会把数据进行封闭,封装后的数据叫作...博文来自:冲吧,不要停!

  连接使用数据信道在两个设备之间可靠地发送信息博文来自:zzfenglin的博客

  写在前面:写在前面:本文参考了 BLE4.0低功耗蓝牙协议总结,对其进行了缩减,整理出了个人能理解的感觉比较基本的内容,有问题请随时跟我沟通个人.BLE4.0协议知识点总结(一...博文来自:年少就是不服输

  前言:目前市面上的低功耗的芯片非常多,比较出名的有nordic,ti,dialog等,国产的有bluex,丰加等。个人觉得不管是学习还是开发,nordic的芯片都是最好的。nordic的编码风格对用户...博文来自:XG_2013的博客

  主机协议层——Host主机协议层包括的逻辑连接控制和适配层(L2CAP)、属性协议层(ATT)、通用属性配置层(GATT)、通用访问文件配置层(GAP)和安全协议层(SMP)1通用访问配置文件概述——...博文来自:hahachenchen789的博客

  本文阐述了CC2541的结构、组成以及SHT20的基本原理。论文描述智能家居的发展历程和前景,通过对SHT20技术原理的研究,揭示了温度检测系统的工作原理。详细地讲解了OSAL基本原理,通过对室温检测...博文来自:since

  协议栈分为两部分:控制器和主机   Phy 物理层 1mbps自适应跳频的GFSK射频 工作免于许可证的2.4GHzLL链路层 控制设备的射频状态      设备的五种状态:           等待...博文来自:retacn_yue的专栏

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

  蓝牙理论篇什么是蓝牙4.0BLE协议栈协议定义的是一系列的通信标准​协议栈则是协议的具体实现形式,也即协议栈是用代码实现的函数库如何使用蓝牙4.0BLE协议栈协议栈已经实现了蓝牙4.0BLE协议,在开...博文来自:AutoManFelixs Blog

  数据链路层(以太网协议):负责两个相邻设备之间的数据帧的传送和识别一、以太网的帧格式源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位(6个字节),是在网卡出厂时固化的。 帧格式类型的...博文来自:ZY_20181010的博客

  连接间隔就是两个连接事件之间的时间间隔,连接间隔以1.25为单位,连接间隔的值为6(7.5ms)~3200(4s).不同的应用可能要求不同的时间间隔。长的时间间隔的优势是显著地节省功耗,因为设备可以在...博文来自:一颗偏执的心

  1.引言本章节主要探讨蓝牙的物理层,物理层的协议栈的分析,以及实际芯片设计时候的原理。物理层作为协议栈的最底层,它的作业至关重要。2.spec章节参考上图表红圈是core_4.2关于物理层的介绍的地方...博文来自:XG_2013的博客

  概要数据长度扩展功能允许LE控制器在连接状态下发送具有高达251字节的PDU。此外,在连接期间的任何时间,任何一方可以协商新的PDU大小。此前,控制器的最大数据通道有效载荷为27字节。与蓝牙核心规范版...博文来自:leconiot的博客

  首先说说链路层的作用,用于同一数据链路两个节点之间的传输。那么主机向路由器传输、主机向主机传输、路由器向路由器传输、路由器向主机传输都是链路层的工作。先来介绍几个概念网卡:(NIC)(网络适配器),是...博文来自:致宁的大博客!

  转自 认识BLE协议栈——直接测试模式BLE协议充分考...博文来自:Hansen Mi Blog

  BLE的Link层,应当是了解BLE需要首先熟悉的一部分,BLE的Controller部分主要都在围绕这一部分实现的。Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制,数据传输等等的。Li...博文来自:zhaoshuzhaoshu的专栏

  一、前言ble协议栈最难的一章来了,我尽自己的努力把这一章写好。安全管理就是使用秘钥的分配方法来识别和加密链路,简单的说SM提供了一个配对的方法,让MASTER和SLAVE(配对是在建立连接过后的动作...博文来自:XG_2013的博客

  一、实验目的:通过本实验,进一步熟悉PacketTracer的使用,学习路由器与交换机的基本配置,加深对网络层与链路层协议的理解。二、实验内容:4.1路由器交换机的基本配置打开下面的实验文件,按提...博文来自:do_best_的博客

  网络层(ip协议)、链路层(eth/arp协议)网络层:地址管理与路由选择通过对地址的管理,能够保证数据从一台主机发送到另一台主机,并且要选择合适的路径进行传输。主机:两端PC路由器:实现中间数据转发...博文来自:giturtles blog

  在IP数据包交付的过程中,在数据链路层会对数据包进行添加报头信息。以太网协议就是数据链路层的一个重要协议。这样说其实不太准确,因为以太网协议是一个规定数据链路层及物理层的协议,不能说它是数据链路层的一...博文来自:LChanceea8

  数据链路层负责无差错地将数据从一个站点发送到相邻的站点。它从网络层接收数据包,然后将它封装到称为“帧”的数据单元里,再传给物理层,进行传输。以下为大家介绍一些常见链路层协议。1、X.25      X...博文来自:pacogang的专栏

  第一章:概述应用层和运输层使用端到端的协议,网络层提供的是逐跳协议(点到点的服务).网络层IP提供的是一种不可靠的服务,即刻能快地分组从源节点送到目的节点,并不提供任何可靠性保证;TCP在不可靠的IP...博文来自:Jinming Su

  转载自:(GenericAccessProfile)通用访问规范层算是BLE协议栈中最顶部的一层,它...博文来自:parasoft的专栏

  一、数据链路层的功能1.为什么要设置数据链路层物理层的线路有传输介质与通信设备组成,比特流在传输介质上传输时一定会存在误差,而设置数据链路层目的就是为了在存在差错的物理层的基础上,采用差错检测,差错控...博文来自:刘剑峰的博客

  版权声明:本文为博主原创文章,未经博主允许不得转载。协议在链接层的数据包,...博文来自:zhaoshuzhaoshu的专栏

  写在前面:本文参考了 BLE4.0低功耗蓝牙协议总结,对其进行了缩减,整理出了个人能理解的感觉比较基本的内容,有问题请随时跟我沟通个人.前面两篇请参考如下链接BLE4.0协议知...博文来自:年少就是不服输

  将物理层和链路层放在一起讲,是因为物理层和链路层关系非常紧密,尤其是涉及到CSMA/CA和CSMA/CD协议。当然,链路层的功能要复杂的多,还包含很多其他协议,比如PPP协议,VLAN协议等。1、物理...博文来自:nicecat的专栏

  可靠性传输1.差错控制发送方将数据帧发送,但是当发送方发送的是一个1的时候此时接受方却接受的是一个0.(1)校验接收方如果帧校验接受到的帧没有问题,则对发送方发送一个肯定性的确认,当对这个数据帧进行校...博文来自:的博客

  TCP/IP协议族是一组不用的协议组合在一起构成的协议族,尽管通常称该协议族为TCP/IP,但是TCP,IP只是其中的两种协议而已。我们先来看看TCP/IP协议族的四个层次:下面我们再来看看数据进入协...博文来自:zyhmz的博客

  定义在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧在信道上的“透明”传输。1)封装成帧  在一段数据的前后分别添加首部和尾部,确定帧的界限,进行帧定界正常情况下,接...博文来自:u012279938的博客

  1、基本数据链路层协议引言在考察协议之前,先明确一下有关底层通信模型的基本假设是有必要的。首先我们假设物理层、数据链路层和网络层都是独立的进程,它们通过来回传递信息进行通信。如图所示,物理层进程和某些...博文来自:跃寒的博客

  授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

  TA的个人主页

  树莓派 3B+ 虚拟 USB 串口硬件(USB CDC ACM)是否存在判断,以及启动相应的程序

  Nordic nRF5 SDK 学习笔记之十二, nRF52840 Dongle USB CDC ACM 虚拟串口功能测试

  albert12336:Nordic PCA10040 上开发成功的App,怎样让它变成产品?因为一般不会拿出开发板来做产品。

本文链接:http://twilightranch.com/zhengkongzhiziduan/338.html