蓝牙 V5.4 数据包格式学习记录

BLUETOOTH SPECIFICATION Version 5.4

1. 通用格式

1.1 基本速率包格式(BR)

访问码是72位或68位,包头是54位。有效载荷范围为0 ~ 2790位。

定义了不同的数据包类型。一个包可能包括:

  • 只使用缩短的访问码
  • 访问码和包头
  • 访问码、包头和有效载荷 

1.2 增强速率包格式(EDR)

访问码和包头在格式和调制方式上与基本速率包相同。

增强型数据速率包在包头后面有一个保护时间(GUARD)和同步序列(SYNC)。

载荷后面是尾部(Trailer)。

1.3 位序

小端模式:先发低位,后发高位。

2. 访问码(Access code)

每个数据包都以访问码开头。

  • 如果后面跟着报头,则访问码长度为72位,否则访问码长度为68位,称为缩短访问码。缩短的访问码不包含TRAILER。该访问码用于同步、直流偏移补偿和识别。
  • 访问码用于标识在同一物理通道上交换的所有报文,即在同一物理通道上发送的所有报文都以相同的访问码开头。
  • 在设备的接收器中,滑动相关器与接入码相关,并在超过阈值时触发。该触发信号用于确定接收时序。缩短的访问码用于分页和查询。在这种情况下,访问码本身被用作信令消息,既不存在标头也不存在有效负载。

访问码包括一个前缀(PREAMBLE),一个同步字(SYNC WORD),可能还有一个后缀(TRAILER),如图6.3。

 2.1 访问码类型

不同的访问代码类型使用不同的低地址部分(LAP)来构造同步字段。

  • CAC(channel access code):信道访问代码可在连接状态、同步列 子状态和同步扫描 子状态中使用,并形成在粒子网物理信道上交换的所有数据包的开始。通道访问码应来自中央的BD_ADDR的LAP。
  • DAC(device access code):设备访问代码在页面、页面扫描、中央页面响应和外围页面响应子阶段期间使用,并响应来自页面设备的BD_ADDR。
  • GIAC  (general inquiry access code):通用查询访问码*1
  • DIAC  (dedicated inquiry access code):专用查询访问码*63

访问码还向接收方指示数据包的到达。它用于定时同步和偏移补偿。接收器与访问码中的整个同步字相关联。

CAC由序言、同步字和结尾组成,总长度为72位。

当用作不带报头的自包含消息时,DAC和IAC不包括尾位,长度为68位。

2.1.1 蓝牙设备地址

每个蓝牙设备应该分配一个唯一的48位蓝牙设备地址(BD_ADDR)。地址应该是一个48位扩展唯一标识符(EUI-48),图1.5说明了LAP、UAP和NAP如何映射到EUI-48。图1.5中的位模式是一个BD_ADDR例子。

这个 48 位地址被分为三个部分

  • LAP 字段: 由 24 位构成的低地址部分
  • UAP 字段: 由 8 位构成的高地址部分
  • NAP 字段:由 16 位构成的非有效地址部分

 2.2 前缀(Preamble)

 前缀是“1010”或“0101”,这取决于后面的同步字的LSB分别是1还是0。

 2.3 同步字(Sync word)

同步字是源自24位地址(LAP)的64位码字;

  • 对于CAC,使用了中央的LAP;
  • 对于GIAC和DIAC,使用保留的专用LAP;
  • 对于DAC,使用外围LAP。
  • 一个较好的同步字自相关特性可以改善定时同步过程

2.4 后缀(TRAILER)

是“1010”或“0101”,这分别取决于同步单词的MSB是0还是1。

3. 包头(HEADER)

 包括HEC在内的总包头由18位组成,并以1/3 FEC(比例前向纠错)的速率编码产生54位报头。

  • AM_ADDR( 3 位):逻辑传输地址
  • TYPE (4 位):类型码
  • FLOW (1 位):流控制
  • ARQN (1 位):确认指示
  • SEQN (1 位):序列号
  • HEC (8 位):头错误校验

3.1 逻辑传输地址(LT_ADDR)

3位的LT_ADDR字段包含了分组的逻辑传输地址。这个字段表示了在一个主-从传输时隙中分组发送的目的地的从设备地址,并表示了一个从-主传输时隙的源从设备地址

3.2 类型码(TYPE)

可以有 16 种不同类型,对类型码的解释取决于与分组相关的物理链接类型。首先它需要确认分组是以SCO链接或是以ACL链接发送,其次它还需要确认是以SCO分组或以ACL分组接收,类型(TYPE)码确定了分组将占用多少个时隙,这种方法使得没有编址的接收设备在持续的剩余时隙不能进行监听

3.3 流控制(FLOW)

  • 当接收器中ACL逻辑传输的RX缓冲区已满时,应返回停止指示器(FLOW=0),以阻止其他设备暂时传输数据。停止信号只影响ACL数据包。仍然可以接收仅包含链路控制信息(ID、POLL和NULL数据包)、SCO数据包或eSCO数据包的数据包。
  • 当RX缓冲区可以接受数据时,应返回一个GO指示器(FLOW=1)。
  • 当没有接收到数据包或接收到的报头错误时,应隐式假定为GO。在这种情况下,外设可以接收一个带有CRC的新数据包,尽管它的RX缓冲区仍然没有被清空。然后,设备应响应该包,即使包通过了CRC检查。
  • 流量位不用于eSCO逻辑传输,在传输时设置为1,接收时忽略。流位保留在CPB逻辑传输上使用。

3.4 确认指示(ARQN)

表明使用CRC的有效载荷的正确传输,该确认指示可以是一个以ACK表示的有效确认或是一个以NAK表示的无效确认 。

3.5 序列号(SEQN)

提供一个序列号来排列分组流的顺序

3.6 头错误检验(HEC)

HEC由一个8位字组成,HEC生成器用8位值进行初始化,初始化后,HEC形成10位头。在校验HEC之前,接收装置必须以适当的8位UAP(或 DCI)来初始化HEC校验电路

4. 包类型

4.1 逻辑传输种类

piconet(微网)上使用的数据包与使用它们的逻辑传输相关。定义了四种具有不同数据包类型的逻辑传输种类

  • SCO (Synchronous Connection-Oriented):同步面向连接逻辑传输;同步逻辑传输是微网中主从之间点对点的逻辑传输。同步逻辑传输典型支持的类型就是像话音和一般的同步数据一样的实时信息。 主设备通过在常规的间隔中使用保留时隙来保持逻辑传输的同步,主设备最大支持 3 条SCO连接。而eSCO传输在保留时隙后有重传窗口
  • eSCO (Extended Synchronous Connection-Oriented ):扩展同步面向连接逻辑传输;主从设备间的点对点逻辑传输。它里边不使用保留时隙,主设备和任何一个从设备通过以单时隙为单位建立一个ACL逻辑传输, 包括在从设备已经有其他的同步逻辑传输的情况下,主设备和一个从设备之间只能存在一个ACL逻辑传输
  • ACL (Extended Synchronous Connection-Oriented ):异步面向连接逻辑传输
  • CPB (Connectionless Peripheral Broadcast):无连接的外设广播逻辑传输

4.2 通用包

4.2.1 ID包

ID数据包由设备访问代码(DAC)或查询访问代码(IAC)组成。固定长度为68位。因为没有包头,所以未在表6.2标出。

4.2.2 空包

NULL包没有有效负载,只由通道访问代码和包头组成。其总(固定)长度为126位。NULL数据包可用于向源返回关于上次传输成功(ARQN)或RX缓冲区(FLOW)的状态的链接信息。空数据包不需要确认。

4.2.3 POLL包

POLL 数据包与 NULL 数据包非常相似。它没有有效载荷(PAYLOAD)。与 NULL 数据包不同的是,它需要接收方确认。POLL 数据包不影响 ARQN 和 SEQN 字段。接收到 POLL 数据包后,外设即使外设没有任何信息要发送,外设也应响应一个数据包,除非外设在接收到 POLL 数据包后,在该时隙内有 Scatternet 任务。该返回数据包是对 POLL 数据包的隐式确认。Piconet 中的中心局可使用该数据包轮询外设。外设不得传输 POLL 数据包。POLL 数据包不得 在无连接外设广播逻辑传输上发送。

4.2.4 FHS 包

  • FHS包是一种特殊的控制包,包括蓝牙设备地址和发送设备的时钟。有效负载包含144个信息位和一个16位的CRC代码。有效载荷以2/3FEC的速率编码纠错,总有效载荷长度为240位。
  • FHS数据包用于页面主响应、查询响应和角色切换。FHS数据包未被加密。没有有效载荷报头或MIC存在。
  • FHS数据包包含实时时钟信息。此时钟信息应在每次重传输之前进行更新。
  • FHS有效负载的重传输不同于普通数据有效负载的重传输,其中每次重传输使用相同的重载。
  • FHS 数据包用于在 piconet 信道建立之前或现有 piconet 更改为新 piconet 时进行跳频同步。但是,无连接外设广播接收器在与无连接外设广播发射器进行跳频同步时不会使用 FHS 数据包。

4.2.5 DM1包

DM1是段1的一部分,以支持允许DM1数据包的任何逻辑传输中的控制消息。但是,它也可能携带常规的用户数据。DM1包可以被视为ACL包。

4.3 SCO包(同步面向连接包)

HV 和 DV 数据包用于同步 SCO 逻辑传输。HV 数据包不包含 MIC 或 CRC,且不得重传。

DV 数据包包括数据部分的 CRC,但不包括同步数据部分的 CRC。DV 数据包不包括 MIC。DV 数据包的数据部分必须重传。

SCO 数据包可路由至同步 I/O 端口。SCO 逻辑传输允许四个数据包: HV1、HV2、HV3 和 DV。这些数据包通常用于 64 kb/s 语音传输,但也可用于透明同步数据。启用 AES-CCM 加密时,不得发送 SCO 数据包。

4.3.1 HV1包

  • HV1数据包有10个信息字节。
  • 这些字节以速率为1/3的FEC进行保护。
  • 没有MIC存在。不存在CRC。
  • 有效载荷长度固定在240位。没有有效载荷标头

4.3.2 HV2包

  • HV2数据包有20个信息字节。
  • 这些字节以速率为2/3的FEC进行保护。
  • 没有MIC存在。不存在CRC。
  • 有效载荷长度固定在240位。没有有效负载头。

4.3.3 HV3包

  • HV3数据包有30个信息字节。
  • 这些字节不受FEC的保护。
  • 没有MIC存在。不存在CRC。
  • 有效载荷的长度固定在240位。没有有效载荷标头

4.3.4 DV包

  • DV 数据包是数据和语音的组合数据包。DV 数据包只能 用于替代 HV1 数据包。
  • 有效载荷分为 80 比特的语音字段和最多 150 比特的数据字段。位的语音字段和最多包含 150 位的数据字段,见图 6.10。语音字段不受 FEC 保护。
  • 数据字段有 1 到 10 个信息字节和 16 位 CRC 码。没有 MIC。数据字段(包括 CRC)采用速率为 2/3 的 FEC 编码
  • 由于 DV 数据包的内容是同步的,因此必须定期发送内容,因此将其列在 SCO 数据包类型下。
  • 语音和数据字段应 应分开处理:语音字段的处理方式应与正常的 SCO 数据相同且不得重传;数据字段将进行错误检查,必要时应重新传输。当在SCO逻辑传输终止前没有确认DV包中的异步数据字段时,应在DM1包中重新发送异步数据字段。

4.4 eSCO包

  • EV数据包用于同步eSCO逻辑传输。这些数据包包括CRC,如果在重传窗口内没有接收到正确的接收确认,则应重传。没有MIC。
  • ESCO数据包可以路由到同步I/O端口。
  • 定义了三种eSCO数据包类型(EV3、EV4、EV5)的基本速率操作和用于增强数据速率操作的另外四种ESCO数据包类型(2-EV3、3-EV3、2-EV5、3-EV5)。
  • eSCO数据包可用于64kb/s的语音传输以及64kb/s和其他速率的透传数据。

4.4.1 EV3包

  • EV3数据包有1到30个信息字节,再加上一个16位的CRC代码。没有MIC。这些字节不受FEC的保护。
  • EV3包最多可以覆盖一个时间隙。没有有效负载头。有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.4.2 EV4包

  • EV4数据包有1到120个信息字节加上一个16位的CRC代码。没有MIC。
  • EV4数据包可以覆盖多达三个时间槽。信息加上CRC位以2/3 FEC的速率进行编码。没有有效负载头。有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.4.3 EV5包

  • EV5数据包有1到180个信息字节加上一个16位的CRC代码。没有MIC。这些字节不受FEC的保护。
  • EV5数据包最多可以覆盖三个时间槽。没有有效负载头。有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.4.3 3-EV3包

  • 2-EV3包与EV3包相似,只是有效负载使用π/4-DQPSK进行调制。它有1到60个信息字节,再加上一个16位的CRC代码。
  • 没有MIC。这些字节不受FEC的保护。
  • 2-EV3包覆盖一个时间隙。没有有效负载头。有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.4.4 2-EV5包

  • 2-EV5包与EV5包相似,只是有效负载使用π/4-DQPSK进行调制。它有1到360个信息字节,再加上一个16位的CRC代码。没有MIC。这些字节不受FEC的保护。
  • 2-EV5数据包最多可覆盖三个时间槽。没有有效负载头。有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.4.5 3-EV3

  • 3-EV3包与EV3包相似,只是有效负载是使用8DPSK进行调制的。它有1到90个信息字节,再加上一个16位的CRC代码。没有MIC。这些字节不受FEC的保护。
  • 3- EV3包覆盖一个时间隙。没有有效负载头。这个有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.4.6 3-EV5

  • 3-EV5包与EV5包相似,只是有效负载是使用8DPSK进行调制的。它有1到540个信息字节,再加上一个16位的CRC代码。没有MIC。这些字节不受FEC的保护。
  • 3-EV5数据包最多可以覆盖三个时间槽。没有有效负载头。有效载荷长度是在LMP eSCO设置期间设置的,并保持固定,直到链接被删除或重新协商。

4.5 ACL包

  • ACL数据包用于异步逻辑传输和CPB逻辑传输。所携带的信息可以是逻辑传输的用户数据或异步逻辑传输的控制数据。
  • 为“基本速率”操作定义了六种数据包类型:DM1、DH1、DM3、DH3、DM5和DH5。
  • 为增强数据速率操作定义了6个数据包:2-DH1、3-DH1、2-DH3、3-DH3、2-DH5和3-DH5。
  • AUX1数据包也被定义为测试目的。有效载荷头中的长度指示符指定用户字节数(不包括有效载荷头、MIC和CRC代码)。

4.5.1 DM1包

  • DM1数据包只携带数据信息。
  • 有效负载有1到18个信息字节(包括1字节的有效负载头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • DM1数据包占用一个时间隙。信息比特、MIC位(当存在时)加上CRC位以2/3 FEC的速率进行编码。
  • DM1数据包中的有效载荷报头是1字节长,见图6.12。

4.5.2 DH1包

  • 这个数据包类似于DM1数据包,除了有效负载中的信息不是FEC编码的。
  • DH1数据包有1到28个信息字节(包括1字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • DH1数据包占用一个时间隙。

 4.5.3 DM3包

  • DM3数据包最多可占用三个时间槽。有效负载有2到123个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有当使用AES-CCM进行加密时,才会出现32位的MIC。
  • 信息比特、MIC位(当存在时)加上CRC位以2/3 FEC的速率进行编码。
  • DM3数据包中的有效负载头长2字节,见图6.13。

4.5.4 DH3包

  • 这个数据包类似于DM3数据包,除了有效负载中的信息不是FEC编码的。
  • DH3数据包有2到185个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • DH3数据包最多可占用三个时隙。

4.5.6 DM5包

  • DM5数据包最多可占用5个时间槽。有效负载有2到226个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • DM5包中的有效载荷头长2字节。信息比特、MIC位(当存在时)加上CRC位以2/3 FEC的速率进行编码。

4.5.7 DH5包

  • DM5数据包最多可占用5个时间槽。有效负载有2到226个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • DM5包中的有效载荷头长2字节。信息比特、MIC位(当存在时)加上CRC位以2/3 FEC的速率进行编码。

4.5.8 AUX1包

  • 这个包类似于DH1包,但没有MIC或CRC码。
  • AUX1数据包有1到30个信息字节(包括1字节的有效负载头)。
  • AUX1数据包占用1个时间隙。
  • AUX1数据包仅在测试模式下使用。链路控制器应丢弃在任何其他情况下接收到的任何AUX1数据包。

4.5.9 2-DH1包

  • 这个包类似于DH1包,除了有效负载是使用π/4-DQPSK进行调制的。
  • 2-DH1数据包有2到56个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • 2-DH1数据包占用1个时间隙。

4.5.10 2-DH3包

  • 这个包类似于DH3包,除了有效载荷是使用π/4-DQPSK进行调制的。
  • 2-DH3数据包有2到369个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • 2-DH3数据包最多可占用3个时间隙。

4.5.11 2-DH5包

  • 这个包类似于DH5包,除了有效负载是使用π/4-DQPSK进行调制的。
  • 2-DH5数据包有2到681个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • 2-DH5数据包最多可占用5个时间隙。

4.5.12 3-DH1包

  • 这个包类似于DH1包,除了有效载荷是使用8DPSK进行调制的。
  • 3-DH1数据包有2到85个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • 3-DH1数据包占用一个时间隙。

4.5.13 3-DH3包

  • 这个包类似于DH3包,除了有效载荷是使用8DPSK进行调制的。
  • 3-DH3数据包有2到554个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • 3-DH3数据包最多可占用3个时间隙。

4.5.14 3-DH5

  • 这个包类似于DH5包,除了有效载荷是使用8DPSK进行调制的。
  • 3-DH5数据包有2到1023个信息字节(包括2字节的有效负载报头)加上一个16位的CRC代码。
  • 只有在启用了使用AES-CCM的加密时,才会出现32位MIC。
  • 3-DH5数据包最多可占用5个时间隙。

5. PAYLOAD格式

  • 在有效负载中,可区分出两个字段:同步数据字段和异步数据字段。
  • ACL数据包只有异步数据字段,而SCO和eSCO数据包只有同步数据字段。

5.1  同步数据字段

未完待续...

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值