BLE控制器之链路层
Posted 云翔世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BLE控制器之链路层相关的知识,希望对你有一定的参考价值。
BLE 协议之链路层介绍
链路层是低功耗蓝牙体系里面最复杂的部分,它负责广播、扫描、建立和维护连接、以及确保数据包按照正确的方式组织、正确的计算校验值以及加密序列等。
链路层包含三个基本概念;信道、报文、过程
信道
首先来说信道,信道包含广播信道和数据信道。
低功耗蓝牙使用40个信道,所以其信道宽度比经典蓝牙的72个信道所使用信道宽度宽,为2MHz,而经典蓝牙信道宽度为1MHz。
广播信道
未建立连接的设备使用广播信道发送数据,总共3个,为37,38,39. 各个广播信道之间的频点相差至少24MHZ,这是为了提供抗干扰性而设计的。基本上和wifi等1,6,12等错开,
外设通过广播信道进行广播,通告自身为可连接或可发现的,并且执行扫描或者发起连接。
数据信道
连接后的设备则通过数据信道来进行数据传输。
跳频算法主要应用在数据信道中,跳频的简单理解为:
自适应调频能够将一个已知的坏信道映射到一个已知的好信道,从而减少其他设备对数据
报文传送的干扰,为了实现这一点,连接中的两个设备都要记录好、坏信道的映射关系,如
当前信道是一个好信道,则将其映射到好信道的集合中去。举例说明如下:
假设一个低功耗蓝牙设备处于使用wifi 1信道连续通信的wifi接入点和设备的干扰范围之内,
低功耗会将编号为0-8的链路层数据信道标记为坏信道。这意味着当两个设备通信的时候,它们
会循环切换这些坏信道,并将其映射到好信道之上。
自适应调频冲映射实例如下:
信道的重映射保证了低功耗蓝牙面对严重干扰时依然能够传输数据,这一机制能让设备迅速应对新的干扰。
在这两个信道上的数据发送均为小数据包,封装了发送者给接受者的少量数据,无论是广播信道还是数据信道,基本的数据包的格式相同,所不同的就是内容而已。每一个数据包包含有最少80比特的地址、报头和校验信息。
报文结构
对报文结构进行解析一下。
1,传输顺序
传输时候是从低字节的低位开始传输的,比如:传输0x2513,其对应二进制为: 00100101 0001 0011, 则传输的时候是: 11001000 10100100, 即低字节3的低位开始。
2,前导字节
前导部分为01010101或者10101010 序列,取决于第一个bit是0还是1,用于接收者同步比特计时和设置自动增益控制。
接收机可以通过前导来检测信号强度以及0、1比特所使用的频率,从而确定自动增益控制来调整增益到一个合适的范围之内。
3,接入地址
32bit 接入地址在广播信道中为固定值:0x8e8dbed6, 而在数据信道数据包是完全随机的私有值。
广播接入地址主要在广播报文中使用。
为什么要选择0x8e8dbed6, 因为实际使用中发现其相关特性非常好,能够更大的抗干扰。
4,报头
8bit的包头字段描述数据包中的内容。包括报文类型,
对于广播报文来说,其类型有7种:
- ADV_IND: 通用广播
- ADV_DIRECT_IND 定向连接广播
- ADV_NONCONN_IND 不可连接广播
- SCAN_REQ 扫描请求
- SCAN_RSP 扫描响应
- CONNECT_REQ 连接请求
- ADV_SCAN_IND 可扫描广播
数据报文的报头为:
广播报文和数据报文的长度域有所不同。这一设计的主要原因是,广播报文除了最多31个字节的数据外,还要包含6个字节的广播设备地址,6个字节加31个字节导致报文长度最多为37个字节,因此需要6bit的长度域,而数据报文长度不是那么关键,多数待传的数据只有几个字节,因此达到最大长度的报文很少用到。但是如果报文被加密,则需要包含4字节的消息完整性检查域,实际的净荷数据减少到最多27个字节,因此为了简化,即使不加密的报文净荷也不允许超过27个字节的限制。以减低链路层的复杂度。
5,长度
另一个8bit的长度的字段描述载荷的长度。要注意的是长度最大不超过37,所以8bit可以完全满足长度描述
数据部分就位变长的有效数据部分,包含了双方相互数据传输的有用信息。
可以发送的最短报文是空报文,时长为80us,满载时的最长报文时长376us。(因为物理层1us传输1个bit),大部分广播报文只有128us,而大部分数据报文时长为144us
以上是关于BLE控制器之链路层的主要内容,如果未能解决你的问题,请参考以下文章
计算机网络之数据链路层的流量控制可靠传输机制以及停止等待协议408_2