蓝牙mesh组网实践(dataflash的占用与管理)
蓝牙mesh协议中有不少数据需要存储dataflash,以记录网络中的数据。一些数据只需要配网时保存进dataflash,比如说本节点的网络地址、各类密钥等;另一些数据需要在运行中动态更新,比如说消息序列号(seq num)等。
在芯片作为发送方时,在新增发送消息数达到seq保存步长时会保存相关数据,作用是在断电后重新上电时会将根据dataflash中的消息序列号,再加上一个保存步长来恢复为当前消息序列号,保证此值大于此节点先前发送的消息的序列号,以免被消息接收方判断为过往消息。默认seq保存步长为60(在app_mesh_config.h中由宏CONFIG_MESH_SEQ_STORE_RATE_DEF设置)。作为发送方,每次保存12个字节,一块4K的扇区可以保存约341次,但考虑到其他数据的开销,实际要比341小一些。
在芯片作为接收方时,设置宏CONFIG_MESH_ALLOW_RPL_CYCLE为FALSE时,在接收到某一节点A的消息数达到rpl保存步长时需要保存相关数据,作用是在断电重新上电时恢复发送地址、序列号等数值,以帮助判断发送方的消息是否过期。默认rpl保存步长为60(在app_mesh_config.h中由宏CONFIG_MESH_RPL_STORE_RATE_DEF设置)。作为接收方,针对节点A每次保存16个字节,需要通信的节点数量越多,占用flash大小也越大,flash保存频率也越高,也可按上述方式估算扇区保存次数。若设置宏CONFIG_MESH_ALLOW_RPL_CYCLE为TRUE,则不再保存节点A的网络信息到falsh中,只在ram中保留,在断电并上电ram重置后,会有遭到重放攻击的风险。
鉴于dataflash有其擦写寿命,协议栈在存满n-1块扇区后,会收集整理数据,整合到另一块扇区。比如说宏配置了使用8块扇区,已存满7块扇区,协议栈会整理7块扇区中的数据,整合到第8块dataflash中。整理dataflash过程中涉及到字符串比对、拷贝等操作,故代码运行的时间越长,dataflash中保存的数据量以及数据间差异越大,整理dataflash用到的时间就越多。
最新EVT中,在app_mesh_config.h中有宏可进行配置,如下图,默认使用前3*4K的dataflash空间。

如果用户需要更改首地址,在dataflash头部存放用户数据,注意首地址要与NVS扇区存储大小对齐,比如NVS扇区存储大小设为2K,NVS存储首地址可为2K、4K、6K…。
若使用到了BLKE且配对绑定保存置为true,那么配对绑定的信息保存在dataflash尾部,具体位置见config.h中的BLE_SNV_ADDR。

需要注意的是在mesh代码中使用看门狗。582/573看门狗溢出计时最长可达约557ms,但整理一块4K大小的扇区,耗时最长可达1s,而整理dataflash又在协议栈中完成,故在使用到看门狗时,主循环中可能来不及喂狗。解决方法有二,一是减小整理dataflash所需的时间,适合需要保存的数据较少的情况,可以将保存的扇区数量以及扇区大小减小,最小以初始化不报错为准;二是拉长看门狗复位的超时时长,可以通过在看门狗中断中计数的方式,比如说溢出计数到10才复位,这样可以有5.5s的时长留给dataflash整理,延长看门狗复位的时间。
看门狗的使用可以参考博客:CH573 CH582 CH579 看门狗使用 - debugdabiaoge - 博客园 (cnblogs.com)
小贴士:①seq保存步长与rpl保存步长不是必须一致,可以按需调整。
②保存dataflash时没有用户层提示,保存dataflash的时间点需要根据发包频率与步长设置来估算,在跑一些实时性较高的代码时需要评估一下延时。
③整理dataflash的过程中,涉及到操作flash的库,会关闭总中断,可能不会及时触发包括看门狗在内的中断,但标志会保存,操作完dataflash后会触发中断。
④整理dataflash的过程中若突然断电打断了dataflash的整理,不会对上电重启时恢复的配网信息造成影响,因为在整理好dataflash数据前会保留旧的扇区,擦写好新的扇区才会擦除旧扇区。
蓝牙mesh组网实践(dataflash的占用与管理)的更多相关文章
- SIG蓝牙mesh笔记2_mesh组成
目录 SIG 蓝牙 mesh 组成 mesh网络概述 网络和子网 设备和节点 devices & nodes 入网 mesh中的几个概念 智能插座例子 SIG 蓝牙 mesh 组成 mesh网 ...
- [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...
- 常见无线组网分析(NB-IOT组网和Mesh组网)
NB-IOT LoRa Zigbee WIFI 蓝牙 组网方式 基于现有蜂窝组网 基于LoRa网关 基于Zigbee网关 基于无线路由器 居于蓝牙Mesh的网关 网络部署方式 节点 节点 + 网关 ...
- 蓝牙mesh介绍
了解一下关于蓝牙Mesh的知识. 蓝牙mesh网络使用,并且依赖于低功耗蓝牙(BLE).低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈. 蓝牙BR / EDR能够实现一台设备到另一台设备的连接和通信 ...
- 解密蓝牙mesh系列
解密蓝牙mesh系列 https://mp.weixin.qq.com/s/KdVhkgcmHIboA0xPFqFCgQ 1.NRF52832 & NRF52840 BLE mesh 协议栈 ...
- 蓝牙mesh网络技术的亮点
蓝牙mesh网络技术的亮点 The highlights of Bluetooth mesh networking technology 导言 蓝牙是当今最主要的低功耗无线技术之一,对无线设备用户和开 ...
- 关于蓝牙Mesh您必须知道的七件事
蓝牙技术联盟于7月19日正式宣布,蓝牙(Bluetooth)技术开始全面支持Mesh网状网络.全新的Mesh功能提供设备间多对多传输,并特别提高构建大范围网络覆盖的通信能力,适用于楼宇自动化.无线传感 ...
- 蓝牙5.0芯片NRF52810和NRF52832可进行mesh组网
提供智能化mesh照明解决方案,在现有传统灯具的基础上,插入NRF52832/52810的照明Mesh模块,可以迅速升级现有的传统灯具,配合手机APP和服务器系统,使每一盏灯成为物联网的一个智能节点, ...
- SIG蓝牙mesh笔记3_网络结构
目录 3. Mesh Networking 3.1 Bearers 承载层 3.2 Network Layer 网络层 3.2.3 Address validity 地址有效性 3.2.4 Netwo ...
- SIG蓝牙mesh笔记5_Provisionging
目录 Bluetooth Mesh Provisioning Provisioning bearer layer Generic Provisioning PDU Bluetooth Mesh Pro ...
随机推荐
- 详解 Gulp4 和 Gulp3 的区别
最近在开发几个网站,为了优化一下前端代码,就复习一下gulpjs,之前工作gulp用的版本比较老,但是今天看了新的版本,新的语法出了一下,但是为了时间,我决定使用之前gulp3的旧版本,后面发现自己环 ...
- JDK的下载与安装-环境变量的配置
JDK的下载与安装 环境变量的配置 配置环境变量作用 开发Java程序,需要使用JDK中提供的工具,工具在JDK9安装目录的 bin 目录下. 在DOS命令行下使用这些工具,就要先进入到JDK的bin ...
- 基于GenericAPIView以及五个视图扩展类写接口
目录 基于GenericAPIView以及五个视图扩展类写接口 一.基于GenericAPIView写接口 二 .基于GenericAPIView以及五个视图扩展类写接口 基于GenericAPIVi ...
- Java最全八股文(2023最新整理)
本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...
- python3中,isinstance() 函数
#isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). #返回值:如果对象的类型与参数二的类型相同则返回True,否则返回False 使用isinstance函数的实 ...
- uniapp 分享 绘制海报
小程序分享海报,由于微信的限制,暂时无法直接分享小程序到朋友圈(虽然微信开发者工具基础库从2.11.3开始支持分享小程序到朋友圈,但目前仍处于Beta中)所以生成海报仍然还是主流方式 主体思路:将设计 ...
- GIN--HOW POWERFUL GNN
HOW POWERFUL ARE GRAPH NEURAL NETWORKS? 本文是 Jure Leskovec 又一力作,首先对图神经网络的原理做了深入检出.提纲挈领的叙述,然后从原理方面介绍了如 ...
- JZOJ 4212. 【五校联考1day2】我想大声告诉你
题目 解析 设 \(f_{i,j}\) 表示 \(i+1..n\) 个人能受到 \(j\) 次攻击的概率 因为选人出局的顺序是无所谓的,所以我们设从 \(1..n\) 依次选人出局 那么转移时需要分类 ...
- Diffusers中基于Stable Diffusion的哪些图像操作
目录 辅助函数 Text-To-Image Image-To-Image In-painting Upscale Instruct-Pix2Pix 基于Stable Diffusion的哪些图像操作们 ...
- Tomcat修改端口号问题
今日面试问到如何修改Tomcat的问题 懵了 1.第一种就是我们常用的编辑器中 如:Idea中 一键式修改端口号(我只知道这个) 在下面的图 Http port后处修改即可,默认为8080端口 2.第 ...