你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32自身唯一ID读取

[复制链接]
STMCU小助手 发布时间:2022-12-17 14:00

产品唯一的身份标识非常适合:

● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
, u6 f! m6 q: J● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。4 t. m, e' u3 M- Y' Z- ?" i
● 用来激活带安全机制的自举过程
% q3 s: x! \! O0 W8 t5 P$ W96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
* J8 q: ^+ l3 P这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。& R/ @7 D8 F% e) s
基地址:0x1FFF F7E80 T( C( ]: j' C! H5 f

8 |; U8 T8 m7 B" }+ k每个CPU 出厂的时候都  c* O, G% D6 V7 p( w8 z* S
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......0 D* M3 B0 a& D* b- \4 I% o
# P4 ~: W- M9 a: N6 l7 a
static u32 CpuID[3];/ a; D& I9 {- X
static u32 Lock_Code;" v/ A4 a$ h0 X: |, G9 B4 i
  K4 _3 B3 ]% ?8 L- l+ S/ `
void GetLockCode(void)/ f  b6 N% h! H; |1 q
{8 A5 L) w3 T+ `$ `
//获取CPU唯一ID
; n( I% Q; F1 ICpuID[0]=*(vu32*)(0x1ffff7e8);
" U4 |7 x# v) V% l+ s7 f$ t: J) j- nCpuID[1]=*(vu32*)(0x1ffff7ec);, F" v: v# a4 u4 x% X. |
CpuID[2]=*(vu32*)(0x1ffff7f0);
1 }/ ~" E/ Y- F0 N/ f//加密算法,很简单的加密算法3 W/ n, ]- r( v  O: N$ m, y
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
7 I/ N: j' [2 u7 W$ o1 T0 m3 X}
& U/ J# ~7 e5 K! [. ?
& b( P: A1 O; g  h" \/ t% w

然后再用上次所用的 FLASH_ProgramWord(LOCK_ADDR,Lock_Code); 写到FLASH 的某个角落就好了,然后再在程序中验证这个值是否正确。感觉ID的调取很是方便倒是加密算法让人头痛,当然了要是把MD5移植过来应该不是太难。现在市场中这么多的廉价J-link还不是中国牛人xxx....


# Y- ]: k1 n- e3 s  k  n6 f- _9 K

产品唯一的身份标识非常适合:
( l5 e! y6 \+ A, N● 用来作为序列号(例如USB字符序列号或者其他的终端应用)) A( ~9 @( q: {4 S+ _$ N
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
! c" k/ S( ?& L! b3 C5 c● 用来激活带安全机制的自举过程
& y, z) A7 d) }$ j  G, h4 ~  y# ^96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。8 j6 v* O3 ]* G
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。


4 T' a0 W' G) r2 v% p

un=(*( u16 *)0x1FFFF7E0);   //闪存容量寄存器
0 B" Q/ M4 ]. a7 Eprintf(" The Flash size: %d KB\r\n",un);   

printf(" Unique device ID");
& g% V. x$ S: v7 ^; d! L; U; Yun=(*( u16 *)0x1FFFF7E8);   //产品唯一身份标识寄存器(96位)
+ r& j9 [4 k' D  C' X: Xprintf(" U_ID[15:0]: %d\r\n",un);

un=(*( u16 *)0x1FFFF7EA);  [4 B  z2 i# j8 E
printf(" U_ID[31:16]: %d\r\n",un);

un=(*( u32 *)0x1FFFF7EC);
" x* b$ h: p. i- r2 g6 E3 Bprintf(" U_ID[63:32]]: %d\r\n",un);  

un=(*( u32 *)0x1FFFF7EF);% `& {9 K: m! ]3 C5 Y
printf(" U_ID[95:64]: %d\r\n",un);


% ?/ m, k. k: K( o1 w

转载自:鱼入大海_

3 u! y* i( T2 [3 c
收藏 评论0 发布时间:2022-12-17 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版