3、UWB帧结构解析:前导码、同步头、物理层头、数据负载

UWB的帧结构,说白了就是数据在空中飞行的“包装盒”。我刚开始接触UWB时,总觉得帧结构就是一堆寄存器的配置项,直到有一次在产线上抓包,发现设备之间死活对不上时序……后来才明白,帧结构里的每一个字段,都藏着物理层的秘密。

今天咱们就把这个包装盒拆开,看看里面到底装了啥。

3.1 整体帧结构概览

UWB的物理层帧(PPDU)由四个部分组成:

  • 前导码(Preamble) —— 用于信号检测和粗同步
  • 同步头(SHR) —— 包含前导码和起始帧定界符(SFD)
  • 物理层头(PHR) —— 携带帧长度、数据速率等控制信息
  • 数据负载(PSDU) —— 真正要传的数据

你想想看,这就像快递包裹:前导码是快递员喊“有包裹来了”,同步头是确认收件人身份,物理层头是面单上的地址和重量,数据负载才是包裹里的东西。

关键认知: 抓包时,前导码和SHR决定了你能不能“听到”信号,PHR决定了你能不能“读懂”信号,PSDU才是你真正关心的数据。

UWB PPDU帧结构 UWB PPDU 帧结构 前导码 Preamble 信号检测 / 粗同步 同步头 SHR SFD / 帧定界 物理层头 PHR 速率 / 长度 数据负载 PSDU 应用数据 抓包时:前导码决定能否“听到”,PHR决定能否“读懂”,PSDU才是你关心的数据

3.2 前导码(Preamble)—— 信号的“敲门砖”

前导码是UWB帧的第一个部分。它的作用很简单:让接收方知道“有信号来了”。

我个人习惯把前导码理解成“敲门砖”。接收机在空闲时一直在监听信道,前导码的重复脉冲序列能让接收机快速锁定信号到达的时间。

3.2.1 前导码的构成

前导码由一系列已知的脉冲组成。IEEE 802.15.4a/z标准定义了多种前导码长度:

前导码长度(符号数) 典型应用场景 抓包难度
64 高数据速率、短距离 较难(信号短)
128 通用场景 中等
256 长距离、低速率 较易(信号长)
1024 超长距离、抗干扰 最容易

抓包技巧: 如果你不确定目标设备的前导码长度,可以从256开始尝试。我在项目中遇到过,有些设备默认用128,但实际抓包时用256更容易锁定信号。

3.2.2 前导码的生成方式

前导码不是随便发的脉冲。它基于一个特定的三元序列(-1, 0, +1),通过I/Q调制生成。标准里定义了多种前导码序列,不同信道使用不同的序列,目的是减少多设备之间的干扰。

嗯,这里要注意:前导码序列是公开的,但不同厂商可能会在序列上做微调。我曾经在抓一款国产UWB模块时,发现它的前导码序列和标准不完全一致,折腾了两天才找到原因。

3.3 同步头(SHR)—— 找到帧的“起点”

SHR = 前导码 + SFD(起始帧定界符)。

前导码告诉接收机“有信号”,SFD告诉接收机“数据要开始了”。SFD是一个特殊的序列,接收机检测到SFD后,就知道接下来是PHR了。

3.3.1 SFD的作用

SFD本质上是一个“标记”。它和前导码的序列不同,接收机通过匹配滤波器来识别SFD。一旦匹配成功,接收机就进入PHR解析阶段。

你想想看,如果没有SFD,接收机怎么知道前导码什么时候结束?数据什么时候开始?SFD就是那个“分界线”。

避坑指南: 我曾经在抓包时发现,有些设备在发送SFD时会出现时序偏移。如果你发现抓到的PHR总是CRC错误,先检查SFD的检测是否稳定。有时候换个前导码长度就能解决问题。

3.4 物理层头(PHR)—— 帧的“身份证”

PHR只有19个比特(标准模式下),但它包含了接收机解码PSDU所需的全部信息。

3.4.1 PHR的字段结构

字段 比特数 说明
数据速率 3 110 kbps / 850 kbps / 6.8 Mbps 等
帧长度 9 PSDU的字节数(0~255)
Ranging位 1 是否为测距帧
预留/扩展 2 标准保留位
HCS 4 PHR的校验和

我个人觉得,PHR里最重要的就是帧长度和数据速率。这两个字段错了,后面的PSDU根本解不出来。

3.4.2 PHR的编码方式

PHR使用卷积码进行编码,速率固定。这意味着即使信道条件不好,PHR也有较高的概率被正确解码。标准里PHR的编码是独立的,不依赖前导码的配置。

抓包要点: 如果你能正确解析PHR,恭喜你,你已经成功了一大半。PHR里的帧长度字段直接告诉你需要抓多少字节。我曾经在调试时,就是靠PHR里的长度字段来确认抓包缓冲区是否够用。

3.5 数据负载(PSDU)—— 真正的内容

PSDU就是MAC层交给物理层的数据。它包含MAC帧头、MAC负载和FCS(帧校验序列)。

说白了,前导码、SHR、PHR都是“包装”,PSDU才是“礼物”。

3.5.1 PSDU的编码

PSDU的编码方式取决于PHR里指定的数据速率:

  • 低速率(110 kbps):使用BPM-BPSK调制,抗干扰能力强,但速度慢
  • 中速率(850 kbps):折中方案
  • 高速率(6.8 Mbps):使用BPSK调制,速度快,但距离短

我在项目中遇到过,有些设备为了省电,默认使用850 kbps。但如果你在抓包时发现信号弱,可以尝试让设备切换到110 kbps,抓包成功率会高很多。

3.5.2 PSDU的抓包注意事项

抓PSDU时,最容易出问题的是长度不匹配。PHR里声明的长度和实际发送的长度不一致,会导致CRC错误。

我的经验: 抓包时,先抓一小段数据(比如10字节),确认PHR解析正确后,再抓完整帧。这样能快速定位问题。

3.6 帧结构在抓包中的实际应用

理解了帧结构,抓包就变成了“按图索骥”。

  1. 第一步:锁定前导码 —— 调整接收机参数,匹配目标设备的前导码序列和长度
  2. 第二步:检测SFD —— 确认帧起始位置
  3. 第三步:解析PHR —— 获取帧长度和数据速率
  4. 第四步:接收PSDU —— 根据PHR的参数,完整接收数据负载

你想想看,这四步缺一不可。哪一步出问题,抓包就失败。

重要提醒: 不同UWB芯片厂商对帧结构的实现可能有细微差异。比如,有些芯片在SFD之后会插入额外的同步序列。如果你用通用的抓包工具抓不到数据,不妨查一下芯片手册,看看有没有特殊的帧结构配置。

好了,帧结构就讲到这里。记住:前导码是敲门砖,SHR是分界线,PHR是身份证,PSDU才是真金白银。抓包时,每一步都要稳扎稳打。