【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址

本文主要介绍了 沁恒蓝牙芯片 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️⃣ :初次烧录;

【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址_第1张图片

2️⃣ :节点复位之后,读取到flash不为空,用flash中存取的地址

【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址_第2张图片

3️⃣ :测试flash中的随机数值,可以看到是小端存储

【沁恒蓝牙mesh】CH58x flash分区之利用随机数作为蓝牙mesh地址_第3张图片

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);
    }

你可能感兴趣的:(沁恒蓝牙mesh二次开发,c语言,嵌入式C,物联网,蓝牙组网,蓝牙mesh)