ch582m BLEmesh 组网信息保存问题

最近使用ch582m 蓝牙组网功能时发现一个问题,协议栈里flash储存是开启的,节点配网完成后没有进行过清除网络的操作,但是掉电后又上电却又是未配网的状态;将dataflash清空后,烧录相同固件后再次进行配网,又正常了,想问一下这是为什么。因为是在做调试所以这些设备并不是第一次配网,前面有过配网和清除网络的操作,但是就有一两台会出现上面描述的问题;

    bt_mesh_is_provisioned()这个接口判断是否配网的依据是什么,我查看dataflash里面是有配置信息的,但是就是判断为未配网。

    此外,我还有个疑问,之前我发现每次清除网络都不会把dataflash里面存储的信息全部清除,再次配网又会占用更多的空间;我想问一下ble mesh所占用flash有地址范围吗,如果一直重复清除网络和配网的操作,是否会影响我自己写入flash的数据。

您好,使用的是哪些代码测试的,代码里有没有手动擦除dataflash。mesh协议栈默认占用前12K的dataflash;如果用到BLE的配对绑定功能,默认会占用dataflash尾部的256字节;如果用到OTA,会占用一个标志变量的大小,下方博客中有介绍。

在判断是否已配网,会先运行settings_load()尝试恢复网络信息,再运行到bt_mesh_is_provisioned()会判断是否有网络地址和各个密钥。

每次清除网络都不会把dataflash里面存储的信息全部清除”是针对配网者(中心节点)中心节点的吗。配网者保存的数据较多,dataflash擦除的最小单位是256字节,故不会删除节点后立即擦除所在扇区。dataflash的存储逻辑是发现存满一块后,整理搬运到另一块,可以配置块数限制,不会一直写满所有dataflash,详见 蓝牙mesh组网实践(dataflash的占用与管理) - JayWell - 博客园 (cnblogs.com)


好的  谢谢解答;想再问一下settings_load()这个函数恢复网络信息,恢复成功和恢复失败返回值是否一样呢。


有返回值如下图。若是dataflash中网络信息被篡改,有几率卡在这个函数里出不来,需要检查代码中是否有dataflash误操作,然后重新烧录时清空dataflash。如果重新烧录代码且无需保留原有的节点网络信息,需要清除dataflash中的原有数据,否则可能会对重新配网产生影响。image.png


我使用的是vendor普通节点的例程改的,又出现反复掉电上电后恢复不了配网信息的问题。我读取flash又是有信息的,settings_load()返回值为零,bt_mesh_is_provisioned()判断为未配网,如下图:

我怀疑是我误操作了dataflash,我想问一下flash的擦除不是只能一整页的擦除吗,但是提供的接口EEPROM_ERASE()又可以单个字节进行擦除,这是为啥

image.pngimage.png


您好,只是提供操作datafalsh的接口函数名叫EEPROM,实际上它还是flash。dataflash最小擦除256字节,不满256字节的向256字节对齐,始末位置跨多个最小单位则按最小单位擦除所有涉及到的flash。


你好,代码中我只对我储存在dataflash中的信息进行了擦除读写操作,下图为做储存的首地址;想问的是如果我对这部分dataflash读写擦除进行了误操作,是否会影响ble mesh储存配置的信息产生影响;每次写入之前都需要先擦除才能再次写入吗

image.png


mesh协议栈默认占用前12K的dataflash,上述起始地址都在12K之后,应该没有影响。可以将代码发送至邮箱zhaiyw@wch.cn,帮您看下。


已发送  


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