0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32芯片UID话题

茶话MCU 来源:ST MCU 信息交流 2020-06-15 10:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

绝大多数STM32系列的芯片都在固定的地方放置了长度为96位的唯一身份识别码,简称UID,只有极少数STM32系列芯片内部没有该UID,比方超值型STM32F0x0系列,STM32F100系列。具体到哪颗芯片到底有没有UID,在芯片数据手册的首页都有明确的说明,无需猜测。如下图所以:

芯片所对应的参考手册里,有对该UID存放地址的详细介绍。地址因不同系列或子序列而不同。

关于这个UID常有人有些疑问,有几个问题在这里稍微总结下:

1、有无问题。上面说了绝大部分STM32都内置UID,具体以查看数据手册为准。

2、唯一性问题。该UID的唯一性是靠96位这个整体来保证其唯一性,你若截取部分就不保证了。

3、内容问题。有人对这个UID内容似乎很好奇,这点在STM32参考手册里并无详细描述,但这并不影响使用。【因为STM8有些芯片也有96位UID,那里有较为详细的介绍,涉及芯片WAFER生产加工工程中的一些各种坐标信息、wafer编号信息、产品批号信息等】

4、地址问题。芯片UID的存放地址要到芯片对应的参考手册里去查对。特别要提醒的是,并非所有STM32系列的UID信息存放在某个起始地址开始的连续空间内。

5、怎么用的问题。说实在的,这个就很难说了,反正STM32有这个特性在,肯定没有固定不变的用法。具体怎么用就看你自己了。对于该UID,STM32参考手册给了些大致应用方向的介绍:

简单点说,该UID可以做特定序列号;做FLASH编程的安全密钥;激活安全启动流程。据我所知,曾有人拿这个UID码作为唯一发射码。中间按个做密钥配合加密技术的应用涉及到很专业的内容, ST官方也有不少这方面的培训材料,有兴趣的可以找相关资料进一步了解学习。

相对用的比较多的就是基于该UID设计用户程序的安全启动。其大致原理就是,用户程序第一次运行时将预定的未被改写过FLASH地址写入本芯片UID数据,之后每次启动都会重读UID数据并与特定FLASH地址的内容进行比对,若比对成功则正常运行,否则进入异常处理,不予正常运行程序。一般来讲,编写UID那一步在产品出厂前就完成了。

这里所说的第一次运行,就是指程序运行后,到预定的FLASH地址去读取内容,发现该处是被擦除过且未被改写的数据状态[一般为全1状态],并将UID数据写入相应的FLASH区域,这次运行视为第一次运行。

下面使用STM32L4芯片就上面应用做个简单的代码实现示范,仅供参考。注意,不同STM32芯片在FLASH编程这个地方并不完全一样。

先做些基本的准备工作。

我们根据实际应用程序情况预留出一块地址空间,我在下面示例中将STM32L476RG内部FLASH中间位置抽出1页来存放UID【注:很多STM32系列都具备OTP空间,也可以将UID写在这个区域】。STM32L4的FLASH编程采用双字编程,在给定FLASH编程地址时,注意8字节对齐。到相应的参考手册查找UID的地址及存放情况【即是连续存放还是分散存放】。

准备工作差不多了,就可以尝试组织程序代码了。

程序流程很简单。先判断指定FLASH地址是否为全1,如果是读取当前芯片UID并填写到相应地址;如果不是全1,则读取指定FLASH地址空间内容跟当前芯片UID数据比较,若正确,正常运行程序,若二者不符,则进入异常处理,不正常运行功能代码。

【下面是监测到指定flash地址未被改写过,进入UID内容填充的FLASH编程代码】

【下面是监测到指定flash地址已被改写过,进入比较判断及相应处理的代码】

上面代码是基于STM32L476芯片和STM32L4Cube库而编写的,主要介绍下大致实现过程,简单直观,无须过多解释。

不过,在实际应用过程中,这段功能代码就不要如此直白明了。这里给几点参考建议:

1、代码编写过程中,FLASH地址尽量不要一次性直接给出,最好几经变换后得出;

2、被存放的UID在不破坏唯一性的情况下可以适当做些变换后存放;

3、将这部分代码拆分成几个相互独立而有一定关联的不同函数块来处理。可以考虑将有的功能块放在用户主程序里,有的夹在正常的中断程序里,包括嵌套的中断程序里。

4、用来存放UID的flash地址尽量不要连续,最好在不同功能块访问相应的地址;

5、如果可能,考虑使用两套完全独立的UID改写、比对处理代码。即使用两套FLASH存储区域和比对代码,只有两套都比对成功后才正常运行程序,否则任何一套比对失败都进入保护状态。

因为刚好最近有人谈起这方面的话题,就顺便聊聊上面这些,权作参考。另外,还应该充分利用芯片的读写保护机制以及某些系列已经具有的信息安全保护机制,如PCROP、TrustZone等。还有,我们可以根据自身产品特点设计出一些结合硬件线路、机械组装的特定自检流程,让盗版者在生产加工环节遇到麻烦。这些地方都留给每个设计者大量的发挥空间,来保护自己的知识产权。

总之,关于产品的产权保护,应该从产品规划之初就着手考虑应对方案了,从最早的芯片选型开始,最好回避选用市面上使用过于普遍且老旧的芯片系列。相信芯片商在推陈出新的过程中也有安全性这方面的考量,使得芯片在这方面的性能越来完善和强大。

最后顺便提醒下,当我们的程序监测到发生侵权进入保护状态时,目的是保护自己的产权不受侵害。这个过程中我们可能会对代码采取些行动,阻止其正常运行,但注意不要因此而给第三方带来人身伤害。打个比方,假设你设计的产品是马达控制类交通工具,当发现有人盗版时,如果你在代码里只是简单粗暴地对代码进行破坏而完全不顾破坏后的异常代码可能导致什么后果,那就不妙了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    462

    文章

    53539

    浏览量

    459172
  • 身份识别
    +关注

    关注

    1

    文章

    56

    浏览量

    13037
  • STM32芯片
    +关注

    关注

    0

    文章

    38

    浏览量

    4814

原文标题:STM32芯片UID话题

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是(UID)寄存器

    产品唯一身份标识(UID)寄存器(80bit) UID寄存器存储了芯片的唯一身份标识符,UID芯片生产时写入,用户无法修改。
    发表于 12-05 06:28

    XL2417D无线收发芯片UID读取的操作流程

    XL2417D芯片是一款低功耗、高性能和高度集成的SoC,带有2.4G收发器。它集成了高性能2.4GHz射频收发器、丰富的基带功能、32位MCU和各种外围IO。XL2417D的2.4G射频收发
    的头像 发表于 09-28 09:16 478次阅读
    XL2417D无线收发<b class='flag-5'>芯片</b><b class='flag-5'>UID</b>读取的操作流程

    RT-Thread支持STM32H723VG芯片吗?

    RT-Thread支持STM32H723VG芯片吗,我现在的工程是裸板工程,芯片STM32H723VG的芯片,在构建工程时中找不到对应的
    发表于 09-22 06:57

    请问如何保证UID(唯一ID)的唯一性?

    如何保证UID(唯一ID)的唯一性?
    发表于 08-21 08:18

    如何将 UID 代码绑定到 M031 LDROM 和 APROM 固件?

    UID 代码绑定到 M031 LDROM 和 APROM 固件
    发表于 08-20 06:38

    替换STM32f429I芯片

    用GD32F芯片直接STM32f429i替换芯片,要求不改电路板,软件稍作修改?
    发表于 07-09 22:09

    RT-Thread支持STM32H723VG芯片吗?

    RT-Thread支持STM32H723VG芯片吗,我现在的工程是裸板工程,芯片STM32H723VG的芯片,在构建工程时中找不到对应的
    发表于 06-11 08:28

    使用ST25R3911B已经获取到Mifare Classic 1k的UID,但是始终获取不了卡片的内部数据,怎么做?

    使用ST25R3911B已经获取到Mifare Classic 1k的UID,但是始终获取不了卡片的内部数据,有相关的历程吗?
    发表于 06-09 08:01

    使用ST25R3911B已经获取到Mifare Classic 1k的UID,但是始终获取不了卡片的内部数据,怎么解决?

    使用ST25R3911B已经获取到Mifare Classic 1k的UID,但是始终获取不了卡片的内部数据,有相关的历程吗?
    发表于 06-04 06:25

    Linux黑客入侵检测的排查思路

    检查是否有UID和GID是0的账号 UID为0代表具有root权限。
    的头像 发表于 05-23 15:13 475次阅读
    Linux黑客入侵检测的排查思路

    stm32f103c8t6主控芯片无人机原理图

    stm32f103c8t6主控芯片无人机原理图
    发表于 04-29 17:02 2次下载

    边缘AI应用爆火!STM32N6芯片凭何领跑AI眼镜和机器人赛道?

    STM32N6芯片就发挥了重要的作用。为此,记者特别专访了意法半导体中国区微控制器、数字IC与射频产品部市场经理丁晓磊,请她分享了关于STM32N6芯片的性能和架构优势,以及在AI眼镜
    的头像 发表于 04-29 13:52 4577次阅读
    边缘AI应用爆火!<b class='flag-5'>STM32</b>N6<b class='flag-5'>芯片</b>凭何领跑AI眼镜和机器人赛道?

    用于LEGIC Advant UID/序列号的NFC读卡器,为什么无法读取这些卡的UID/序列号?

    我目前正在开发一个小展示柜,其中 LEGIC Advant 卡 (CTC) 的 UID/序列号应由 NFC 阅读器读取。在当前的设置中,我有一个使用 MFRC522 芯片的 ESP32。不幸
    发表于 04-02 08:07

    如何使用PN7制作具有5180字节UID的身份验证mifare plus?

    我正在开发的读卡器使用 PN5180。 我想读取 7 字节 UID 的 Mifare Plus ev1 卡 但 PN5180数据表仅解释了4字节 UID 卡。 如何使用 PN7 制作具有 5180 字节 UID 的身份验证 mi
    发表于 04-01 06:37

    STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计

    。 ③主MCU程序做完整性校验,完整性校验绑定UID,防止STM32程序被破解者破解得到后通过窜改来跟踪、分析、破解加密方案。(可参考笔者另一篇文章《浅谈加密芯片的一种破解方法和对应加密方案改进
    发表于 12-27 13:03