蓝牙学习之uuid与mac

Telink 中的 device uuid = 设备的全球唯一身份 id,用于识别、绑定、认证和管理设备。

在sdk中 device uuid 的生成如下:

cpp 复制代码
//在SDK中 device uuid默认是通过以下三个函数生成。
user_prov_multi_device_uuid()
uuid_create_by_mac(tbl_mac,prov_para.device_uuid)
uuid_create_md5_from_name()
cpp 复制代码
void uuid_create_by_mac(u8 *mac,u8 *uuid)
{
    // test md5 function part 
	/*
	static char name_string[]="www.widgets.com";
	uuid_create_md5_from_name((uuid_mesh_t *)uuid, NameSpace_DNS, name_string, 15);
	*/
    uuid_mesh_t NameSpace_DNS = { /* 6ba7b810-9dad-11d1-80b4-00c04fd430c8 */
            0x6ba7b810,
            0x9dad,
            0x11d1,
            0x80, 0xb4, 
            {0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}
    };
        
	char name_string[16] = {0};
	memcpy(name_string,mac,6);
	uuid_create_md5_from_name((uuid_mesh_t *)uuid, NameSpace_DNS, name_string, 15);
}

其中 6ba7b810-9dad-11d1-80b4-00c04fd430c8 是 UUID 标准中预定义的"命名空间(Namespace)"之一,具体称为 NameSpace_DNS。它来源于 RFC 4122 ------《A Universally Unique IDentifier (UUID) URN Namespace》这份互联网标准文档(发布于 2005 年)。该 RFC 定义了 UUID version 3(基于 MD5)和 version 5(基于 SHA-1) 的生成方法,即通过一个"命名空间 UUID"和一个"名称字符串"共同生成一个确定性的、唯一的 UUID。

其中mac是设备的MAC地址。

从uuid_create_md5_from_name()函数名称可知用的是UUID version 3(基于 MD5)。

用python计算结果如下:

python生成的uuid = 78b35b90-3299-3c1f-a061-0420bcdd3037,如上图

实际telink生成的uuid= be fd 3e 0b 77 7f 8e 30 8e 4b 4a 24 7d 66 90 d8 ,如下图

两个UUID不符,推测实现函数uuid_create_md5_from_name()中做了特殊操作,这部分sdk不公开,不做讨论。

那mac是怎么生成的?

telink的做法是在Flash中读取,或者随机生成。6字节的MAC,前3字节随机生成,后3字节根据芯片型号指定。

cpp 复制代码
u32 flash_sector_mac_address = 0x76000;
...
        generateRandomNum(5, value_rand);
		tbl_mac[0] = value_rand[0];
		tbl_mac[1] = value_rand[1];
		tbl_mac[2] = value_rand[2];

		#if(MCU_CORE_TYPE == MCU_CORE_8258)
			tbl_mac[3] = 0x38; //company id: 0xA4C138
			tbl_mac[4] = 0xC1;
			tbl_mac[5] = 0xA4;
...
flash_write_page (flash_sector_mac_address, 6, tbl_mac);
...

验证:

通过BDT读取0x76000的数据就可以验证,如下图所示

读取结果符合前3字节随机生成,后3字节为38 c1 a4 。

相关推荐
傻啦嘿哟4 分钟前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670795 分钟前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
2601_9620776014 分钟前
python Dejavu库快速识别音频指纹实例探究
python·音乐识别·dejavu库·音频指纹识别·实例探究
传奇开心果编程23 分钟前
【xilem0.4基础语法学与练】第13课:Xilem 0.4 最简短代码体现“一切皆设计图“
学习·rust·前端框架
科技苑31 分钟前
如何用Python编程实现一个简单的Web爬虫?
人工智能·python
小雪崩35 分钟前
嵌入式学习 day45:51单片机基础
学习·51单片机
dayDayupbetter1 小时前
Visual C++ 2010安装与使用高手秘籍
python
隐擎fox1 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
医疗信息化王工1 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
小玮看世界2 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python