BLE链路层空中包格式
空中包格式
BLE链路层的空中包格式非常简单,它所有的空中包都遵循下图所示的格式:
有上图可见,BLE空中包由4个部分组成,他们分别是:
- 前导码(Preamble)
- 访问地址(Access Address)
- 协议数据单元(Protocol Data Unit)
- CRC
前导码占1个字节,访问地址占4个字节,PDU占2到257个字节,CRC占3个字节,一个完整的空中包大小为10个字节到265个字节之间
LSB(The Least Significant)表示最低有效位;MSB(The Most Significant)表示最高有效位。最低有效位最先被链路层发往空中,最高有效位最后发送。也就是说前导码最先被发送出去,其次是访问地址,再次是PDU,最后才是CRC
前导码(Preamble)
前导码占8个比特,所有广播信道中,空中包的前导码都是10101010b;数据信道中,空中包的前导码是10101010b或者是01010101
如果从电平的角度来说,前导码其实是一个高低变化矩形波,接收者可以将接收电路的频率同步到该矩形波的频率,这就是所谓的接收端频率同步的机制。通俗点讲就是,接收者可以借此预估出一个比特的起始位置以及一个比特的宽度,从而可以准确的接收后续每一个有效比特位。
同时,前导码标记着一个有效空中包的起始位置,避免空中无效数据的干扰。
访问地址(Access Address)
广播信道和数据信道中的访问地址是不同的。广播信道的访问地址固定为0x8E89BED6;数据信道的访问地址由发起者决定。因此简单理解就是,从访问地址首先可以区分,这个空中包是一个广播包还是一个连接态的数据包。
上文讲到了数据信道的前导码是10101010b或者是01010101b,其实这取决于数据信道中的访问地址的最低有效位是0还是1,如果是1,则前导码是01010101b,否则是10101010b
当发起者向广播者发起一个连接请求的时候,它会把访问地址的值放入连接请求的相应字段中,当链路层连接成功建立之后,双方进入到连接态,以后的空中包双方都使用这个访问地址进行通讯。
由此可见,访问地址也是跟一个具体的链路层连接相互绑定的。例如,一个设备跟多个设备都建立了链路层的连接,也就是说一个设备同时维护多个链接,当这个设备收到一个空中包的时候,它只需通过访问地址就可以知道该空中包是哪个连接的包了。
协议数据单元(Protocol Data Unit)
协议数据单元是空中包的有效载荷部分,不同类型的空中包,它的PDU都不相同,大致可分为广播信道的PDU和数据信道的PDU
BLE采用跳频机制,链路层一共有40个信道,其中3个信道是广播信道,另外37个信道是数据信道
当设备处于广播态或者发起态的时候,设备发送或者接收广播信道的PDU;当设备与另一个设备建立链路层连接之后,双方进入到连接态,他们发送或者接收数据信道的PDU
广播信道PDU
广播信道PDU的结构由两部分组成,分别是Header和Payload,如下图所示:
由上图可知,Header大小为16bits,也就是2个字节,Payload的长度由Header中的Length字段决定,那么先看下Header字段的组成,如下图所示:
Header字段由以下6个部分组成:
- PDU类型:广播包的类型
- RFU(Reserve For Future):保留未来使用
- TxAdd:发送者的地址类型
- RxAdd:接收者地址类型
- Length:Payload部分的长度
- RFU(Reserve For Future):保留未来使用
广播包的类型如下表所示:
PDU Type | Packet Name |
---|---|
0000 | 可连接非定向广播 (ADV_IND) |
0001 | 可连接定向广播 (ADV_DIRECT_IND) |
0010 | 不可连接广播 (ADV_NONCONN_IND) |
0011 | 扫描请求 (SCAN_REQ) |
0100 | 扫描响应 (SCAN_RSP) |
0101 | 连接请求 (CONNECT_REQ) |
0110 | 可扫描指示 (ADV_SCAN_IND) |
0111-1111 | 保留 (Reserved) |
这里不展开介绍各个包的类型了,以后的博文中会有详细介绍
数据信道PDU
数据信道PDU包含16比特的头部和一个⻓度可变的payload,以及可能还包含一个
MIC(Message Itegrity Check:消息完整性检查),数据信道PDU格式如下图所示:
其中Header的结构如下图所示:
Header包括6个部分:
LLID:
2个字节,表示这个包是LL Data PDU(链路层数据包)还是LL Control PDU(链路层控制包),它可能的取值如下:
- 00b:保留
- 01b:LL Data PDU(链路层数据包)或者是一个Empty PDU(空包)。如果是链路层数据包,由于一个过长的L2CAP包会被分片成多个包分别发送,这个包就是被分片之后的非第一个分片包
- 10b:LL Data PDU(链路层数据包),它表示未被分片的完整的数据包,或者是分片之后的第一个分片包。
- 11b:是LL Control PDU(链路层控制包)
NESN:
下一个包的序列号
SN:
空中包的序列号
MD:
More Data的意思,由于BLE是低功耗蓝牙,本质上采用的是睡眠唤醒机制,处于唤醒状态时发送和接收空中包,如果MD字段设置为1,则表示发送者后续还有更多的空中包要发送,以此通知接收者不要进入睡眠状态,要持续保持数据传输;如果该字段设置为0,则表示发送者没有更多的数据要发送了,可以进入睡眠状态了。
CRC
CRC是关于PDU部分数据完整性校验
BLE链路层空中包格式的更多相关文章
- 详解BLE 空中包格式—兼BLE Link layer协议解析
BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...
- BLE链路层状态机初探
状态机 BLE链路层把所有的功能放到五种不同的状态中,在不同的状态分别执行不同的功能. 一般来说,BLE设备大致有这么几种状态:空闲,广播,扫描,发起连接和连接成功. 广播和扫描是相对应的,一个设备广 ...
- BLE链路层状态机
BLE的Link层,应当是了解BLE需要首先熟悉的一部分,BLE的Controller部分主要都在围绕这一部分实现的.Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制,数据传输等等的.Li ...
- BLE广播信道空中包详解
广播信道空中包 在学习BLE的过程中,对于广播信道的空中包有许多混淆的地方,包括各个空中包的用途,帧格式等.现在想把他们做一个总结和归纳. BLE广播信道中的空中包分为有以下几种: 可连接非定向广播 ...
- 蓝牙BLE数据包格式汇总
以蓝牙4.0为例说明: BLE包格式有:广播包.扫描包.初始化连接包.链路层控制包(LL层数据包).逻辑链路控制和自适应协议数据包(即L2CAP数据包)等: 其中广播包又分为:定向广播包和非定向广播包 ...
- TCP/IP——链路层简记
在TCP/IP协议族中链路层的主要目的有三个: 1,为IP模块发送和接受IP数据报. 2,为ARP模块发送ARP请求和接受ARP应答. 3,为RARP模块发送RARP请求和接受RARP应答. 链路层包 ...
- BLE 5协议栈-链路层
文章转载自:http://www.sunyouqun.com/2017/04/page/3/ 链路层LL(Link Layer)是协议栈中最重要的一层. 链路层的核心是状态机,包含广播.扫描.发起和连 ...
- 第10节-BLE协议链路层(LL)
本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和 ...
- TCP\IP协议实践:wireshark抓包分析之链路层与网络层
目录 TCP\IP协议实践:wireshark抓包分析之链路层与网络层 从ping开始 链路层之以太网封装 ip首部 开启ping程序,开始抓包 由一个ping的结果引出来的两个协议ARP ICMP ...
随机推荐
- TKMybatis
TKMybatis与Mybatis-plus都是mybatis的扩展,有相同的地方,也有不同的地方. 1.导入坐标 <!--mybatis依赖--> <dependency> ...
- 基于docker搭建DNSmasq
一.概述 DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能.它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出 ...
- nacos服务注册与发现之客户端
服务注册 1.1 NamingService.registerInstance的方法为客户端提供的服务注册接口 1.2 客户端通过调用NamingService.registerService上报到n ...
- webstorm2020.3安装破解教程
免责声明:本教程及相关附件仅限于学术交流,不能用于商业以及违法用途,请于下载后24小时内删除!如产生法律纠纷,一切与本人无关,呼吁各位小伙伴支持下正版软件.本文如有侵权,请联系小编删除之. 该操作是用 ...
- WPF 应用 - 通过 js 缩放 System.Windows.Controls.WebBrowser 的内容
1. 前提 原本是在大屏上展示系统,系统有个功能是加载第三方的网站,第三方网站按照大屏的分辨率写死了宽高: 现需要改到小屏展示系统,而这个第三方的网站不能随着 WebBrowser 窗口的尺寸调整网站 ...
- POJ_2533 Longest Ordered Subsequence 【LIS】
一.题目 Longest Ordered Subsequence 二.分析 动态规划里的经典问题.重在DP思维. 如果用最原始的DP思想做,状态转移方程为$DP[i] = max(DP[j] + 1) ...
- POJ_2065 SETI 【同余高斯消元】
一.题目 SETI 二.分析 给定一个模数,一串字符串,字符串长度为N,相当于是N个方程的答案,而这N个方程中有N个未知数,要求的就是这N个未知数的值,很显然的高斯消元,遇到模数和除法,用逆元就好. ...
- git提交本地文件到远程仓库及参与的项目仓库
1.git提交本地文件到组织 1.先再组织中建立个用于存放文件的仓库建然后复制仓库地址: 2.进入要上传的文件的根目录下右击 git Bash 进入git控制台,我要上传的文件如下: 3.进入后: 1 ...
- 痞子衡嵌入式:盘点国内MCU级RISC-V内核IP厂商
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内MCU级RISC-V内核IP厂商. 自RISC-V指令集2010年诞生以来,业界普遍认为,RISC-V将会改变现有的由Arm和Int ...
- Baolu Aggregate TPS Report
1.说明 这是一个基于JMeter官方的Aggregate Report的监听器改进而来的监听器!!! 2.插件背景 早在很久之前,宝路就曾经改造过JMeter的Aggregate Report 的源 ...