蓝牙mesh数据包格式解析

这篇具有很好参考价值的文章主要介绍了蓝牙mesh数据包格式解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 蓝牙mesh数据包的结构

蓝牙mesh数据包的结构如下图:蓝牙mesh数据包格式解析
蓝牙mesh数据包格式解析

总长31个字节。

Length (1Byte):数据长度

Type (1Byte):广播类型

IVI (1bit):用来认证加密Network PDU的IV index的最低位

NID (7bits):网络ID,network ID。从网络密钥(NetKey)派生的值,用于识别保护此PDU的加密秘钥和隐私密钥。决定使用哪个mesh网络传递数据

CTL (1bit):网络控制,用于确定消息是否包含访问消息或者控制消息

TTL (7bits):生存时间。0 不会被中继,1 不会被中继,2-126可能已被中继,并且可以被中继,127 没有被中继过,可以被中继。

SEQ (3Byte):序列号,每个Mesh信息的SEQ必须不同。

SRC (2Byte):源地址,必须是一个单播地址

DST (2Byte):目标地址,可以使单播地址、组播地址、虚拟地址。

MIC(4 Byte):网络消息完整校验值

Header (1Byte):包头

TMIC(4 Byte):传输层消息完整校验值

Opcode(3 Byte):操作可以是1、2或3个字节序列,操作码的第一个字节决定了使用字节的数量。如果操作码第一个字节的最高位是0,那么操作码只包含一个字节。如果最高两位是10,那么操作码包含2个字节。如果最高的两位是11,那么操作码包含3个字节。

蓝牙mesh数据包格式解析

1-octet 操作码是蓝牙SIG定义的应用操作码,最多可以定义127个1-octet操作码,0x7F是保留给未来使用的。

2-octet也是蓝牙SIG定义的应用操作码,最多可以定位16384个2-octet操作码

3-octet操作码是供制造商使用的操作码,每一个公司共有64个3-octet操作码。

Parameters(8 Byte):有效负载

2. Lower Transport PDU

底层传输层将来自上层传输层的PDU发送给另外一个节点,如果数据不需要分包,就单个底层传输层PDU发送出去,如果长度太长,则需要对数据分包之后再发送出去。接收消息时,也会判断是否是分包数据,如果是分包数据,则再组装之后,再传给上层传输层。

底层传输层PDU的第一个字节的最高位是SEG字段,也是最重要的一个位,该字段用来确认此PDU是经过分包的还是未分包消息。在网络层中,CTL字段确定消息是访问消息还是控制消息。根据这两个字段值的不同,可以将消息分为4种类型:1.未分包访问消息 2.分包访问消息 3未分包控制消息 4.分包控制消息

CTL SEG 底层传输层PUD类型
0 0 未分包访问消息
0 1 分包访问消息
1 0 未分包控制消息
1 1 分包控制消息

2.1 未分包访问消息

字段 长度(bits) 备注
SEG 1 0=未分包消息
AKF 1 应用秘钥标志位
AID 6 应用秘钥标识
Upper Transport Access PDU 40~120 上层传输层访问PDU
上层传输层根据应用秘钥(Application Key)和设备秘钥(Device Key)来设置应用秘钥标志位(AKF)和应用秘钥标识(AID)的值。

PDU格式:

蓝牙mesh数据包格式解析

2.2 分包访问消息

蓝牙mesh数据包格式解析

字段 长度(bits) 备注
SEG 1 1=分包消息
AKF 1 应用秘钥标志位
AID 6 应用秘钥标识
SZMIC 1 TransMIC长度
SeqZero 13 SeqAuth的低有效位
SegO 5 分包号
SegN 5 最后一包分包号
Segment m 8~96 上层传输层访问PDU中的Segment m

SZMIC字段表示上层传输层访问PDU中的TransMIC的大小。若SZMIC字段为0,则TransMIC是一个32bit的值;若SZMIC字段为1,TransMIC则是一个64bit的值。

SeqZero字段由上层传输层设置;SegO字段应被设置为该上层传输层PDU的m分包的分包号(从0开始);SegN字段应该被设置为该上层传输层PDU的最后一个分包号。

Segment m字段是分包号为m的内容,除最后一个分包外的分包Segment m,它的内容是从第12×m字节到第12×m+11字节,而最后一个分包内容则是从第12×m字段到消息结尾。

对于相同的上层传输层访问PDU,每个分包访问消息的AKF、AID、SZMIC、SeqZero和SegN字段应该具有相同的值。

2.3 未分包控制消息

未分包控制消息用于传输一个应答消息或者传输控制消息。
蓝牙mesh数据包格式解析

字段 长度(bits) 备注
SEG 1 0=未分包消息
Opcode 7 0x00=分包应答\n 0x01到0x7F=传输控制消息的OPCode
Parameters 0到88 传输控制消息参数

分包应答消息的Opcode字段应设为0,底层传输层使用分包应答消息来确认分包消息。Parameters字段根据Opcode字段的需要来设置。

分包应答消息格式

蓝牙mesh数据包格式解析

字段 长度(bits) 备注
SEG 1 0=未分包消息
Opcode 7 0x00=分包应答
OBO 1 朋友代理低功耗节点
SeqZero 13 上层传输层PDU的SeqZero
RFU 2 保留
BlockAck 32 分包的块应答

OBO为0,表示接收信息的节点直接寻址;OBO字段为1,表示接收信息的是朋友节点,朋友节点代表低功耗节点应答此消息。

SeqZero字段应被设置为被应答的上层传输层消息的SeqZero。

BlockAck字段应被设置为收到的分包。最低有效位,即位0表示分包0;最高有效位,即位31表示分包31。如果位n被设置为1,则表示应答分包n。大于SegN的分包的位应被设置为0并在接收时忽略。

如果在接收的分包信息中TTL为0,则建议在发送分包应答消息中也将TTL设置为0.

2.4 分包控制消息

当传输控制消息不适合使用单个网络层PDU来传输的时候,就使用分包控制消息来传输。

分包控制消息的格式

蓝牙mesh数据包格式解析

字段 长度(bits) 备注
SEG 1 1=分包消息
Opcode 7 0x00=保留\n 0x01到0x7F=传输控制消息的OPCode
RFU 1 保留
SeqZero 13 SeqAuth的低有效位
SegO 5 分包号
SegN 5 最后一包分包号
Segment m 8~64 上层传输层访问PDU中的Segment m
  • OPCode字段由上层传输层设置,0x00为保留值,收到后不得传输,直接忽略
  • SeqZero字段应由上层传输层设置。
  • SegO字段应被设置为该消息中包含的上层传输层PDU的分包号(从0开始)。
  • SegN字段应被设置为该上层传输层PDU的最后一个分包号。
  • Segment m字段是分包号为m的内容,除最后一个分包外的分包Segment m,它的内容是从第8×m字节到第8×m+7字节,而最后一个分包内容则是从第8×m字节到消息结尾。

对于相同的上层传输层控制PDU,每个分包控制消息应具有相同的OPCode、SeqZero和SegN值。文章来源地址https://www.toymoban.com/news/detail-441128.html

到了这里,关于蓝牙mesh数据包格式解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Istio数据面新模式:Ambient Mesh技术解析

    摘要: Ambient Mesh以一种更符合大规模落地要求的形态出现,克服了大多数Sidecar模式的固有缺陷,让用户无需再感知网格相关组件,真正将网格下沉为基础设施。 本文分享自华为云社区《华为云云原生团队:Istio数据面新模式 Ambient Mesh技术解析》,作者: 云容器大未来。 如

    2024年02月03日
    浏览(22)
  • PHY6222系统级SOC蓝牙芯片低功耗高性能蓝牙MESH组网智能家居

     PHY6222是一款支持BLE 5.2功能和IEEE 802.15.4通信协议的系统级芯片(SoC),集成了超低功耗的高性能多模射频收发机,搭载32-bit ARM?Cortex?-M0处理器,提供64K retention SRAM、可选128K-8M Flash、96KB ROM以及256bit efuse,支持基于BLE和IEEE 802.15.4的安全架构、应用和OTA在线升级。此外,芯片串

    2024年03月17日
    浏览(46)
  • 【沁恒蓝牙mesh】CH58x系统时钟配置与计算

    本文主要记录了【沁恒蓝牙mesh】CH58x系统时钟配置与计算 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎 📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥 🎉 支持我:点赞👍+收藏⭐️+留言📝 📣 系列专栏:沁恒蓝牙mesh二次开发 🍁 💬格言:写文档啊

    2024年02月14日
    浏览(24)
  • 2023年智能家居占消费电子出货量28%,蓝牙Mesh照明占据重要位置

    市场研究机构 TechInsights 的最新报告显示,预计 2023 年全球消费者在智能家居相关硬件、服务和安装费方面的支出将复苏,达到 1310 亿美元,比 2022 年增长 10%。TechInsights 表示,消费者在智能家居系统和服务上的支出将继续强劲增长。该机构预测,未来五年智能家居领域的支出

    2024年02月09日
    浏览(21)
  • 读取3D文件mesh格式工具

    最近要做一个3d仪表,所以了解了一下3d相关方面的知识。这里暂时不做一一赘述,只记录下当前的需求。 需求:         由于****.mesh文件比较多,qt转换后的名字大多都能顾名思义,但是为了更加准确的找到某个部件,于是需要一个工具可以打开并查看****.mesh文件。自己

    2024年02月12日
    浏览(34)
  • C++文件格式深度解析:从底层结构到关键特性

    在计算机科学中,文件格式是存储在某种存储媒介上的文件的特定编码方式。每种文件格式都有特定的标准或规范,定义了文件中数据的组织方式。理解文件格式的基本概念对于编程,尤其是使用C++进行文件操作,是非常重要的。 在C++中,文件是以字节流的形式存储在存储设

    2024年02月06日
    浏览(66)
  • mesh导出OBJ、STL格式和win窗口调用

    背景:客户想在UG中打开编辑好的模型,UG不支持obj格式。mesh转曲面不太现实,折中取了个STL。 设置导出模型的零点,例如设置底面中心为导出模型的零点。 校验传入路径名称是否带.obj后缀。 验证是否导出成功 完整代码 基础框架和导出obj一致,区别在于写入了大量的标志信

    2024年02月13日
    浏览(33)
  • Java实现接收xml格式数据并解析,返回xml格式数据

    需求描述:后端接受xml格式数据,解析出相应数据,并返回xml格式数据。

    2024年02月10日
    浏览(31)
  • MYSQL中解析json格式数据

    注:requestbody为指定字段 注:requestbody为指定字段,body为json中的key

    2024年02月15日
    浏览(43)
  • CAN数据帧格式解析与波形实例

    CAN总线的数据帧有标准帧和扩展帧两种格式,区别在于标准帧具有 11-bit 的帧ID,扩展帧具有 29-bit 的帧ID; CAN数据帧由以下七个段组成: 1、帧起始,又叫SOF(Start of Frame):帧起始位,表示一帧的开始; 2、仲裁段:决定该帧在总线传输上的优先级的数据段,根据仲裁段ID码长度

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包