我是靠谱客的博主 激情毛衣,最近开发中收集的这篇文章主要介绍蓝牙基础知识进阶——Packet解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述



包的格式解析

   在分析其它问题之前,我们需要了解在空气中传播的数据包的格式,这样才能深刻理解我们能通过格式中的各个部分做些什么。

Q1PACKET的基本格式是什么样子的

之前我们提到蓝牙传输有两种rate,不同的rate其格式是不同的,我们分别来看一下。

Basic Rate

Basic Rate的包格式如下图6-1所示:

6-1 Basic Ratepacket通用格式

从图中可以看到基本可以分为三个部分:

ACCESS CODE:长度是68或者72bit,当HEADER域没有的话就是68,否则就是正常的72bit。他是用来同步和DC偏移补偿的。更通俗地来讲他是同一个piconet上的标志,也就是一个piconet上(即同一个物理通道上)传输的packetACCESS CODE是相同的。

HEADER:包含用于链路控制的信息。

PAYLOAD:就是信息内容,他的大小最大是2745bit

总得来说,一个Basic Ratepacket可以由上面三者的以下组合组成:

1)ACCESS CODE;2)ACCESS COED + HEADER; 3)ACCESS CODE + HEADER + PAYLOAD;

 

Enhanced Data Rate

Enhanced Data Rate的包格式如下图6-2所示:

6-2 EnhancedData Rate的包格式

这里的ACCESS CODEHEADER是和Basic Rate一样的。事实上,我们可以理解为后面的都是payload的部分,只不过在payload部分,我们强制使用了一些头和尾的内容。

Guard保护间隔,它要来表示HEADER的结尾到SYNC开始之间的时间。范围是4.75μs5.25μs

Sync同步序列,DPSK使用的同步序列。

Enhanced data rate payload对应的负载。

Trailerpayload的尾,其实他们都是0,对π/4 DQPSK调制而言是0000,对8DPSK的调制而言是000,000.

其实对于同步的数据而言,在payload的最后还有一个16bitCRC校验,大家知道就可以了。

Q2Header域都有哪些link控制的信息啊

Header域是很重要的,它包含了很多链路控制的信息,不过总得来说,可以总结为6个部分,如下图6-3

6-3 Header域的结构示意图

各个部分的含义如下:

LT_ADDR:3bit的逻辑传输地址,他是用来表示master是把这个包发给哪一个slave的。或者这个包是从哪个slave发送过来的。

TYPE:表示packet的类型。。

FLOW:是流控位,只有在ACL逻辑传输的时候才会使用,当RX buffer满的时候,就会把这个位置0,表示stop。当buffer又空了之后,就会把这个位置为1告诉TX可以继续发送了。需要注意的是ACL-C以及SCO,ESCO是不能使用这个位的。

ARQN:是用来告知tx放,payload是成功传输的,就是通过了CRC校验。

SEQN:就是数据流的sequence number

HEC:就是前向纠错。

Q3:上文提到的packet类型能否简单介绍一下

我们会把这些packet分为几个部分来简单介绍,首先是5common packet type

ID Packet这个packet就是上文提到的只有ACCESSCODE那一种packet。我们之后提到的inquiry msg就是一个ID Packet

NULL Packet这个packet只有ACCESS CODEHEADER。一般来说他是用来返回链路信息的,比如什么rx buffer状态,或者ARQN之类的。他不需要对端的确认。

POLL PacketNULL Packet是类似的,比较大的差别就在于它需要对端回确认信息。需要注意的是不能会POLL Packet,否则就没玩没了。

FHS Packet这个包的特别之处在于他包含了发送的clk信息和address信息,在page等开始的同步过程中起到了很大的作用。

DM1 Packet:这个packet的特别之处在于所有逻辑链路的控制信息都需要允许这种包,不过他也能传输data,不过仅限于ACL链路中,从一定程度上来说,可以认为他是一种ACLpacket

接着我们来看4种类型的SCOPacket。这四种类型总得来说分为两大类,分别是DVHVpacket。他们的差别在于:HV是没有CRC并且不重传,DVdata域有CRC,但是在同步数据域没有,data域的数据应当重传

HV Packet有可以分为HV1HV2HV3三种类型,HV1HV2HV3就是1/3,2/3/,以及没有FEC纠错,他们均没有crc,长度是固定的30byte,所以HV1就是10byte的有效数据,HV2就是20byte的有效数据,HV3就全部都是有效数据

DV packet是由10bytedata150bitvoice域组成,voice域没有FEC纠错,data域是1~10byte长度加上16bitcrc,他们都是2/3FEC。所以就是96/3*2,就是144bitVoice域不能重传,data域是有校验的,所以可以重传。所示没有ack,也是需要重传的

下面我们来看一下7eSCOpacket类型。这七种根据BasicRateEnhanced Data Rate有可以分为两个部分,对Basic Rate而言,有以下三种packet的类型:EV3EV4EV5

EV31~30byte,加上16bitcrc,无FEC

EV41~120byte,加上16bit crc,然后是2/3FEC

EV51~180byte加上16bitcrc,无FEC

Enhanced Data Rate而言就是还有四种packet会被使用:

2-EV3,2-EV5和上面EV3EV5的差别在于,使用π/4DQPSK进行调制。

3-EV3,3-EV5和上面EV3EV5的差别在于,使用8DPSK进行调制。

最后我们看一下ACL上传输的packet类型,同样可以分为BasicRateEnhanced Data Rate两个部分。

Basic Rate有以下几种类型的packet

DM1就是1~18byte,加16bitcrc,然后又2/3FEC

DH1:DH1相比DM1而言,没有FEC,所以长度也可以长一点

DM3:2byte123byte的长度,加16bitcrc,然后有2/3FEC

DH3DM3类似,就是没有FEC纠错

DM52~226byte16bitcrc校验,信息价crc校验有一个2/3FEC纠错

DH5DM5类似,但是没有FEC的纠错

AUX1就是没有CRC校验的DH1

Enhanced Data Rate而言,又增加了几个类型,分别是2-DH1,2-DH3,2-DH5以及3-DH1,3-DH33-DH5,这个也是调制的差别,能理解吧,哈哈~~

Q4:这么多的packet类型,4bitTYPE位是如何来全部表示的啊

其实很简单啦,就是和逻辑传输的类型一起就可以判断了,具体的值见下图6-4

,大家一看就了解了哦。

6-4 packet的类型和type域值的对应关系表


若您觉得该文章对您有帮助,请直接按顶,哈哈~~

最后

以上就是激情毛衣为你收集整理的蓝牙基础知识进阶——Packet解析的全部内容,希望文章能够帮你解决蓝牙基础知识进阶——Packet解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部