文章目录

  • 一、Access Layer
  • 二、Transport layer
  • 三、Network layer
    • 3.1 Address
    • 3.2 Network PDU
    • 3.3 Network transmit count / interval ( 重传次数和重传间隔的定义)
    • 3.4 Reliable retry( 发包重试次数)
  • 四、mesh beacon
  • 五、IV Update procedure
  • 六、heartbeat
  • 七、Health

一、Access Layer

Access layer 包含 op code 和 parameter,最大支持 380 byte。

Filed Name Size Notes
op code 1,2 or 3 operation code
Parameters 0 to 379 Application Parameters

op code 有三种类型,1byte,2byte 和 3byte。

  • 1byte,2byte 是 SIG 定义的命令。
  • 3byte是 vendor 自定义的命令
    • 其中 2 个 byte 是 vendor ID(CID)
    • 整个 mesh 网络中,一个 vendor id 最多支持 64 个 vendor opcode
Opcode Format Notes
0xxx xxxx(排除0111 1111) 1-octet Opcode,SIG定义
10xx xxxx xxxx xxxx 2-octet Opcode,SIG定义
10xx xxxx zzzz zzzz zzzz zzzz 3-octet Opcode,vendor定义,z代表vendor id

二、Transport layer

  • 目前为了兼容 BLE4.2 等不支持长广播包的设备,所以都统一设定 adv 的最大 payload 为31byte
  • 去掉一些数据包的通讯协议需要占用的部分,单包的有效 payload 是 11byte
  • 当Access layer 超过 11byte 后,就需要分包
  • 对于 vendor op code 来说,当 parameters 大于 8 个 byte(8=11-3)
  • 分包的时候,mesh 协议栈就会自动执行分包发送,用户不需要介入

三、Network layer

3.1 Address

Values Address Type Description
0b0000 0000 0000 0000 Unassigned Address 0,未分配地址
0b0xxx xxxx xxxx xxxx Unicast Address element address
0b11xx xxxx xxxx xxxx Group Address 分组地址,用于组控,以及publish/subcribe
0b10xx xxxx xxxx xxxx Virtual Address 暂时用不到

3.2 Network PDU

Field Name Length Notes
IVI 1 IV Index最低有效位
NID 7 netkey 相关
CTL 1 标记是否是control message
TTL 7 Time to Live
SEQ 24 Sequence Number
SRC 16 Source Address
DST 16 Destination Address
TransportPDU 8 to 128 Transport Protocol Data Unit
NetMIC 32 or 64 Message Integrity Check for Network,完整性校验

3.3 Network transmit count / interval ( 重传次数和重传间隔的定义)

  • network transmit count是指发送一个命令,需要重传的次数

    • 这些重传的 rf packet 是一模一样的,包括 sno 等。
    • 我们的 SDK 协议栈默认重发 5 次,即 TRANSMIT_CNT_DEF(5),总共发发送次数是 n+1 =6 个。
  • network transmit interval是指重传的两个包之间的发送间隔
    • 我们 SDK 默认在 30-40ms之间,由 TRANSMIT_INVL_STEPS_DEF(2) 决定,计算方式是 ((TRANSMIT_INVL_STEPS_DEF +1)*10 + (0–10))ms。”

network transmit count、transmit interval 还可以通过 SIG 定义的标准 config 命令CFG_NW_TRANSMIT_SET 来配置。

3.4 Reliable retry( 发包重试次数)

Reliable retry 是指应用层的重试,用于有 status 回复的命令,比如 generic ONOFF。

  • 当发送一个 network packet 后(包含 network transmit),会判断是否收到 status
  • 如果没有收到,我们会进行 retry,network packet 里面的 sequence number 会变化
  • 我们默认最多重试两次。

四、mesh beacon

下图是 unprovisioned device beacon 的 PDU。

Device UUID 可以唯一识别 node。因为有些手机,比如 IOS 不能获取 mac,以及在未来的remote provision 中无法获得 mac,所以在 SIG mesh 中是通过 Device UUID 来唯一识别 node,而不是通过 mac。unprovisioned beacon 通过 non-connectable ADV 的 packet 来发送,用于 PB-ADVprovision 模式。

  • 在未组网时,会发送 unprovision beacon,通过 unprov_beacon_send()来发送。发送周期由beacon_send.inter = MAX_BEACON_SEND_INTERVAL来定义,默认是 2 秒。
  • 在组网后,会发送 security beacon,通过 mesh_tx_sec_nw_beacon()来发送。
  • CFG_BEACON_SET定义发送使能。
  • SEC_NW_BC_INV_DEF_100MS定义发送周期 ,默认是 10 秒。

五、IV Update procedure

network layeraccess layer的加解密过程都需要用到iv index

  • mesh网络要求network PDU的sequence number要一直累加
  • sequence number 才 3 byte,当使用很长一段时间后,sequence number 接近最大值的时候
  • 就需要考虑更新 iv index,否则 sequence number 就会归 0,导致接收端认为是一个无效的message
  • 从某种程度上,可以理解 iv index 为 sequence number 的扩展位。

iv index update flow 是节点自行发起,自行 update 的过程。

目前 SDK,当节点检测自己的mermaid sequenceDiagram number超过了IV_UPDATE_START_SNO(0xC00000) 后,会主动发起 iv updatefolw。每次 Iv update 后,iv index 会加 1。

六、heartbeat

mesh的心跳包,可以配置周期发送。

  • 可以用于做在线离线检测(周期 publish 机制也可以做在线离线检测)
  • 可以用于hops 的计算,即计算 heartbeat message 经过多少跳之后,才被接收到

经过统计一定时间内收到的 heartbeat 的个数(count),并计算得到每个 heartbeat 的 hops
的值,得到 min hops 和 max hops,进而了解整个网络的布局,以及每一个节点的 message
传输的可靠程度。不过每次配置 heartbeat subscription 只能监听和统计一个节点的状态。

hops 计算方式是:hops = InitTTL - RxTTL +1

  • InitTTL:是 heartbeat publish set 里面的 TTL 参数。
  • RxTTL:是收到的 message 的 network PDU 里面的 TTL。

节点默认不发送 heartbeat,具体配置方式。

七、Health

Health model 相关的 message 是用来反映节点的 warning 或者 error 状态。

Value Description
0x00 No Fault
0x01 Battery Low Warning
0x02 Bettery Low Error
0x03 Supply Voltage Too Low Warning
0x04 Supply Voltage Too Low Error
0x05 Supply Voltage Too High Warning
0x06 Supply Voltage Too High Error
0x07 Power Supply Interrupted Warning
0x08 Power Supply Interrupted Error
0x09 No Load Warning
0x0A No Load Error
0x0B Overload Warning
0x0C Overload Error
0x0D Overheat Warning
0x0E Overheat Error
0x0F Condensation Warning
0x10 Condensation Error
0x11 Vibration Warning
0x12 Vibration Error
0x13 Configuration Warning
0x14 Configuration Error
0x15 Element Not Calibrated Warning
0x16 Element Not Calibrated Error
0x17 Memory Warning
0x18 Memory Error
0x19 Self-Test Warning
0x1A Self-Test Error
0x1B Input Too Low Warning
0x1C Input Too Low Error
0x1D Input Too High Warning
0x1E Input Too High Error
0x1F Input No Change Warning
0x20 Input No Change Error
0x21 Actuator Blocked Warning
0x22 Actuator Blocked Error
0x23 Housing Opened Warning
0x24 Housing Opened Error
0x25 Tamper Warning
0x26 Tamper Error
0x27 Device Moved Warning
0x28 Device Moved Error
0x29 Device Dropped Warning
0x2A Device Dropped Error
0x2B Overflow Warning
0x2C Overflow Error
0x2D Empty Warning
0x2E Empty Error
0x2F Internal Bus Warning
0x30 Internal Bus Error
0x31 Mechanism Jammed Warning
0x32 Mechanism Jammed Error
0x33-0X7F Reserved for Future Use
0x80-0XFF Vendor Specific Warning / Error

觉得好,就一键三连呗(点赞+收藏+关注)

蓝牙Sig Mesh 概念入门⑤——Mesh通信消息格式详解相关推荐

  1. 蓝牙Sig Mesh 概念入门④——Mesh的专业术语及其操作流程

    文章目录 一. States 二.Bound states 三.Messages 四.Node & Elements 五.Publish & Subscribe 六.Security ...

  2. SIP消息格式详解(基于XML消息体)

    SIP消息分为请求和响应,格式由一个请求行/状态行.几个标题头.一个空行和一个消息体(可选)组成,之间使用回车换行符表示终结,即使消息中未包含消息体,空行也不能省略: 1.请求行/状态行 <1& ...

  3. 蓝牙Sig Mesh 概念入门①——简单介绍

    文章目录 一.前言 二.Mesh组网怎么选 2.1 WiFi Mesh (插电的用WiFi) 2.2 蓝牙 Sig Mesh (需要与手机互动的) 3.3 ZigBee Mesh (其他) 三.蓝牙模 ...

  4. LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用

    LSTM入门必读:从入门基础到工作方式详解 By 机器之心2017年7月24日 12:57 长短期记忆(LSTM)是一种非常重要的神经网络技术,其在语音识别和自然语言处理等许多领域都得到了广泛的应用. ...

  5. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  6. 小白入门!网络安全基础知识详解(附知识问答)

    小白入门!网络安全基础知识详解(附知识问答) 一.引论 提到网络安全,一般人们将它看作是信息安全的一个分支,信息安全是更加广义的一个概念:防止对知识.事实.数据或能力非授权使用.误用.篡改或拒绝使用所 ...

  7. Elastic search入门到集群实战操作详解(原生API操作、springboot整合操作)-step1

    Elastic search入门到集群实战操作详解(原生API操作.springboot整合操作)-step2 https://blog.csdn.net/qq_45441466/article/de ...

  8. JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  9. 窗口发送消息参数详解

    窗口发送消息参数详解 //    窗口.发送消息    函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果 中文函数原型: 发送消息(hwnd,msg ...

最新文章

  1. 微软小冰从上海音乐学院音工系毕业,师从于阳、陈世哲
  2. java 对象转json json转对象
  3. centos7下nginx配置
  4. MetaMask以太坊钱包插件
  5. .NET中的命名规则
  6. php返回成功信息msg_PHP进化史 — 从v5.6到v8.0(可收藏)
  7. PHP找出专题下重复的商品数据
  8. Spark学习笔记(一)
  9. (转载)RAID技术全解图解-RAID0、RAID1、RAID5、RAID100
  10. ALTER TABLE 语句
  11. 大数据分析助迈凯轮车队角逐F1
  12. 首席新媒体运营黎想教程:活动运营推广入门全攻略及进阶
  13. 基于Python web信息旅游管理系统
  14. 机器人操作系统ROS Indigo 入门学习(18)——ROS wiki导航
  15. 断更1周,因特殊情况,预计断更1周左右
  16. 算法 树2 List Leaves
  17. Python 使用7z压缩解压 安装、使用、报错
  18. VCSA 7.0 重置root密码
  19. 自己搭建了一个美团饿了么外卖cps红包的小程序裂变分销公众号
  20. facebook网络环境模拟工具atc

热门文章

  1. web测试-sql注入漏洞
  2. 【UE4】插件与模块
  3. @EventListener springcould 初始化数据
  4. javascript中使用枚举定义一个对象进行数据转换
  5. 短视频运营课程怎么样
  6. oracle RMAN备份
  7. 杭州电子科技大学acm---2009
  8. java version 1.8下载_java jdk v1.8.0 官方免费版
  9. 中学计算机课外小组活动计划,课外活动计划实施方案
  10. 计算机科学期刊是ISTP吗,ISTP期刊是核心期刊吗