[14:38:27.317]收←◆USER]:(USER)Start user init…
[LIB]:(Basic)------ flash map auto exchange flow start…
[LIB]:(Basic)no OTA event, so no auto exchange flash map
[LIB]:(Basic)------ flash map auto exchange flow complete!------

[14:38:29.317]收←◆[LIB]:(sdk)mesh tx NoAck,op:0x4e82(LIGHTNESS_STATUS),src:0x6a68,dst:0xffff,sno:0x000001 par_len:2 par:ff ff

[14:38:52.894]收←◆[LIB]:(sdk)mesh_ble_connect_cb connHandle:0x40

[14:38:55.343]收←◆[LIB]:(sdk)rcv provision invite 00 00
[LIB]:(sdk)send capa cmd 01 02 00 03 00 00 00 00 00 00 00 00

[14:38:56.479]收←◆[LIB]:(sdk)rcv start cmd 02 01 00 00 00 00
[LIB]:(sdk)rcv pubkey cmd
03 76 c7 8b d1 c8 eb eb 0b b0 54 58 8b f8 c6 a5 b9 33 66 6e 8c b0 70 5a ed d6 28 8c ce c0 62 28
f0 22 cb 22 ab 00 42 95 92 0c 30 0f 2b d1 98 ad 89 0a f8 7d 11 e3 12 0c c0 f6 99 d9 a0 2f 2a b3 5f
[LIB]:(sdk)send pubkey cmd
03 f0 c9 47 d1 6b 77 c0 31 9a 4f 02 42 2a fb 9b 1d 32 b0 bd 38 c6 35 de c9 5b c6 20 18 b2 c5 0b
85 12 b6 3b 53 b4 8e 14 e6 a6 b8 23 0b 18 45 09 4a f9 87 88 ba 4f ef 75 c7 92 12 16 5c b8 9a 39 07

[14:38:56.527]收←◆[LIB]:(sdk)rcv confirm cmd
05 2c 53 c7 3a 3e 24 79 ef f7 10 cd 36 ab 3f fa a4 a3 1c 1f e5 8c e5 6f 8b 42 59 56 10 41 da f3 18

[14:38:57.599]收←◆[LIB]:(sdk)send confirm cmd
05 ea aa 40 9f 64 b0 9b 7b fa 7d 9c 7e ce 06 75 b8 ac ea 99 1e f6 7f 5d 65 13 43 0b 2d 54 5a 64 99

[14:38:57.675]收←◆[LIB]:(sdk)rcv random cmd
06 f8 83 ee 4b 38 5a 4b 32 df 23 b3 1f 80 d9 1f f0 ac 8f 26 8f 39 e8 5b 74 82 78 af 93 42 ee b3
38
[LIB]:(sdk)send random cmd
06 88 de 06 00 c8 de 06 00 08 df 06 00 48 df 06 00 90 df 06 00 d0 df 06 00 10 e0 06 00 50 e0 06
00

[14:38:57.742]收←◆[LIB]:(sdk)rcv provision data cmd
07 88 fa d9 11 1d c8 21 70 4b 7a fc 52 04 f3 dc 6c ca 35 ab 64 39 95 d8 0c 60 16 f0 50 6a f7 a0
c1 12
[LIB]:(provision)device key f0 fd 49 73 2c 48 93 f0 db 96 7e 6e 62 0a 47 bd
[LIB]:(sdk)provision net info is 4e 59 10 e0 27 63 f0 9c 3c 41 46 2c 17 9e 08 0e 00 00 00 00 00 00 00 0a 00

[14:38:57.803]收←◆[LIB]:(sdk)provision suc!
[LIB]:(iv_update)tx GATT secure NW beacon:17 2b 01 00 90 3b 44 18 9f 33 89 58 00 00 00 00 64 d5 3f 84 2e e0 e1 6d

[14:38:57.850]收←◆[LIB]:(iv_update)RX secure GATT beacon,nk arr idx:0, new:0, pkt:17 63 01 00 90 3b 44 18 9f 33 89 58 00 00 00 00 64 d5 3f 84 2e e0 e1 6d

[14:38:57.977]收←◆[LIB]:(sdk)set filter type 0
[LIB]:(sdk)tx ctl,sno:0x1 op:0x3(?),src:0xa dst:0x0 par:00 00 00

[14:38:58.039]收←◆[LIB]:(sdk)add filter adr part ff ff 00 01
[LIB]:(sdk)tx ctl,sno:0x2 op:0x3(?),src:0xa dst:0x0 par:00 00 02

[14:38:58.107]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002e6 op:0x0880(COMPOSITION_DATA_GET),par_len:1,par:ff
[LIB]:(sdk)mesh tx NoAck,op:0x0002(COMPOSITION_DATA_STATUS),src:0x000a,dst:0x0001,sno:0x000003 par_len:51 par:00 11 02 01 00 41 10 69 00 07 00 00 00 0c 01 00 00 02 00 03 00 00 10 02 10 04 10 06 10 07 10 00

[14:38:58.305]收←◆[LIB]:(Basic)rc seg block ack:00 0c 00 1f 00 00 00
[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002e8 op:0x0000(APPKEY_ADD),par_len:19,par:00 00 00 de ee 96 9e 26 23 b7 ec be dd 48 5d 67 bf 40 ff
[LIB]:(sdk)mesh tx NoAck,op:0x0380(APPKEY_STATUS),src:0x000a,dst:0x0001,sno:0x000009 par_len:4 par:00 00 00 00

[14:38:58.394]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002ea op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 02 00
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x00000a par_len:7 par:00 0a 00 00 00 02 00

[14:38:58.457]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002eb op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 03 00
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x00000b par_len:7 par:00 0a 00 00 00 03 00

[14:38:58.521]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002ec op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 00 10
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x00000c par_len:7 par:00 0a 00 00 00 00 10

[14:38:58.583]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002ed op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 02 10
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x00000d par_len:7 par:00 0a 00 00 00 02 10

[14:38:58.644]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002ee op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 04 10
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x00000e par_len:7 par:00 0a 00 00 00 04 10

[14:38:58.707]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002ef op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 06 10
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x00000f par_len:7 par:00 0a 00 00 00 06 10

[14:38:58.769]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f0 op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 07 10
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000010 par_len:7 par:00 0a 00 00 00 07 10

[14:38:58.832]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f1 op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 00 13
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000011 par_len:7 par:00 0a 00 00 00 00 13

[14:38:58.894]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f2 op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 01 13
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000012 par_len:7 par:00 0a 00 00 00 01 13

[14:38:58.958]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f3 op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 03 13
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000013 par_len:7 par:00 0a 00 00 00 03 13

[14:38:59.022]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f4 op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 04 13
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000014 par_len:7 par:00 0a 00 00 00 04 13

[14:38:59.079]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f5 op:0x3d80(MODE_APP_BIND),par_len:8,par:0a 00 00 00 11 02 00 00
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000015 par_len:9 par:00 0a 00 00 00 11 02 00 00

[14:38:59.146]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f6 op:0x3d80(MODE_APP_BIND),par_len:6,par:0b 00 00 00 02 10
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000016 par_len:7 par:00 0b 00 00 00 02 10

[14:38:59.209]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f7 op:0x3d80(MODE_APP_BIND),par_len:6,par:0b 00 00 00 06 13
[LIB]:(sdk)mesh tx NoAck,op:0x3e80(MODE_APP_STATUS),src:0x000a,dst:0x0001,sno:0x000017 par_len:7 par:00 0b 00 00 00 06 13

[14:39:02.606]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0xffff sno:0x0002f8 op:0x0182(G_ONOFF_GET),par_len:0,par:
[LIB]:(sdk)mesh tx NoAck,op:0x0482(G_ONOFF_STATUS),src:0x000a,dst:0x0001,sno:0x000018 par_len:1 par:01

[14:39:05.669]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f9 op:0x0282(G_ONOFF_SET),par_len:2,par:00 37
[LIB]:(sdk)mesh tx NoAck,op:0x0482(G_ONOFF_STATUS),src:0x000a,dst:0x0001,sno:0x000019 par_len:3 par:01 00 0a

[14:39:09.201]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002fa op:0x0282(G_ONOFF_SET),par_len:2,par:01 38
[LIB]:(sdk)mesh tx NoAck,op:0x0482(G_ONOFF_STATUS),src:0x000a,dst:0x0001,sno:0x00001a par_len:3 par:00 01 0a

第一阶段:设备上电与初始化
开始执行Flash映射的自动交换流程,检测到没有OTA(空中升级)事件,因此不需要执行闪存映射的自动交换。系统将使用默认的映射方案

第二阶段:未配网状态下的广播
[14:38:29.317]收←◆[LIB]:(sdk)mesh tx NoAck,op:0x4e82(LIGHTNESS_STATUS),src:0x6a68,dst:0xffff,sno:0x000001 par_len:2 par:ff ff
分析: 设备在未配网状态下,主动发送一个无确认(Non-Acknowledged)的Mesh消息。
op:0x4e82: 对应模型LIGHT_LIGHTNESS_STATUS,即亮度状态。
src:0x6a68: 设备的随机地址(未分配正式单播地址前的临时地址)。
dst:0xffff: 目标地址为全网广播,意味着网络中所有节点都可能收到。
par:ff ff: 参数表示亮度值为最大(0xFFFF通常代表100%或未定义的最大值)。这表明设备在声明自己的存在和默认状态。
第三阶段:BLE连接与配网(Provisioning)流程
[14:38:52.894]收←◆[LIB]:(sdk)mesh_ble_connect_cb connHandle:0x40
分析: SDK检测到与Provisioner(手机App或网关)的BLE连接已建立。connHandle:0x40是这个BLE连接的唯一标识符。
[14:38:55.343]收←◆[LIB]:(sdk)rcv provision invite 00 00
分析: 设备接收到Provisioner发来的配网邀请(Provisioning Invite)​ PDU。参数00 00通常表示算法选择和超时时间等。
[LIB]:(sdk)send capa cmd 01 02 00 03 00 00 00 00 00 00 00 00
分析: 设备回复配网能力(Provisioning Capabilities)​ PDU,告知Provisioner自己支持的配网方式。
01: 支持1种算法(通常是FIPSP256 ECDH)。
02: 支持2种公钥类型(通常是No OOB和OOB)。
00: 支持静态OOB(Out-of-Band)认证。
03: 支持输出OOB,大小为3字节(例如,显示6位数字)。
00: 支持输入OOB,大小为0字节(不支持)。
后续全00为保留字段。
[14:38:56.479]收←◆[LIB]:(sdk)rcv start cmd 02 01 00 00 00 00
分析: 接收到配网开始(Provisioning Start)​ PDU。参数指定了使用的算法、公钥类型、认证方法(这里是00,表示无OOB)和认证值长度(00 00 00)。
[LIB]:(sdk)rcv pubkey cmd … (长串十六进制数据)
分析: 接收到Provisioner发送的公钥(Public Key)。这是ECDH密钥交换的一部分,用于后续生成会话密钥。
[LIB]:(sdk)send pubkey cmd … (长串十六进制数据)
分析: 设备发送自己的公钥(Public Key)给Provisioner。现在双方都拥有了对方的公钥。
[14:38:56.527]收←◆[LIB]:(sdk)rcv confirm cmd … (长串十六进制数据)
分析: 接收到Provisioner计算的确认值(Confirmation Value)。这个值基于双方的随机数、公钥等信息,用于防止中间人攻击。
[LIB]:(sdk)send confirm cmd … (长串十六进制数据)
分析: 设备发送自己计算的确认值(Confirmation Value)给Provisioner。
[14:38:57.599]收←◆[LIB]:(sdk)rcv random cmd … (长串十六进制数据)
分析: 接收到Provisioner发送的随机数(Random Number)。
[LIB]:(sdk)send random cmd … (长串十六进制数据)
分析: 设备发送自己的随机数(Random Number)给Provisioner。双方现在可以验证之前交换的确认值是否正确。
[14:38:57.742]收←◆[LIB]:(sdk)rcv provision data cmd … (长串十六进制数据)
分析: 接收到Provisioner发送的加密的配网数据(Provisioning Data),其中包含网络密钥(NetKey)、设备地址(Unicast Address)、IV Index等。

[LIB]:(provision)device key f0 fd 49 73 2c 48 93 f0 db 96 7e 6e 62 0a 47 bd
分析: 配网库(provision)根据交换的密钥材料,生成本地的设备密钥(Device Key)。这是一个非常重要的密钥,用于与Provisioner进行点对点通信。

[LIB]:(sdk)provision net info is 4e 59 10 e0 27 63 f0 9c 3c 41 46 2c 17 9e 08 0e 00 00 00 00 00 00 00 0a 00
分析: SDK解析并打印出配网得到的网络信息。
4e 59 … 08 0e: 网络密钥(NetKey)。
00 00 00 00: IV Index(初始为0)。
00 0a: 分配给本设备的单播地址(Unicast Address),即0x000a。
00: Flags(标志位)。
[LIB]:(sdk)provision suc!
分析: 配网成功完成!
第四阶段:配网后网络配置
[LIB]:(iv_update)tx GATT secure NW beacon:…
分析: 设备发送一个安全的网络信标(Network Beacon),宣告自己已加入网络。
[LIB]:(iv_update)RX secure GATT beacon,…
分析: 设备接收到一个网络信标(可能是自己发的回环包,或来自其他节点的)。
[LIB]:(sdk)set filter type 0
分析: SDK设置地址过滤器的类型为0,即白名单模式,只接收特定地址的消息。
[LIB]:(sdk)tx ctl,sno:0x1 op:0x3(?),src:0xa dst:0x0 par:00 00 00
分析: 发送一个控制层(Control Layer)消息,可能与设置过滤器有关。
[LIB]:(sdk)add filter adr part ff ff 00 01
分析: 向过滤器添加一个地址段。ff ff是地址范围,00 01表示添加1个地址(通常是全FF,即允许广播)。
[LIB]:(sdk)tx ctl,sno:0x2 op:0x3(?),src:0xa dst:0x0 par:00 00 02
分析 再次发送控制层消息,继续过滤器配置。
[14:38:58.107]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002e6 op:0x0880(COMPOSITION_DATA_GET),par_len:1,par:ff
分析: 设备接收到访问层(Access Layer)消息。
src:0x0001: Provisioner的地址。
dst:0x000a: 本设备的地址。
op:0x0880: Config Composition Data Get,请求获取设备的组成数据(包含元素、模型等信息)。
par:ff: 请求所有页面的数据。
[LIB]:(sdk)mesh tx NoAck,op:0x0002(COMPOSITION_DATA_STATUS),src:0x000a,dst:0x0001,sno:0x000003 par_len:51 par:00 11 02 01 00 41 10 69 00 07 00 00 00 0c 01 00 00 02 00 03 00 00 10 02 10 04 10 06 10 07 10 00
分析: 设备回复Config Composition Data Status消息,包含了自身的详细信息(公司ID、产品ID、版本ID、元素数量、支持的模型列表等)。
[14:38:58.305]收←◆[LIB]:(Basic)rc seg block ack:00 0c 00 1f 00 00 00
分析: 接收到对之前某个分段消息的块确认(Block Ack)。
[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002e8 op:0x0000(APPKEY_ADD),par_len:19,par:00 00 00 de ee 96 9e 26 23 b7 ec be dd 48 5d 67 bf 40 ff
分析: 接收到Config AppKey Add命令,Provisioner将一个应用密钥(AppKey)添加到本设备。参数中包含了NetKey索引、AppKey索引和16字节的AppKey本身。
[LIB]:(sdk)mesh tx NoAck,op:0x0380(APPKEY_STATUS),src:0x000a,dst:0x0001,sno:0x000009 par_len:4 par:00 00 00 00
分析: 设备回复Config AppKey Status,表示AppKey添加成功。
[14:38:58.394]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002ea op:0x3d80(MODE_APP_BIND),par_len:6,par:0a 00 00 00 02 00
分析: 接收到Config Model App Bind命令,将某个模型(Model)绑定到指定的应用密钥(AppKey)。
par:0a 00 00 00 02 00解析为:元素地址(0x000a), AppKey索引(0x0000), 模型ID(0x1002, Generic OnOff Server)。
后续多行类似的MODE_APP_BIND/MODE_APP_STATUS: Provisioner继续将其他模型(如Light Lightness Server, Generic Level Server等)绑定到AppKey上。这是为了让设备能够响应不同类型的控制消息。
第五阶段:LED控制(通过Generic OnOff模型)
[14:39:02.606]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0xffff sno:0x0002f8 op:0x0182(G_ONOFF_GET),par_len:0,par:
分析: 设备接收到一条获取开关状态(Get)的消息 (G_ONOFF_GET, OpCode 0x0182)。目标地址是0xffff(广播),但通常只有目标设备会响应。这里可能是发给所有灯的广播查询。
[LIB]:(sdk)mesh tx NoAck,op:0x0482(G_ONOFF_STATUS),src:0x000a,dst:0x0001,sno:0x000018 par_len:1 par:01
分析: 设备回复开关状态(Status)​ (G_ONOFF_STATUS, OpCode 0x0482)。
par:01: 参数01表示当前状态为开启(ON)。
[14:39:05.669]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002f9 op:0x0282(G_ONOFF_SET),par_len:2,par:00 37
分析: 接收到设置开关状态(Set)的消息 (G_ONOFF_SET, OpCode 0x0282)。
par:00 37: 参数00表示要设置为关闭(OFF),37可能表示过渡时间或延迟。
控制动作: 设备执行关闭LED的操作。
[LIB]:(sdk)mesh tx NoAck,op:0x0482(G_ONOFF_STATUS),src:0x000a,dst:0x0001,sno:0x000019 par_len:3 par:01 00 0a
分析: 设备回复新的开关状态。参数01 00 0a可能表示:当前状态(01=ON? 或表示上一个状态), 目标状态(00=OFF), 剩余时间(0a=10个单位)。具体含义取决于协议栈实现,但表明设备已接受并执行了关闭指令。
[14:39:09.201]收←◆[LIB]:(sdk)rcv access layer,retransaction:0,ttl:10,src:0x0001,dst:0x000a sno:0x0002fa op:0x0282(G_ONOFF_SET),par_len:2,par:01 38
分析: 再次接收到设置开关状态(Set)的消息。
par:01 38: 参数01表示要设置为开启(ON),38是过渡时间/延迟。
控制动作: 设备执行开启LED的操作。
[LIB]:(sdk)mesh tx NoAck,op:0x0482(G_ONOFF_STATUS),src:0x000a,dst:0x0001,sno:0x00001a par_len:3 par:00 01 0a
分析: 设备回复新的开关状态。参数00 01 0a可能表示:当前状态(00=OFF?), 目标状态(01=ON), 剩余时间(0a=10个单位)。同样表明设备已接受并执行了开启指令。
至此,整个流程分析完毕。从日志中可以清晰地看到设备从无到有加入Mesh网络,并接受控制的全过程

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐