[麦麦茶水间] 【每周分享】基于AT32F403A讲解读取MCU的UID的方法

[复制链接]
555|1
dffzh 发表于 2025-9-28 11:04 | 显示全部楼层 |阅读模式
本帖最后由 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。

在确认起始的存储地址后,接下来就是编写代码进行读取,示例代码如下:
  1. // 定义UID的地址(请根据具体型号修改!)
  2. #define UID_BASE_ADDRESS  (0x1FFFF7E8UL)
  3. // 将地址转换为32位指针
  4. uint32_t *uid_addr = (uint32_t*)UID_BASE_ADDRESS;
  5. // 读取UID(96位,即3个32位字)
  6. uint32_t uid_part1 = uid_addr[0]; // 最低地址的字
  7. uint32_t uid_part2 = uid_addr[1];
  8. uint32_t uid_part3 = uid_addr[2]; // 最高地址的字
  9. // 打印UID(通过串口等)
  10. 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,现在清楚多了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

1393

帖子

23

粉丝
快速回复 在线客服 返回列表 返回顶部