dffzh 发表于 2025-9-28 11:04

【每周分享】基于AT32F403A讲解读取MCU的UID的方法

本帖最后由 dffzh 于 2025-9-28 11:09 编辑

MCU的UID(Unique Device ID)是制造商在生产过程中烧录到芯片内部的唯一设备标识符,一般包括制造商ID、产品系列、制造日期等信息,主要用于设备识别、安全验证等场景。UID一般包括96位(12字节)或者128位(16字节),可以通过程序从其存储地址里面读取出来,接下来就介绍一下读取方法,并通过雅特力的AT32F403A芯片来实际操作一次看下读取的结果。首先我们要读取UID信息,首先得知道它的存储地址,一般在芯片的用户手册里会进行如何,比如在AT32F403A的用户手册里面搜索关键字UID,就可以查到:通过以上信息就可以知道,该MCU的UID存储的起始地址就是0x1FFFF7E8。不同MCU在用户手册里面对UID的命名可能会有区别,可以尝试以下关键字进行搜索:UID、Unique DeviceID、Serial Number、DeviceIdentifier。
在确认起始的存储地址后,接下来就是编写代码进行读取,示例代码如下:// 定义UID的地址(请根据具体型号修改!)
#define UID_BASE_ADDRESS(0x1FFFF7E8UL)
// 将地址转换为32位指针
uint32_t *uid_addr = (uint32_t*)UID_BASE_ADDRESS;
// 读取UID(96位,即3个32位字)
uint32_t uid_part1 = uid_addr; // 最低地址的字
uint32_t uid_part2 = uid_addr;
uint32_t uid_part3 = uid_addr; // 最高地址的字
// 打印UID(通过串口等)
printf("UID: %08X-%08X-%08X\r\n", uid_part3, uid_part2, uid_part1);
在板子上仿真运行后,通过串口打印信息即可看到这颗MCU的UID信息:再在另一块板子上仿真运行后,通过实时监控数据查看UID:可以看出,每颗MCU的UID信息是不一样的,其中相同部分数据的具体含义有兴趣的可以再研究一下,应该是厂商信息什么的。

懒癌晚期患者 发表于 2025-9-30 14:37

学习了,之前一直不知道如何读取MCU的UID,现在清楚多了

dffzh 发表于 2025-10-11 08:44

懒癌晚期患者 发表于 2025-9-30 14:37
学习了,之前一直不知道如何读取MCU的UID,现在清楚多了

可以实操看下。

治愈糖果屋 发表于 2025-10-11 12:28

这个教程很实用,特别是对于我们这些嵌入式开发者来说,UID的读取是基本技能之一。
页: [1]
查看完整版本: 【每周分享】基于AT32F403A讲解读取MCU的UID的方法