主要内容

蓝牙报文结构

蓝牙®特殊兴趣小组(SIG)[1]而且[2]定义了蓝牙低能(LE)和蓝牙基本速率/增强数据速率(BR/EDR)设备的不同数据包结构。

蓝牙LE报文结构

蓝牙LE包的比特排序

在基带规范中定义包和消息时,位顺序遵循小端序格式。在这种格式中,这些规则适用:

  • 最低有效位(LSB)对应b0

  • LSB是通过空中发送的第一个比特。

  • 在说明数据包结构时,LSB显示在左侧。

此外,在基带级别内部生成的数据字段(数据包头和有效载荷头长度)必须首先通过LSB传输。例如,一个3位参数被发送为:b0b1b2= 110,其中1先发送,0最后发送。

蓝牙LE设备使用数据包格式:蓝牙LE非编码物理层(PHY),蓝牙LE编码PHY,广告物理通道PDU,数据物理通道PDU,恒定音调扩展和同相正交(IQ)采样

请注意

有关蓝牙LE包结构的更多信息,请参见蓝牙核心规范第6卷B部分第2节[2]

蓝牙LE非编码物理层(PHY)

蓝牙核心规格[2]为未编码的物理层(PHY)定义了两种物理层传输模式(LE 1M和LE 2M)。该图显示了在LE 1M和LE 2M上运行的蓝牙LE未编码PHY的包结构。

运行在le1m和le2m上的蓝牙LE非编码PHY的包结构

每个报文包含4个必填字段(preamble、access-address、PDU (protocol data unit)、CRC (cyclic redundancy check))和1个可选字段(constant tone extension (CTE))。首先传输序文,然后依次传输访问地址、PDU、CRC和CTE(如果存在)。整个数据包以1 Msym/s或2 Msym/s相同的符号速率传输。

序言。所有LL (link layer)报文都包含一个前导,用于接收机进行频率同步、AGC (automatic gain control)训练和符号定时估计。序文是一个0和1位交替的固定序列。在le1m PHY和le2m PHY上传输的蓝牙LE报文,前导字节大小分别为1字节和2字节。

访问地址。访问地址是一个4字节的值。任意两个设备之间的每个LL连接和每个周期性的广告列车都有一个不同的访问地址。每次蓝牙LE设备需要一个新的访问地址时,LL会根据以下要求生成一个新的随机值:

  • 该值不能是此设备上任何已存在LL连接的访问地址。

  • 不能为已启用的周期广告列的访问地址。

  • 连续的1或0不能超过6个。

  • 不能为任何发布通道报文的访问地址。

  • 序列与发布物理通道报文的访问地址不能相差1位。

  • 值的四个字节不能全部相等。

  • 该值在最有效的6位中必须至少有两次转换。

如果随机值不满足上述要求,则生成一个新的随机值,直到满足所有要求。

PDU。当蓝牙LE报文在主、次发布物理信道或周期物理信道上传输时,PDU被定义为广告物理通道PDU.当报文在数据物理通道上传输时,PDU被定义为数据物理通道PDU

CRC。CRC的大小为3个字节,在所有LL包的PDU上计算。如果PDU被加密,则在PDU加密完成后计算CRC。CRC多项式有这样的形式x24+x10+x9+x6+x4+x3.+x+ 1。

有关CRC生成的更多信息,请参见蓝牙核心规范第6卷B部分第3.1.1节[2]

CTE。CTE由一系列不断调制的非白化1组成。该字段具有可变长度,范围从16µs到160µs。

有关CTE的更多信息,请参见蓝牙核心规范第6卷B部分第2.5.1节[2]

请注意

有关蓝牙LE非编码PHY包结构的更多信息,请参阅蓝牙核心规范第6卷B部分2.1节[2]

蓝牙LE编码PHY

该图显示了蓝牙LE编码PHY的包结构,并在所有物理通道上实现了蓝牙LE包。

蓝牙LE编码PHY的包结构

每个蓝牙LE包由一个序文和以下两个前向纠错(FEC)块组成:

  • FEC块1 -该块包含三个字段:访问地址、编码指示器(CI)和TERM1。此块实现了年代=8编码方案,每个比特代表8个符号。这提供了125 Kbps的数据速率。

  • FEC块2 -该块包含三个字段:PDU、CRC和TERM2。此块实现了年代= 8或年代=2编码方案。在年代=2编码方案,每一位代表两个符号。因此,数据速率为500kbps。

蓝牙LE编码的PHY不包含CTE。

序言。蓝牙LE编码的PHY序文长度为80个符号,包含符号模式'00111100'的10个重复(按传输顺序)。

访问地址。蓝牙LE编码的PHY访问地址长度为256个符号。有关更多信息,请参见访问地址.的访问地址小节中所列的要求之外蓝牙LE非编码物理层(PHY)节中,蓝牙LE编码PHY的访问地址的新值也必须满足这些要求:

  • 该值的最后有效位至少有3个1。

  • 该值在最低有效的16位中转换不超过11个。

CI。CI字段由两位组成,如下表所示:

CI位 描述
00 b

FEC块2编码使用年代= 8

01 b

FEC块2编码使用年代= 2

所有其他值

保留以后使用

PDU。蓝牙LE编码的PHY报文结构中的PDU格式与PDU在蓝牙LE未编码PHY包中。

CRC。蓝牙LE编码的PHY报文结构中的CRC格式与儿童权利公约在蓝牙LE未编码PHY包中。

TERM1和TERM2。每个FEC块在块的末尾包含一个终止符。该终止符被称为TERM1和TERM2。每个终止符长3位,在FEC编码过程中形成终止序列。

请注意

有关蓝牙LE编码的PHY包结构的更多信息,请参见蓝牙核心规范的第6卷,第B部分,第2.2节[2]

广告物理通道PDU

发布物理通道PDU的报文结构格式如图所示。

发布物理通道PDU的报文结构格式

发布物理通道PDU具有16位报头和可变大小的有效负载。广告物理通道PDU的16位报头字段如图所示。

发布物理通道PDU的16位报头字段的包结构

广告通道PDU报头中的PDU类型字段定义了可以在蓝牙LE编码的PHY上传输的不同类型的PDU。该表将不同类型的pdu与可能出现蓝牙LE报文的物理通道和物理节点进行映射。该表还显示了每种类型的广告物理通道PDU所支持的PHY传输模式。金宝app

PDU类型 PDU的名字 物理信道 LE 1M支金宝app架 LE 2M支金宝app持 LE编码支持金宝app
0000 b

ADV_IND

主要的广告

是的

0001 b

ADV_DIRECT_IND

主要的广告

是的
0010 b

ADV_NONCONN_IND

主要的广告

是的

0011 b

SCAN_REQ

主要的广告

是的

AUX_SCAN_REQ

二次广告

是的

是的

是的

0100 b

SCAN_RSP

主要的广告

是的

0101 b

CONNECT_IND

主要的广告

是的

AUX_CONNECT_REQ

二次广告

是的

是的

是的

0110 b

ADV_SCAN_IND

主要的广告

是的

0111 b

ADV_EXT_IND

主要的广告

是的

是的

AUX_ADV_IND

二次广告

是的

是的

是的

AUX_SCAN_RSP

二次广告

是的

是的

是的

AUX_SYNC_IND

周期

是的

是的

是的

AUX_CHAIN_IND

二次广告及定期广告

是的

是的

是的

1000 b

AUX_CONNECT_RSP

二次广告

是的

是的

是的

所有其他值

保留以后使用

RFU字段保留给将来使用。的ChSel,TxAdd,RxAdd发布物理通道PDU报头的字段包含特定于为每个发布物理通道PDU分别定义的PDU类型的信息。如果ChSel,TxAdd,或RxAdd字段没有被定义为在给定的PDU中使用,那么它们被认为是为将来使用而保留的。

长度PDU报头的字段表示有效负载的长度(以字节为单位)。Length字段的有效范围是1 ~ 255个字节。

有效载荷PDU报文结构根据上表中列出的PDU类型而定。

请注意

有关发布物理通道pdu的更多信息,请参见蓝牙核心规范的第6卷,B部分,第2.3节[2]

数据物理通道PDU

数据物理通道PDU的报文结构格式如图所示。

数据物理通道PDU的报文结构格式

数据物理通道PDU具有16位或24位报头,一个范围为[0,251]字节的可变长度有效负载,并且可以包括一个32位消息完整性检查(MIC)字段。MIC不包含在未加密的LL连接中,也不包含在包含空有效负载的数据通道PDU的加密LL连接中。MIC包含在一个加密的LL连接中,其数据通道PDU包含一个非零长度的有效载荷。在这种情况下,MIC按照蓝牙核心规范第6卷E部分第1节的规定计算[2]

数据物理通道PDU的报头字段如图所示。

数据物理通道PDU报头字段的包结构

数据物理通道PDU头包含以下字段:

  • LLID (Link layer identifier) -该字段表示报文是LL数据PDU还是LL控制PDU。

    • 00 b-保留以后使用

    • 01 b—LL数据PDU,可以是L2CAP (logical link control and adaptation)消息的延续片段,也可以是空PDU

    • 10 b—LL数据PDU,可以是L2CAP消息的开始,也可以是不分片的完整L2CAP消息

    • 11 b- LL控制PDU

  • NESN (Next expected sequence number):接收端使用该字段确认对端发送的最后一个数据物理通道PDU,或者请求对端重发最后一个数据物理通道PDU。关于NESN的更多信息,请参见《蓝牙核心规格书》第6卷B部分第4.5.9节[2]

  • SN (Sequence number): LL使用该字段标识其发送的蓝牙LE报文。关于SN的详细信息,请参见《蓝牙核心规范》第6卷B部分第4.5.9节[2]

  • More data (MD):表示蓝牙LE设备有更多的数据要发送。如果中心和外围蓝牙LE设备都没有在它们的数据包中设置MD位,来自外围设备的数据包将关闭连接事件。如果中央设备和外围设备都设置了MD位,中央设备可以通过发送另一个数据包继续连接事件,外围设备必须在发送数据包后监听。有关MD的更多信息,请参见第6卷,B部分,蓝牙核心规范的第4.5.6节[2]

  • CTEInfo present (CP):该字段表示数据物理通道PDU头是否有CTEInfo字段,进而表示数据物理通道数据包是否有CTE。有关CTEInfo字段的报文结构的详细信息,请参见蓝牙核心规范第6卷B部分第2.5.2节[2]

  • 长度:该字段表示有效负载和MIC(如果存在)的大小(以字节为单位)。该字段的大小范围是[0,255]个字节。

  • CTEInfo: CTE的类型和长度。

数据物理通道pdu有两种类型:LL数据PDU而且LL控制PDU

LL数据PDU。LL使用LL数据PDU发送L2CAP数据。将LL数据通道PDU报头中的LLID字段设置为任意一个01 b10 b.如果出现以下情况,则将一个LL数据PDU称为空PDU

  • 日志含义设置LL数据通道PDU头的LLID字段为01 b

  • LL数据通道PDU报头的Length字段设置为00000000 b

一个LL数据PDU,头中的LLID字段设置为10 b长度字段没有设置为00000000 b

LL控制PDU。LL使用LL数据PDU控制LL连接。如果将数据物理通道PDU header的LLID字段设置为11 b,数据物理通道PDU包含LL控制PDU。该图显示了LL控制PDU负载。

LL控制PDU负载的报文结构

Opcode字段定义了不同类型的LL控制pdu,如本表所示。

操作码 LL控制PDU
0 x00

LL_CONNECTION_UPDATE_IND

0 x01

LL_CHANNEL_MAP_IND

0 x02

LL_TERMINATE_IND

0 x03

LL_ENC_REQ

0 x04

LL_ENC_RSP

0 x05

LL_START_ENC_REQ

0 x06

LL_START_ENC_RSP

0 x07

LL_UNKNOWN_RSP

(

LL_FEATURE_REQ

0 x09

LL_FEATURE_RSP

0 x0a

LL_PAUSE_ENC_REQ

0 x0b

LL_PAUSE_ENC_RSP

0 x0c

LL_VERSION_IND

0 x0d

LL_REJECT_IND

0 x0e

LL_SLAVE_FEATURE_REQ

0 x0f

LL_CONNECTION_PARAM_REQ

0 x10

LL_CONNECTION_PARAM_RSP

0 x11

LL_REJECT_EXT_IND

0 x12

LL_PING_REQ

0 * 13

LL_PING_RSP

0 x14

LL_LENGTH_REQ

0连接

LL_LENGTH_RSP

0 x16

LL_PHY_REQ

0 x17

LL_PHY_RSP

0 x18

LL_PHY_UPDATE_IND

0 x19

LL_MIN_USED_CHANNELS_IND

0 x1a

LL_CTE_REQ

0 x1b

LL_CTE_RSP

0 x1c

LL_PERIODIC_SYNC_IND

0 x1d

LL_CLOCK_ACCURACY_REQ

0 x1e

LL_CLOCK_ACCURACY_RSP

所有其他值

保留以后使用

LL控件PDU中的CtrData字段是特定于Opcode字段的值。有关不同的LL控制pdu及其对应的CtrData字段结构的更多信息,请参见蓝牙核心规范第6卷B部分第2.4.2.1节至2.4.2.28节[2]

恒定音调扩展和同相正交(IQ)采样

CTE的长度是可变的,范围为[16,160]µs。该字段包含一个不断调制的1系列,没有使用美白。CTE有两种类型:传输时天线切换(AoD)和接收时天线切换(AoA)。接收端接收到包含AoD CTE的报文时,不需要切换天线。接收端接收到包含AoA CTE的报文时,根据主机配置的切换方式进行天线切换。在这两种情况下,接收机在参考周期内每微秒取一个IQ样本,每个样本槽取一个IQ样本。控制器向主机上报IQ采样。接收者对整个CTE进行采样,而不管它的长度,除非它与其他活动冲突。有关CTE的更多信息,请参见蓝牙核心规范第6卷B部分第2.5.1至2.5.3节[2]

当主机请求时,接收端在接收到带有CTE的有效蓝牙LE包时进行IQ采样。但是,当接收到一个带有CTE和错误CRC的蓝牙LE包时,接收器可能会进行IQ采样。有关IQ采样的更多信息,请参见蓝牙核心规范第6卷B部分第2.5.4节[2]

请注意

有关数据物理通道pdu的更多信息,请参见蓝牙核心规范第6卷B部分第2.4节[2]

蓝牙BR/EDR报文结构

蓝牙BR/EDR报文中的比特排序

蓝牙BR/EDR报文的比特顺序与蓝牙BR/EDR报文的比特顺序相同蓝牙LE包的比特排序

蓝牙BR/EDR设备使用数据包格式:BR模式,功能模式,访问代码,包的头,分组类型,有效负载格式

请注意

有关蓝牙BR/EDR数据包结构的更多信息,请参见蓝牙核心规范第2卷B部分第6节[2]

一般格式

BR模式。蓝牙BR报文的一般格式如图所示。每个数据包由这些字段组成:访问码(68或72位)、报头(54位)和范围为[0,2790]位的有效载荷。

蓝牙BR报文的报文结构

蓝牙核心规格[2]定义不同类型的包。数据包可以由以下内容组成:

  • 只有缩短的访问代码

  • 访问码和包报头

  • 访问码,包头和有效载荷

功能模式。蓝牙EDR报文的一般格式如图所示。

蓝牙EDR报文的报文结构

接入码和报文报头字段的格式和调制方式与BR报文类似。在报头字段之后,EDR数据包的保护时间范围为[4.75,5.25]µs,同步序列(11µs),有效载荷范围为[0,2790]位,以及拖车(两个符号)字段。

访问代码

每个数据包都以访问代码开始。如果后面有数据包头,则访问码为72位长。否则接入码长度为68位。在这种情况下,访问代码被称为a缩短访问代码.缩短的访问代码不包含拖车。访问码用于同步、直流偏移补偿和识别物理通道上交换的所有数据包。缩短的访问码用于寻呼和查询。在这种情况下,访问代码本身被用作信令消息,既不存在报头也不存在有效负载。该图显示了接入码的包结构。

接入码的包结构

不同的访问码类型使用不同的下地址部分(lap)来构造同步字。此表中显示了不同接入码类型的摘要。

接入码类型 腿上 接入码长度(位) 描述
信道接入码(CAC) 中央 72

此访问代码用于连接状态、同步训练子状态和同步扫描子状态。它来源于中央的LAPBD_ADDR

设备接入码(DAC) 分页设备 68或72

此访问代码在页面、页面扫描和页面响应子状态期间使用。它派生自分页设备的BD_ADDR

专用查询访问码(DIAC) 专用的 68或72

此访问代码在查询子状态中用于专用的查询操作。

一般查询访问码(GIAC) 保留 68或72

此访问代码在查询子状态中用于一般查询操作。

对于DAC、DIAC和GIAC接入码类型,72位的接入码长度仅配合FHS (frequency hopping sequence)报文使用。当用作没有报头的自包含消息时,DAC、DIAC和GIAC不包括尾部位,长度为68位。

CAC由序言、同步词和预告片组成。

  • 序言:这是一个固定的4符号模式的1和0,方便直流补偿。如果以下同步字的LSB为10,序文序列为10100101(按传输顺序),分别。

  • 同步字:由24位的LAP地址衍生而来的64位码字。该结构保证了基于不同LAPs的同步字之间的大汉明距离。同步字的自相关特性提高了时序采集。

  • 尾部:当数据包头跟在访问码后面时,它就被追加到同步字后面。拖车是一个固定的4符号模式的1和0。拖车与同步字的三个msb一起形成一个交替的1和0的7位模式,用于扩展直流补偿。预告片是两者之一10100101(传输顺序)取决于同步字的MSB是否为01,分别。

请注意

有关蓝牙BR/EDR中的访问码的更多信息,请参见蓝牙核心规范第2卷B部分第6.3节[2]

包的头

蓝牙BR/EDR包头的结构如图所示。

蓝牙BR/EDR报头字段的报文结构

该表对报文报头字段进行了简要描述。

报头字段 字段大小(位) 描述
逻辑传输地址 3.

该字段表示中央到中央传输槽位数据包的目的外设,表示中央到中央传输槽位的源外设。

类型 4

该字段指定使用的数据包类型。蓝牙核心规格[2]定义了16种不同类型的BR/EDR报文。该字段的值取决于报文中LT_ADDR字段的值。该字段决定当前报文占用的槽数。

流量控制(Flow) 1

该字段用于实现ACL (asynchronous connection-oriented logical)传输中BR/EDR报文的流量控制。当ACL逻辑传输的接收缓冲区已满时,返回'STOP'指示(FLOW = 0)以暂时停止其他设备传输数据。当接收缓冲区可以接受数据时,返回一个“GO”指示(FLOW = 1)。

自动重复请求数(ARQN) 1

该字段通知数据源与CRC之间有效负载数据的成功传输。这个字段是为将来在无连接外设广播(CSB)逻辑传输上使用而保留的。

序列号(SEQN) 1

该字段提供了一个顺序编号方案来对数据包流进行排序。这个字段是为将来在CSB逻辑传输上使用而保留的。

报头错误检查 8

该字段检查数据包头的完整性。在生成HEC之前,用一个8位值初始化HEC生成器。这8位对应于上地址部分(UAP)。初始化后,HEC生成器计算10个报头位的HEC值。在检查HEC之前,接收器用适当的8位UAP初始化HEC检查电路。如果HEC不检查报文头完整性,则整个报文将被丢弃。

请注意

有关蓝牙BR/EDR中使用的包头的更多信息,请参见蓝牙核心规范第2卷B部分第6.4节[2]

分组类型

微微网中使用的包与使用它们的逻辑传输有关。

  • 面向同步连接(SCO):这是一种电路交换连接,在中心和特定外设之间预留插槽。

  • 扩展SCO (eSCO):与SCO类似,它在中央和特定的外围设备之间保留插槽。eSCO支金宝app持在预留插槽之后的重传窗口。预留插槽和重传窗口一起构成完整的eSCO窗口。

  • ACL:它在中心和所有参与微微网的活动外设之间提供包交换连接。ACL支金宝app持异步服务和同步服务。在中心和外围设备之间,只有一个ACL逻辑传输必须存在。

  • CSB:用于将配置文件广播数据从一个中心传输到多个外围设备。CSB逻辑传输不可靠。

该表汇总了SCO、eSCO、ACL和CSB逻辑传输类型定义的报文。

请注意

“D”后面的列项仅表示数据字段。“C.1”表示启用AES-CCM加密时,MIC值是必须的。否则排除MIC。有关蓝牙BR/EDR中使用的不同数据包类型的更多信息,请参阅蓝牙核心规范的卷2,B部分,章节6.5和6.7[2]

包类型 类型代码 槽入住率 有效载荷头(字节) 用户有效负载(字节) 选举委员会 麦克风 儿童权利公约 支持的逻辑传输类型金宝app
ID N/A 1 N/A N/A N/A N/A N/A N/A
0000 1 N/A N/A N/A N/A N/A SCO, eSCO, ACL, CSB
民意调查 0001 1 N/A N/A N/A N/A N/A SCO, eSCO, ACL
FHS 0010 1 N/A 18 2/3 N/A 是的 上海合作组织,ACL
DM1 0011 1 1 0 17 2/3 C.1 是的 Sco, acl, CSB
0100 1 1 0-27 没有 C.1 是的 ACL,公务员事务局
DM3 1010 3. 2 0 - 121 2/3 C.1 是的 ACL,公务员事务局
DH3 1011 3. 2 0 - 183 没有 C.1 是的 ACL,公务员事务局
DM5 1110 5 2 0 - 224 2/3 C.1 是的 ACL,公务员事务局
DH5 1111 5 2 0 - 339 没有 C.1 是的 ACL,公务员事务局
2-DH1 0100 1 2 0-54 没有 C.1 是的 ACL,公务员事务局
2-DH3 1010 3. 2 0 - 367 没有 C.1 是的 ACL,公务员事务局
2-DH5 1110 5 2 0 - 679 没有 C.1 是的 ACL,公务员事务局
3-DH1 1000 1 2 0 - 83 没有 C.1 是的 ACL,公务员事务局
3-DH3 1011 3. 2 0 - 552 没有 C.1 是的 ACL,公务员事务局
3-DH5 1111 5 2 0 - 1021 没有 C.1 是的 ACL,公务员事务局
HV1 0101 1 N/A 10 1/3 没有 没有 上海合作组织
HV2 0110 1 N/A 20. 2/3 没有 没有 上海合作组织
HV3 0111 1 N/A 30. 没有 没有 没有 上海合作组织
DV 1000 1 1 D 10 + D (0 - 9) 2/3 D 没有 是的D 上海合作组织
EV3 0111 1 N/A 没有 没有 是的 能源管理公司
EV4 1100 3. N/A 1 - 120 2/3 没有 是的 能源管理公司
EV5 1101 3. N/A 1 - 180 没有 没有 是的 能源管理公司
2-EV3 0110 1 N/A 1-60 没有 没有 是的 能源管理公司
2-EV5 1100 3. N/A 1 - 360 没有 没有 是的 能源管理公司
3-EV3 0111 1 N/A 1 - 90 没有 没有 是的 能源管理公司
3-EV5 1101 3. N/A 1 - 540 没有 没有 是的 能源管理公司

有效负载格式

蓝牙核心规格[2]定义了两种类型的负载字段格式:同步数据字段(用于ACL报文)和异步数据字段(用于SCO和eSCO报文)。然而,DV数据包同时包含同步和异步数据字段。

  • 同步数据字段:SCO只支持BR模式,同步数据字段的长度是固定的。金宝app同步数据字段仅包含同步数据主体部分,并且没有有效载荷标头。在BR eSCO中,同步数据字段由这两个部分组成:同步数据体和CRC代码。在本例中,不存在有效负载报头。在EDR eSCO中,同步数据字段由保护时间、同步序列、同步数据主体、CRC代码和拖尾组成。在本例中,不存在有效负载报头。

  • 异步数据字段:路由ACL报文有一个异步数据字段,由负载头、负载体、MIC(如果适用)和CRC(如果适用)组成。该图显示了BR单槽ACL报文的8位负载头格式。

    BR单槽ACL报文的8位有效载荷头格式的报文结构

    EDR ACL包具有一个异步数据字段,由保护时间、同步顺序、有效载荷头、有效载荷体、MIC(如果适用)、CRC(如果适用)和尾部组成。该图显示了EDR多槽ACL包的16位有效载荷报头格式。

    EDR多槽ACL包的16位有效载荷头格式的包结构

    请注意

    有关有效载荷格式的更多信息,请参阅蓝牙核心规范的卷2,B部分,章节6.6.1和6.6.2[2]

参考文献

[1]蓝牙技术网站。“蓝牙技术网站|蓝牙技术官网。”2021年11月22日访问。https://www.bluetooth.com/

[2]蓝牙SIG (Bluetooth Special Interest Group)。“蓝牙核心规范。”5.3版。https://www.bluetooth.com/

相关的话题