本文主要介绍了 沁恒蓝牙芯片 CH58x 的flash 分区与数据存储管理,利用随机数作为蓝牙mesh地址,蓝牙mesh采用自组网
📋 个人简介
- 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎
- 📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:沁恒蓝牙mesh二次开发 🍁
- 💬格言:写文档啊不是写文章,重要的还是直白!🔥
【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址
- 1. 利用随机数作为mesh地址
- 1.1 代码逻辑思路:
- 1.2 测试结果
- 1.3 代码解析
1. 利用随机数作为mesh地址
【沁恒蓝牙mesh】CH58x flash分区与数据存储管理
1.1 代码逻辑思路:
- 生成 2字节的随机数
- 随机数 与 0x7000相或 (保证单播地址范围 0- 0x7fff)
- 读取flash地址,若为空,则写入;若不为空,则用上一次的地址
1.2 测试结果
1️⃣ :初次烧录;
2️⃣ :节点复位之后,读取到flash不为空,用flash中存取的地址
3️⃣ :测试flash中的随机数值,可以看到是小端存储
1.3 代码解析
uint32_t randNum = tmos_rand();
//EEPROM_READ(DATA_FLASH_SIZE - 4, (uint8_t *)&node_addr, 2);
EEPROM_READ(0x3004, (uint8_t *)&node_addr, 2);
APP_DBG("EEPROM_READ___ Mesh network node_addr is : 0x%04x ",node_addr);
if( 0 == node_addr || 0xffff == node_addr){
APP_DBG("node_addr flash is null,need to write data to flash");
randNum = randNum % 1000;
randNum |= 0x7000;
node_addr = randNum;
EEPROM_WRITE(0x3004, (uint8_t *)&node_addr, 2);
APP_DBG("EEPROM_WRITE Mesh network node_addr is : 0x%04x ",node_addr);
}