0
点赞
收藏
分享

微信扫一扫

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



文章目录

  • 一、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



蓝牙Sig Mesh 概念入门⑤——Mesh通信消息格式详解_beacon

一、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

蓝牙Sig Mesh 概念入门⑤——Mesh通信消息格式详解_beacon_02

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。

蓝牙Sig Mesh 概念入门⑤——Mesh通信消息格式详解_Mesh networking_03

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


举报

相关推荐

0 条评论