阿哲
发表于: 2021-10-28 15:50:14 | 显示全部楼层

每个NXP Kinetis器件都自带一个唯一UID,通过使用SIM(System Integration Module,系统集成模块)中的寄存器‘Unique Identification Register(唯一标识寄存器)”。

sim-unique-id.jpg


虽然这个数字应该是唯一的,但上周我想知道为什么实验室的学生报告多个机器人的UID相同。所以也许这个数字不像它应该的那么唯一?


大多数芯片供应商都实施了这种“唯一ID”,但通常供应商无法提供有关此ID 是如何构建的信息。我使用该编号来跟踪或识别电路板。例如,我使用ID来构建一个哈希作为设备地址,或者使用固件中的ID和硬件版本列表,我可以保持固件相同,同时还可以根据ID做不同的事情。


使用Processor Expert或MCUXpresso SDK来打印输出UID,例如它可以显示在控制台上:

uid-reported.jpg


使用Processor Expert代码时,我未观察到两个ID是相同的。


如果使用的是NXP MCUXpresso SDK v2.8.2开发环境,可以通过SIM_GetUniqueID() 函数获取唯一UID:

  1. void SIM_GetUniqueId(sim_uid_t *uid)
  2. {
  3. #if defined(SIM_UIDH)
  4.     uid->H = SIM->UIDH;
  5. #endif
  6. #if (defined(FSL_FEATURE_SIM_HAS_UIDM) && FSL_FEATURE_SIM_HAS_UIDM)
  7.     uid->M = SIM->UIDM;
  8. #else
  9.     uid->MH = SIM->UIDMH;
  10.     uid->ML = SIM->UIDML;
  11. #endif /* FSL_FEATURE_SIM_HAS_UIDM */
  12.     uid->L = SIM->UIDL;
  13. }
复制代码

很快就明白了为什么学生报告了多个具有相同ID的MCU:因为上面的函数只使用了MH、ML和L,但没有包含H部分,因为没有定义SIM_UIDH


解决方法很简单:确保在项目设置中定义了SIM_UIDH,例如在编译器设置中:

sim_uidh-defined-in-compiler-settings.jpg


这样就可以获取另外的32位字节ID。

full-96bits-for-uid.jpg


如果您使用的是MCUXpresso SDK,并依赖于UID:确保您在项目属性中定义了SIM_UIDH,否则UID将缺少 32 位。现在我得到了完整的128位ID而不是96位。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 12 | 回复: 14



手机版|

GMT+8, 2024-11-21 20:23 , Processed in 0.035705 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表