DW1000芯片帧组成解析

news/2025/10/31 0:02:44/文章来源:https://www.cnblogs.com/lsksp/p/19170094

概述

在物联网定位与数据传输场景中,DW1000 作为遵循 IEEE802.15.4-2011 UWB 标准的芯片,其核心数据传输载体是 “帧”。它像一个精密的 “快递包裹”,通过三层结构(同步头、PHY 头、PHY 服务数据单元)实现 “精准同步、清晰解析、安全传输”,既支持 10cm 精度的测距功能,又能稳定传递业务数据。下面从结构、计算、流程三方面,完整拆解 DW1000 帧的设计逻辑。

DW1000 的帧全称是PHY 协议数据单元(PPDU),整体遵循 “同步→说明→数据” 的递进逻辑,每层功能独立且环环相扣。其核心参数如下表所示

组成部分 包含内容 长度(符号 / 字节) 核心作用
同步头(SHR) 前导码 + SFD 前导码:128-4096 符号;SFD:8/64 符号 同步时钟、识别帧开始
PHY 头(PHR) 数据速率、帧长度等 固定 21 符号 告诉接收端 “怎么解析数据”
PSDU MPDU(实际数据)+ FCS 标准 127 字节;扩展 1023 字节 传递业务数据 + 校验完整性

一、第一层:同步头(SHR):让接收端 “找到信号”

同步头是帧的 “外层标识”,作用是让接收端从复杂的无线环境中,快速识别 “这是一个有效 UWB 帧”,并校准自身时钟与发送端同步,就像快递盒上的 “快递品牌 logo”,一眼就能认出来。它包含两部分:

1.1. 前导码(Preamble):帧的 “引导员”与“时钟校准器”

前导码是一串重复的符号序列,核心作用是时钟同步干扰过滤。接收端通过前导码调整自身时钟频率,接收端只接收匹配 UWB 前导码规则的信号,避免误接收蓝牙、Wi-Fi 等其他无线信号。

前导码长度是可配置的,常见 128、256、1024、2048 个 “符号”(类似快递面单上的 “条形码长度”)。长度越长,同步越稳定、抗干扰越强,但传输速度越慢,比如 110kbps 低速率下用 2048 符号,适合远距离传输;6.8Mbps 高速率下用 128 符号,适合近距离快传。

1.2. 帧起始定界符(SFD):帧的 “开始口令”

帧起始定界符告诉接收端 “前导码结束了,接下来是正文”,相当于快递面单上的 “拆封线”,明确标识 “从这开始是包裹内容”。

SFD可配置为8个符号(适配 850kbps/6.8Mbps 速率)或者64个符号(适配 110kbps 低速场景),是 “同步到数据” 的关键过渡。

1.3. 同步头传输时间计算

同步头的组成为若干个符号组成(前导码符号数 + 帧起始定界符符号数),而一个符号的传输时间与数据速率和 PRF(脉冲重复频率)配置有关,DW1000的data sheet会给不同数据速率和 PRF(脉冲重复频率)下的符号时长信息(见下文4.1)。

SHR 发送时间 = (前导码符号数 + SFD符号数) × T_SHR_symbol (即同步头 SHR 的符号时长)

二、 第二层:PHY 头(PHR): 告诉接收端 “怎么解析数据”

PHY 头是帧的 “说明书”,用 21 个符号(固定长度)告诉接收端:“这帧数据怎么读?多长?”,就像快递面单上的 “包裹类型(易碎 / 普通)、重量”,让快递员知道怎么处理。

它的核心信息包括:

  • 数据速率:比如 110kbps、850kbps、6.8Mbps—— 接收端要按对应速率解码,不然会 “读错”。
  • 帧长度:指后续 “数据部分” 的字节数 —— 接收端知道要接收多少字节,避免 “少收” 或 “多收”。

PHR发送时间 = 21 × T_PHR_symbol(即PHY 头的符号时长)

三、第三层:PHY 服务数据单元(PSDU): 实际要传的 “货物”

这是帧的 “核心内容”,包含两部分:实际数据和校验信息,就像快递里的 “物品 + 质检单”。

3.1. MAC 协议数据单元(MPDU): 实际数据本体

存放要传递的业务数据,比如传感器采集的温度、设备的位置信息等。可配置为标准长度或者扩展长度

  • 标准长度:最多 127 字节(含后续 FCS),适合常规数据传输;
  • 扩展模式:DW1000 支持 “专有长帧模式”,最多能传 1023 字节(需特殊配置,适合大数据量场景)。

3.2. 帧检验序列(FCS):数据的 “质检单”

用于校验数据在传输中是否损坏,发送端会根据数据计算出 2 字节的 “校验码”(FCS),接收端收到数据后重新计算,若和 FCS 一致,说明数据完好;不一致则丢弃。DW1000 会自动生成 FCS(发送时)和校验 FCS(接收时),不用手动写代码计算。

3.3. PSDU发送时间计算

PSDU(包含 MPDU+FCS)采用BPM-BPSK 调制方式,且数据部分(不含前导码、SFD、PHR)的符号传输遵循 “1 个符号承载 1 位数据” 的规则,则PSDU发送符号个数 = (数据字节数 + 2) × 8;

PSDU发送时间 = (数据字节数 + 2) × 8 × T_PSDU_symbol;

四、其他

4.1 帧发送时间计算整体示例

若你的配置如下:

  • PRF:16MHz;
  • 数据速率:110kbps(0.11Mbps);
  • 前导码长度:1024 符号;
  • MPDU 业务数据:12 字节(标准短数据);
  • FCS:2 字节(默认添加);

结合DW1000的data sheet中的符号时间表,如下所示:

SymbolTimings

SHR 发送时间 = (1024 + 8)× 993.58 ns ≈ 1025.4 μs,其中在16MHz PRF下,SFD符号数选择8;

PHR 发送时间 = 21× 8205.13 ns ≈ 172.3 μs;

PSDU发送时间 = (14 + 2) × 8 × 8205.13 ns 919.1 μs;

总发送时间 = 1025.4μs + 172.3μs + 919.1μs ≈ 2116.8μs ≈ 2.12 ms;

4.2 发送过程简述

发送端按以下顺序打包帧,接收端按逆序解析:

发送端打包

写入 MPDU 数据 → 自动添加 FCS → 生成 PHY 头(含速率 / 长度) → 添加 SHR(前导码 + SFD) → 射频发送;

接收端解析

接收 SHR(同步时钟) → 解析 PHY 头(获取速率 / 长度) → 接收 PSDU → 校验 FCS → 输出 MPDU 数据。

4.3 关键设计注意事项

前导码长度选择:远距离场景选长前导码(如 2048 符号),近距离高速场景选短前导码(如 128 符号),平衡同步稳定性与传输效率;

长帧模式配置:需通过PHR_MODE寄存器启用(参考 DW1000 用户手册),且收发两端必须同时开启,否则无法通信;

FCS 功能:默认自动启用,若需自定义校验(如特殊协议),可通过SFCST控制位关闭自动 FCS 生成。

总结

本文详细解析了 DW1000 芯片帧的组成,包括同步头(SHR)、PHY 头(PHR)和 PHY 服务数据单元(PSDU)。通过理解这些组成部分及其功能,可以更好地设计和优化基于 DW1000 的物联网定位与数据传输系统。关键设计注意事项包括前导码长度的选择、长帧模式的配置以及 FCS 功能的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

revit api测量距离

revit api测量距离根据起始点,和方向向量,创建模型线,获取距离这里的方向是向上的,可以根据自己的需要修改using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System;[T…

《程序员修炼之道》第一章有感

《程序员修炼之道》第一章有感翻开《程序员修炼之道》第一章,瞬间跳出了“完成任务就够了”的误区。程序员不是单纯写功能的,更要主动打磨代码、想着优化提升。这场职业修炼,从认真对待每一行代码开始。

10月30日日记

1.今天上体育课学习三步上篮,和学习数据结构 2.明天休息 3.数据库索引为什么多用B+树而不是哈希表

代码大全2阅读笔记(3)

一、开篇:别让 “交付” 成为代码质量的终点 读完《代码大全 2》的维护与优化章节,最颠覆认知的一句话是:“代码的生命周期中,编码只占 20%,剩下 80% 的时间都在维护与迭代”。很多时候我们把 “代码能运行、功能…

rustdesk 下载Windows版

蓝奏云下载 rustdesk-1.4.3-x86_64.exe rustdesk-1.4.2-x86_64.exe rustdesk-1.4.1-x86_64.exe 旧版下载 rustdesk-1.4.0-x86_64.exe最新版随github更新

apue笔记-进程环境、进程控制、进程关系

原文博客:https://nosae.top进程环境 C程序总是从main函数开始执行,内核在调用main之前会调用一个特殊的启动例程,由这个例程去调用main。这个例程如果用C代码来写(一般是用汇编来写),那就是exit(main(argc, arg…

数字识别(非汉字版)

1 训练 import torch from torch.utils.data import DataLoader from torchvision import transforms from torchvision.datasets import MNIST import matplotlib.pyplot as plt import matplotlib import numpy as …

Rust 解析验证码:结合 Tesseract OCR 进行文本识别

环境准备 1.1 安装 RustRust 可通过官方的 rustup 进行安装: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 更多内容访问ttocr.com或联系1436423940 安装完成后,检查 Rust 是否可用: rustc --ver…

UML图以及设计模式部分总结

今天将软考内容中的UML统一建模语言和设计模式的部分内容进行了复习,具体内容总结如下: 1.类图,用例图,序列图,通信图,状态图:状态图强调一个对象行为的事件顺序,包括初态中间态以及终态, 初态只有一个,而终…

Consul访问宿主机api项目失败 - binzi

最近在学习consul,在docker上启动consul实例后。本地有一个.net core api项目,项目主要是实现启动就向consul注册及有一个心跳检查,启动调试后可以看到已经成功向consul注册了服务,就是心跳检查一直不成功,最后不…

读《代码大全2》第一章有感

读《代码大全2》第一章有感以前总觉得代码能跑起来就行,读了《代码大全2》第一章才发现,好代码远不止于此。可读性、可维护性才是关键,那些随意的命名和缺失的注释,其实都是后续的麻烦。新手入门,先把规范记牢准没…

251030

251030寒冷的夜里,如果不是有特别的理由没人会待在街上,大家都有不惜牺牲自己也要得到的东西,这种感觉就像是费劲千辛万苦地蒸发自己,让自己动起来去触碰不动的东西,所以视觉是很宝贵的,但听觉却是多余的,聋哑真…

FOC学习

FOC学习 无刷电机的定子有 3 组绕组(U、V、W),转子是永磁体。六步换向的核心是 “按转子位置给对应绕组通电”,而位置检测全靠电机内置的 3 个霍尔传感器(互差 120 电气角)。3 个霍尔传感器组合起来,每旋转一圈…

软件技术第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/25rjjc 这个作业的目标:实现一个命令行文本计数统计程序,能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。 姓名 学号 万绮梦 2023339915012 …

前端三剑客——javascript流程控制与异常处理

大纲 :1.判断语句/分支语句:if else if elseswitch case2.循环语句/遍历语句whilefor循环/for遍历3.补充:forEach(数组的内置方法)4.异常处理和主动抛出异常5.时间相关判断语句/分支语句1.if else 和 if else…

《代码大全2》-观后感-一本可以陪伴整个职业生涯的“案头书”

现在读不懂全部,但未来一定会感谢现在翻开它的自己 坦白说,以我目前大二的知识储备和项目经验,《代码大全2》里的某些章节,比如关于系统考虑、软件架构的部分,我读起来还有些吃力,感觉像是在看“天书”。它们所描…

Android Tor浏览器缩略图取证技术解析

本文详细介绍了在Android设备上定位Tor浏览器标签页缩略图的技术方法,包括文件路径、格式解析和取证工具使用,为数字取证调查提供了新的技术突破。Android Tor浏览器缩略图取证技术解析 Tor浏览器调查通常仅限于用户…

串口打印彩色log

单片机开发中串口日志的打印极大方便了我的调试工作,随着日志数据的增加又带来新的问题:短时间吐出的大量数据实在是让人眼花缭乱。 如何在大量数据中一眼找到重点成为我今天的课题。如果在终端中能以不同颜色甚至不…

洛必达法则

洛必达法则:若 \(f(x)\) 在 \(a\) 附近可导,\(g(x)\) 在 \(a\) 附近可导,且 \(f(a) = 0,g(a) = 0\) 或 \(f(a) = \infty,g(a) = \infty\),则有: \[\lim_{x\to a}\dfrac{f(x)}{g(x)} = \lim_{x\to a}\dfrac{f(x)}{…