【原创】BLE的链路层2
目录
1,空口包的组成(Air Interface Packets)
2,前导序列(Preamble)
3,接入地址(Access Address)
4,协议数据单元(PDU)和CRC
5,Constant Tone Extension
6,前向纠错编码块:FEC Block1和FEC Block2
6.1,FEC block1/2的构成和特点
6.2,什么是FEC
7,编码指示(Coding Indicator)
8,结束符TERM1和TERM2
注:未经注明,本文讲述的均是蓝牙协议5.2。
1,空口包的组成(Air Interface Packets)
空口数据包有两种类型,一种是针对LE Uncoded PHY,另一种是针对LE Coded PHY。关于什么是Uncoded PHY,什么是Coded PHY,请参考本系列文章的物理层:
【原创】BLE的物理层_BoatOnMCU的博客-CSDN博客
注:上图均摘自《Bluetooth Core Specification》
接下来依次介绍空口数据包中的各个组成部分。
2,前导序列(Preamble)
Preamble是发送有用信号之前发送的一系列信号。Preamble的作用是提醒接收芯片,即将发送的是有效信号,注意接收,以免丢失有用信号。更具体一点就是协助接收芯片做频率同步、自动增益控制(AGC:Auto Gain Control)。BLE的Preamble就是一串01相间的固定长度的序列。对于不同的PHY, Preamble的长度是不一样。
LE 1M Uncoded PHY的Preamble是一个字节。
LE 2M Uncoded PHY的Preamble是两个字节。
LE Coded PHY的Preamble是80个字节。(发送十个00111100序列).
需要注意的是,不管PHY是Uncoded类型还是Coded类型,Preamble均是Uncoded。
3,接入地址(Access Address)
考虑到无线通信存在的噪音干扰和其他链路的干扰,就涉及了接入地址用来排除噪音和其他干扰数据包。接入地址是一个32位的地址,包含两种类型:
广播接入地址(广播数据,扫描或者发起连接)
数据接入地址(两个设备建立连接之后)
例如广播接入地址是一个固定值10001110100010011011111011010110b (0x8E89BED6) ,当接受到广播后验证接入地址正确后才认为他是个广播报文而不是噪音。而对于数据报文的接入地址则是在特定阶段随机产生的,不同的连接有不同的值,并且使用前,先通过PDU通知对端设备。
4,协议数据单元(PDU)和CRC
PDU包含的就是上层传给链接层的数据,CRC则是用于校验数据在传输过程中有没有错误。
BLE的空口包主要分成以下两大类型:
一类是广播信道PDU。这类PDU主要是用于广播信息、扫描及发起和建立连接。
另一类是数据信道PDU,这类PDU主要是用于承接链路层上层L2CAP的数据包,以及设置链路层的连接参数和控制连接关系的。
5,Constant Tone Extension
这个字段是可选字段,,是蓝牙5.1 新增的,最主要的功能是用于蓝牙方向测量。它的特点如下:
它是一个变长字段,它的时间长度是16us~160us。
它是LE Uncoded Phy特有的。
它不被CRC所覆盖。
它不能用于同步物理信道(Isochronous Physical Channel)的报文。
Constant Tone Externsion有两种类型AoA和AoD。这两种类型都是基于天线阵列来测量方位,其中AoA(Angle of Arrival)是到达角,AoD(angle of departure)是离开角。
AoD与AoA示意图
6,前向纠错编码块:FEC Block1和FEC Block2
6.1,FEC block1/2的构成和特点
前向纠错编码(FEC:Forward Error Correction)是专门针对Coded PHY的,其中FEC Block1包含Address code和CI及TERM1三个字段,FEC Block1固定的使用S=8的编码方式。FEC Block2则包含PDU、CRC和TERM2三个字段,编码方式由CI指定。(具体请看接下来的章节)
6.2,什么是FEC
FEC(forward error correction)就是前向纠错,网络数据传输时,难免出现数据包丢失等问题。数据传输出现丢包时,常用的传输方式有2种:丢包重传和前向纠错(FEC)。
丢包重传不必解释。FEC的处理方式是:发送方在发送数据时,在每个数据包中加一些冗余信息。这样即使有一定数据丢失,仍可根据冗余信息恢复出完整的有效数据。
7,编码指示(Coding Indicator)
这个字段是LE Coded PHY特有的,用来指示FEC Block 2的编码方式,是使用S=8,还是使用S=2。
注:上图摘自《Bluetooth Core Specification》
在S=2中,FEC编码使用卷积编码器,通过二分之一的码率输出数据位,即2个编码位代替原来一个数据位,这种编码方案下,理论有效数据传输速率降低为Uncoded方式的一半,在S=8中,通过卷积编码器以八分之一的码率输出数据,8个编码位代替原来一个数据位,理论有效数据传输速率为Uncoded的八分之一。
虽然Coded PHY的速度不及Uncoded PHY,但由于加强了纠错能力,提高了灵敏度,传输距离可以大大增加。
8,结束符TERM1和TERM2
TERM1和TERM2都是针对Coded PHY而言,它们分别是FEC Block1和FEC Block2的结束符。 每种结束符都有3bit。
版权声明
所有原创文章(未进行特殊标识的均属于原创) 的著作权属于本人
所有转载文章(标题注明[转]的所有文章) 的著作权属于原作者。
所有译文文章(标题注明[译]的所有文章) 的原文著作权属于原作者,译文著作权属于本人。
转载注意事项
除注明外,所有文章均采用 Creative Commons BY-NC-ND 4.0(自由转载-保持署名-非商用-禁止演绎)协议发布。
你可以在非商业的前提下免费转载,但同时你必须:
保持文章原文,不作修改。
明确署名,即至少注明 作者:BoatOnMCU 字样以及文章的原始链接,且不得使用 rel="nofollow" 标记。
商业用途请电话联系本人。
微信公众号转载一律不授权,除非联系本人并获得授权。
【原创】BLE的链路层2相关推荐
- BLE进阶——链路层(1)
BLE 的链路层,主要有一个或多个状态机构成,状态机有5中状态,分别是 standby(待机), advertise(广播), scan(扫描), init(初始化),connect(连接). 1. ...
- BLE 技术(三)--- 链路层七种状态与空口报文设计(Core_v5.2)
文章目录 一.LE Link Layer States 二.Link Layer Packet format 2.1 Advertising physical channel PDU 2.1.1 Pr ...
- ble l2cap 工作过程_BLE 链路层报文详解
报文结构 报文是构成链路层的基石.报文就是携带着标签的数据,有一个设备发送,其他设备接收. 报文结构 比特序列 数据按照字节传输时,总是从最低位开始传输的,例如0x01是1000000 多个字节组成的 ...
- BLE 链路层(LL)的数据结构
一 链路层的数据结构 在链路层上传输的数据格式如下图所示: 广播报文和数据报文都包含 Preamble(前导码), AccessAddress(接入地址),PDU(数据),CRC.其中Constant ...
- Linux内核--网络栈实现分析(三)--驱动程序层+链路层(上)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7497260 更多请看专栏,地址 ...
- 蚂蚁金服OceanBase挑战TPCC丨TPC-C基准测试之链路层优化
导语 在 TPC-C 标准定义中,测试系统分为 RTE(Remote Terminal Emulator)和 SUT 两部分.在实际的 TPC-C 测试流程中,不只是对 DB 端能力的考验,对链路中的 ...
- BLE4.2链路层(LL)安全机制-LL Privacy
本文主要是总结了BLE配对绑定后,二次连接时链路层的连接过程和在该过程中,蓝牙4.2所做的一些安全机制,主要包括蓝牙白名单和安全机制LL Privacy,LL Privacy主要是防止设备地址泄露,导 ...
- TI_BLE软件开发者指导4——链路层(笔记)
Texas Instruments CC2540/41 Bluetooth® Low Energy Software Developer's Guide v1.3.2 Document Number: ...
- 低功耗蓝牙学习笔记-链路层
声明:BLE低功耗蓝牙系列博客来自个人的学习总结,其中肯定会包含很多错误,如果发现欢迎帮忙指正.BLE内容比较多,我现在还没有完全学完,好在其分层设计,所以可以每学完一个部分就可以做相应的总结.需要说 ...
最新文章
- 某快手程序员爆料:给小厂随便投投简历,面试表现很差也能过,大厂背书确实有用!...
- AndroidManifest.xml文件详解(activity)(三)四种工作模式
- Js_学无止境之延迟加载
- 不停应用重启oracle数据库,此类情况下解决Oracle数据库重启的四种方案
- BZOJ3133[Baltic2013]ballmachine
- mysql from unixtime_mysql 错误总结 和FROM_UNIXTIME用法
- gRPC Web使用指南
- 设计模式--缺省适配模式
- 注册表和计算机用户名关系,IUSR_计算机名和IWAM_计算机名帐户的用户名和密码...
- 利用jquery的ajax获取后台返回的json数据为空
- 缓存jQuery对象来提高性能
- 午休,要有午休床,也要有毛毯
- 规则引擎如何实现生产调度系统
- Rplidar A2 屏蔽固定角度
- built a JNCIS LAB系列:Chapter 1 Autonomous System Paths v1.0
- linux swp文件是什么,SWP 文件扩展名: 它是什么以及如何打开它?
- 贝叶斯法则的举例分析
- 深度学习是表示学习的经典代表(浅谈什么是深度学习)
- 如何修改SnipeIT的部分设置
- apmserv mysql,APMServ MySQL 1577错误解决方法
热门文章
- 猜数字大小小游戏(低级)
- 电脑常见问题及及解决方法
- 华为eNSP配置文件传输FTP协议
- .MD语法入门,教你写好readme文档
- Redis基础入门及实战案例
- 发生了预料之外的错误: System.ArgumentException: 指定的 Visual 已经是另一个 Visual 的子级或者已经是 CompositionTarget 的根。 在 S
- mysql年月日时分秒格式化 DATE_FORMAT
- php数组赋值方式,php数组赋值方式
- 使用指南:巨量引擎橙子建站编辑器
- SVN报错解决:Error : Previous operation has not finished; run ‘cleanup‘ if it was interrupted.