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

STM32 唯一ID读取方法

[复制链接]
STMCU小助手 发布时间:2023-1-3 18:02

1、TI CC1310 sub1G的SDK开发之唯一识别号MAC地址读

& N+ l( ]% G% x7 v, I( a, j& Z: P

TM32微控制器有一个96位的产品唯一身份标识,在任何情况下都是唯一且不允许修改这个96位的产品唯一身份标识,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。


1 C+ l9 E$ W1 L: w7 w: E

想要读取唯一ID,就需要知道它的存储地址,在不同系列的MCU中地址是有差别的,我们查询了部分MCU的资料并将其总结如下:


8 h3 [  v- b  C) B, G. n
  1. //读取FlashSize
    . ^) {( f- \9 E+ @* M
  2. - H; K; d  c$ k3 z1 f# F
  3. uint16_t cpuGetFlashSize(void)4 w( ^; L: z* m8 K0 {
  4. {+ y  T9 Z" s8 j) B
  5. * O, f# J2 w6 J1 E% u  K
  6.    return (**(volatile u16*)(0x1FFF7A22));
    & d: A! s# U5 ?
  7.    // return (*(volatile u32*)(0x1FFF7A20))>>16;* f, @# E# L, B% b' z! e/ W
  8. }
    * t' U/ q2 V* F0 G3 y
  9. % @- }( `) I9 A
  10. //读取ChipID
    + L5 J5 D' I9 X# G" ?# g( R  q6 I  ^
  11. 2 b6 b7 q! \0 M+ Q# {9 g2 s* y! T( L
  12. void cpuidGetId(void)
    & v; S; x3 \$ Z4 W
  13. {
    6 l4 T6 [- `0 c- Y+ g
  14.     mcuID[0] = *(volatile u32*)(0x1FFF7A10);
    6 R6 ~7 O5 T$ s. a: y  a: E* `9 v" `
  15.     mcuID[1] = *(volatile u32*)(0x1FFF7A14);9 _* Q& `# d( z6 ?/ n" p5 m
  16.     mcuID[2] = *(volatile u32*)(0x1FFF7A18);
    : E: V5 d' k9 r6 r
  17. }1 [: G  f: g' {8 G

  18. ( c% o/ X/ E/ g8 q1 K

  19. 1 ~4 `( R8 D* e+ J- b* P" `% u
  20.       Send_data3 = ((CpuID[0]) >> 24)|0x00;. {3 C- e0 U: T/ E7 @
  21.       Uart1Write(&Send_data3, 1);  z* r( L$ [) \$ m( r
  22.                     $ i+ u* v- I+ W  A# G- p5 f- u; l7 b
  23.         Send_data3 = (CpuID[0] >> 16)|0x00;) r/ T  ]7 }+ r5 u6 O- q; a! {
  24.       Uart1Write(&Send_data3, 1);% m8 {0 K1 F; |$ P
  25.                     
    ) o' K1 L  D4 R( q6 o
  26.       Send_data3 = (CpuID[0] >> 8)|0x00;
    * l6 H9 s+ t" N5 z; D4 a
  27.       Uart1Write(&Send_data3, 1);" U# E( T; g& A5 J: ^
  28.         
    , Q( [- i- V& ~) ^) I
  29.       Send_data3 = (CpuID[0] )|0x00;
    9 h, p" b" |" V
  30.       Uart1Write(&Send_data3, 1);9 I% W8 K) X2 h8 G2 r6 I/ P/ l( n
  31.     " X' s3 e3 s$ G: R. F
  32.       Send_data3 = ((CpuID[1]) >> 24)|0x00;- `- P, B8 q, Q# }: W
  33.       Uart1Write(&Send_data3, 1);- t2 `0 e3 j. r* k, }- e( H# C
  34.                     
    5 X/ l% k" S- ]! T: j& @
  35.         Send_data3 = (CpuID[1] >> 16)|0x00;
    0 O& v& ^) Y  B+ D6 r% k
  36.       Uart1Write(&Send_data3, 1);* q% L: \% y: p( ?0 }$ B
  37.                     
    , j! N. N8 x7 L: d: b
  38.       Send_data3 = (CpuID[1] >> 8)|0x00;+ f' X- `+ a' b
  39.       Uart1Write(&Send_data3, 1);2 i. d0 \) j9 n) _" u' E
  40.         
    - }; K* c) }' A' F$ U5 H$ a; g4 }
  41.       Send_data3 = (CpuID[1] )|0x00;6 x, A6 U2 G, R$ [. B
  42.       Uart1Write(&Send_data3, 1);
    0 e* E# t. \8 B' @1 C
  43.         
    6 r- Y5 s7 y! X
  44.         Send_data3 = ((CpuID[2]) >> 24)|0x00;6 t+ J( ]0 c  A6 Z& R! O- s
  45.       Uart1Write(&Send_data3, 1);0 G7 s/ ?6 _5 a( Q; m; S' ?  z& c; V
  46.                     ; L% N2 l4 a! W9 i
  47.         Send_data3 = (CpuID[2] >> 16)|0x00;
    * i, K8 M, h$ N& P) {+ L
  48.       Uart1Write(&Send_data3, 1);
    5 G4 X' v* J, I9 q% a. S
  49.                     & p& t, |4 l% \) e0 @, w
  50.       Send_data3 = (CpuID[2] >> 8)|0x00;  u2 @/ r; _. X8 L
  51.       Uart1Write(&Send_data3, 1);. z  K3 e+ c3 Q7 b8 n
  52.         
    2 u. x; N! I) `2 ]
  53.       Send_data3 = (CpuID[2] )|0x00;
    ' S3 q& G0 }, B( j3 @  a
  54.       Uart1Write(&Send_data3, 1);
复制代码

' \8 C# d7 C  U' [

通过串口发送到PC就可以看到了。

串口发送程序;

printf("CPUID IS 0X%X %X %X.\r\n", mcuID[0], mcuID[1], mcuID[2] );   
( _; @3 a, [, H  g8 f1 L# Sprintf("Flash size is %d KB\r\n",cpuGetFlashSize());


# z& [; F" ~# @( B- B0 w4 }3 l

也可以通过 STLink Utility 查看

* ]5 r4 K& v' |0 a$ q' h5 I
4 e# s2 m1 }2 Y! M' a# Y# V
利用STM32的ID编码结合来进行产品加密,产品唯一的身份标识非常适合:5 N3 r: k2 H! @' G% u, l
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
( w3 \* w, V" W5 U● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
  e5 R# M) H/ o● 用来激活带安全机制的自举过程: E) n  K% S7 V$ {
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。+ ~- F& B6 C2 d/ I' j( T* ^
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
/ a8 i) h$ e3 A0 O4 r基地址:0x1FFF F7E8
% F8 q/ o$ ?" ^" g1 m/ s- S% A
2 m2 I) k! }' R" Q
每个CPU 出厂的时候都
% @* }# M7 o- D配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......$ t: C/ F" n+ Y" R
' \: i/ A/ |2 I
  1. static u32 CpuID[3];
    ) j' J8 p, k; g! m1 i  N+ R' p' i
  2. static u32 Lock_Code;3 Z- {& Y1 [0 w! @- D1 `

  3. ( h* p+ @' {! k# c$ {" l2 H
  4. void GetLockCode(void)
    ; l% W" }; h- Y/ O
  5. {
    1 J; ^3 O! g4 V. n
  6. //获取CPU唯一ID
    4 M9 F: I8 u, m/ j2 A, X
  7. CpuID[0]=*(vu32*)(0x1ffff7e8);8 X3 x. e6 |+ a8 M9 q5 |
  8. CpuID[1]=*(vu32*)(0x1ffff7ec);8 \' M2 d5 v$ r: N( H2 X$ x
  9. CpuID[2]=*(vu32*)(0x1ffff7f0);9 w; D5 I. R1 H' b! @6 b. t
  10. //加密算法,很简单的加密算法% m9 @& _2 c7 J: z& v
  11. Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
    , @! J; k: ^; N
  12. }
复制代码

( f: j0 y5 t: u

示例:

     STM32使用 CPUID加密算法,很简单的加密算法
% T4 I+ q+ ?; V2 n: a( W9 I- zLock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);+ ~9 b( x, G* z! X
     CpuID[0]    CpuID[1]    CpuID[2]    Lock_Code    CpuID[0]>>1    CpuID[0]>>2    CpuID[0]>>30 D' D: v" X$ x9 p$ A
1号CPU    0668FF30    3037564E    43023216    17A29B6D    3347F98    C0DD593    8604642- u4 {: _% K; H3 q( ]
2号CPU    066AFF30    3037564E    43024449    17A39DB4    3357F98    C0DD593    86048893 F- z+ X- f, M# v  h
3号CPU    066CFF30    3037564E    43021551    17A497D5    3367F98    C0DD593    86042AA3 _, A& {2 O1 Y* j3 y: t) u! I
4号CPU    066BFF30    3037564E    43024716    17A41E0D    335FF98    C0DD593    86048E2
5 q8 x5 o3 H  M3 M6 v' ]6 j. ]: w& G5号CPU    066CFF30    3037564E    43023851    17A49C35    3367F98    C0DD593    860470A
% A: R  Q2 R! V( `: O+ N6号CPU    066DFF37    3235564E    43152737    1826FA14    336FF9B    C8D5593    862A4E6
- }6 R- J* z% H) W


+ ~+ N6 E2 J: U5 Y3 m0 p* p6 S

————————————————
3 S) S, ]) X- ~7 G5 k; ^% C( i) P版权声明:jiangchao3392

1 M0 Z9 U7 J. w& \$ |
赞 收藏 评论0 发布时间:2023-1-3 18:02

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版