CH582m芯片ble-mesh组网问题

求问:

  1. mesh网络中,消息的转发问题,接收消息的节点收到消息后可以知道是谁转发给自己的吗?

  2. 使用有应答函数发送数据,回复的应答消息是可以被转发的吗?

  3. 往组播地址发送数据,只能使用透传通道(无应答)发送吗?

您好,mesh协议中没有要求转发节点将自身节点信息添加到消息中。转发节点会解析网络层头尾部,确定需要转发后会将TTL减1再发出去,不会添加自身节点信息。回复的应答消息也会被转发。


好的,谢谢。可以再帮我看一下第三个问题吗


组播没有做应答。A给B节点发消息,B给A回应答消息,源目地址是调换的。对于组播地址,如果想做应答,A->组播地址G,订阅了G的B节点想回应答,不可以是G->A。如果需要的话可以自拟协议做应答和重发,B直接回包给A还是B往G回包都可以尝试。


好的 ,谢谢


您好,我想再问一下,假如A和B订阅了G,C往G发消息,但是B无法直接收到C的消息,A可以收到,A收到该消息后还会转发出去吗?


对于组播消息,如果A启用了转发功能,C->G的TTL值在A处收到组播消息时仍大于等于2,那么A也会转发这则消息出去。


好的, 这几天遇到一个问题,普通节点配网完成后可以和配网设备正常收发消息,但是节点掉电后(开启了flash存储)重新上电,节点是检测到有网络地址的,但是发消息给配网设备,配网设备没有收到消息(没有进入收到消息回调函数),可能连续多发几次才能正常接收,这是需要什么操作吗。


您好,您使用最新EVT中的mesh库测试一下看看是否仍有问题。

CH583EVT.ZIP - 南京沁恒微电子股份有限公司 (wch.cn)

在发包方使用bt_mesh_seq_get函数监测一下发包前的包序列号是否每次发包都+1,掉电再上电恢复flash后,新发送包的序列号有没有比之前发的包序列号小。在收包方的vendor_message_srv_trans函数开头打印一下tid参数,看看tid参数有没有重复而不上报应用层。


您好,我每次发包前都把bt_mesh_seq_get获取的数据打印出来,发现每次掉电后上电这个值都是从0开始。我是在协议栈开起了flash储存的,发包方需要手动将此值储存入flash做处理吗


看下上电后的打印,mesh库版本是否为1.68,不是的话请用最新EVT尝试。


用了最新的例程试了一下,掉电后上电不会初始化SEQ值了, 每次上电首次发送数据的SEQ的值都是大于上一次的值的。想问一下这个值如果溢出了的话,协议栈会进行处理吗。


会有处理的,会按照mesh协议做一系列标志的处理,触发全网络的IV_index同步,这样其他节点能够接收到该节点从头计数的seq num。


您好,收到消息回调上报应用层之前会判断当前tid与上一次tid是否相同,相同则不上报应用层;出现的问题是每次上电后如果只发送一次数据,那么tid参数就会一直为129,一直不上报应用层。


每次上电只发一个包,那确实应该是这个现象,因为发包方的tid只在ram保存,上电后重置的。可以打印一下发包节点的发送函数中的tid参数以验证。如果真的需要每次上电只发一个包,可以保存到flash,上电后从flash恢复,根据上次发包的tid设置本次发包的tid参数。


好的  谢谢


只有登录才能回复,可以选择微信账号登录