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

STM32 唯一ID读取方法

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

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

  H1 j! r6 t  t) x3 C* z& R

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

6 p' j' V( n! k6 N8 b7 v. v* |/ k

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


/ \  B# l' ]$ z, u3 j9 C) ?
  1. //读取FlashSize! X1 U) }% g+ V- Z) S1 A

  2. # i' J( T, |& b, d2 ?7 Z
  3. uint16_t cpuGetFlashSize(void)
    * c. m6 S% e" o( K
  4. {2 G/ R/ k: p1 ]4 D
  5. * w$ J$ A/ [7 r7 _/ ~3 g
  6.    return (**(volatile u16*)(0x1FFF7A22));
    - y4 s6 M9 e' L: m' r" c$ B
  7.    // return (*(volatile u32*)(0x1FFF7A20))>>16;& i' A  p7 p( `  g
  8. }
    " o( }' x9 N' C# r5 h9 p& ~
  9. 7 @, q9 e7 w' E6 |& |
  10. //读取ChipID
    " K) d7 u" V  D! Z) y# x& T5 P

  11. ! d. w; X, r' ?- v
  12. void cpuidGetId(void)
    7 V: ]; n0 t* T+ U  B5 ?9 T6 q
  13. {/ B! b) h: E1 y  [7 [6 ~; V( Y
  14.     mcuID[0] = *(volatile u32*)(0x1FFF7A10);
    $ ^$ u$ T* B+ S
  15.     mcuID[1] = *(volatile u32*)(0x1FFF7A14);3 x+ ~% @/ p- K2 Y/ _  @) A3 F) b
  16.     mcuID[2] = *(volatile u32*)(0x1FFF7A18);
    ( n8 R2 ~) X1 b) \
  17. }& C0 |* U. _; D3 v0 _

  18. : \- b4 ~! S& V* @8 v

  19. 0 L( h! C) q$ O, E% z  J2 l+ t" \
  20.       Send_data3 = ((CpuID[0]) >> 24)|0x00;! Y6 d, \8 i% H1 i. y
  21.       Uart1Write(&Send_data3, 1);
    : H/ H' E0 N6 v/ K/ A# z
  22.                     
    ( g3 }1 `& G* o' }9 \
  23.         Send_data3 = (CpuID[0] >> 16)|0x00;/ b& T. e( T/ u: L
  24.       Uart1Write(&Send_data3, 1);
    + o$ K; v' N- L2 f! ~3 \
  25.                     
    8 H% Y) v* I$ T; y, p
  26.       Send_data3 = (CpuID[0] >> 8)|0x00;* S, l$ t: Q, C* ~4 j
  27.       Uart1Write(&Send_data3, 1);
    , o3 T' O$ o4 |. u% ~( d
  28.         ' K: J& d" i9 H/ v$ t) q
  29.       Send_data3 = (CpuID[0] )|0x00;1 i7 K. \9 Z- [
  30.       Uart1Write(&Send_data3, 1);
    : G2 Q% O' k# U& Q
  31.       c! V6 q! L% G2 Q! C' C4 `6 l
  32.       Send_data3 = ((CpuID[1]) >> 24)|0x00;) j( a  L" b7 q! ]# o# W
  33.       Uart1Write(&Send_data3, 1);6 Y$ |( Q5 X$ n+ L- T1 M
  34.                     8 e) {& G- `; _4 E; V2 e4 @
  35.         Send_data3 = (CpuID[1] >> 16)|0x00;
    7 {+ w  |. ?' i+ n5 U: C
  36.       Uart1Write(&Send_data3, 1);
    " |$ Y, X5 P9 L2 c2 C+ p
  37.                     # b9 A& H0 E0 X9 Z! J7 c5 @
  38.       Send_data3 = (CpuID[1] >> 8)|0x00;7 |4 H4 h; r( J( e3 D, d; K3 k8 j
  39.       Uart1Write(&Send_data3, 1);
    8 u- r4 Q/ l/ D. H$ [! d
  40.         
    7 G% Z# {! u% c$ z/ w  M
  41.       Send_data3 = (CpuID[1] )|0x00;
    : r) Q( t" I: Y" {% h
  42.       Uart1Write(&Send_data3, 1);
    4 }' U$ E9 D- B; C& K+ v9 w! J
  43.         ) V2 p3 R( ~: W9 {1 B: o
  44.         Send_data3 = ((CpuID[2]) >> 24)|0x00;8 y. ?* Y. u4 p) B4 ~
  45.       Uart1Write(&Send_data3, 1);
    / a* C/ g; \- t4 W0 N
  46.                     7 y" k% }7 `2 i( p2 G" I( j
  47.         Send_data3 = (CpuID[2] >> 16)|0x00;
    2 m9 S5 \7 z0 a% I
  48.       Uart1Write(&Send_data3, 1);( B1 S# V) \* W) \
  49.                     
    + h9 N. |* Q4 ]7 T0 I! \
  50.       Send_data3 = (CpuID[2] >> 8)|0x00;
    1 \% C+ f1 Y2 Q" h+ K% J8 g" L
  51.       Uart1Write(&Send_data3, 1);
    ) e; L1 [0 Y8 O
  52.         
    : j9 {/ s3 h& K
  53.       Send_data3 = (CpuID[2] )|0x00;
    7 f1 J" N! L- f) j$ p9 @' ]
  54.       Uart1Write(&Send_data3, 1);
复制代码

+ J( B0 _" d5 L

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

串口发送程序;

printf("CPUID IS 0X%X %X %X.\r\n", mcuID[0], mcuID[1], mcuID[2] );   5 M: c/ y, I& Y5 B3 p) s+ E% Z
printf("Flash size is %d KB\r\n",cpuGetFlashSize());

! M  h' c: E( f

也可以通过 STLink Utility 查看

9 [2 Y2 D% k  r& M

& u  p/ Q: M: h" t& b利用STM32的ID编码结合来进行产品加密,产品唯一的身份标识非常适合:
; @9 B5 X8 @& ], N● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
# \; t9 F6 R! R. n- E● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
3 M- s/ r6 s* l- ~0 O● 用来激活带安全机制的自举过程! B: g" P' `4 c4 D  p- z& h+ g
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。( C# |# l$ N) {/ H4 U9 M. K
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
+ W2 d5 p8 I0 N  o( d7 n基地址:0x1FFF F7E8
3 I) N. N  n% m! X3 E9 T( }: F. N& N7 F  g( }

1 v: C8 X3 @) o, p) W3 P) ^每个CPU 出厂的时候都2 V3 _0 P1 A% R. T6 k  R/ Z
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......
- R; _# J: @% {$ T- o( {% ~6 `! z0 b6 I% W: G+ k
  1. static u32 CpuID[3];
    9 O( \0 p  S. V: V8 P
  2. static u32 Lock_Code;2 ~( Q3 }# s% O$ M
  3. 6 s! R7 k# ~' N# T8 G+ E% \
  4. void GetLockCode(void). \: L2 Y7 \" z( I$ w2 C* n: b
  5. {
    3 K$ N+ W( `% c( x6 ^* E% ^
  6. //获取CPU唯一ID
    6 B% \2 s. r- t1 J! h3 c6 C
  7. CpuID[0]=*(vu32*)(0x1ffff7e8);
    ' d  i( m/ U/ X! N$ ?# P; k. |0 |. p
  8. CpuID[1]=*(vu32*)(0x1ffff7ec);
    2 z. S% Y0 J  V: `
  9. CpuID[2]=*(vu32*)(0x1ffff7f0);9 v- o( \) |# g3 w
  10. //加密算法,很简单的加密算法+ E7 n" y. a6 j$ e1 w# u
  11. Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);) {7 r4 X  k4 d3 _' w  b+ x
  12. }
复制代码

0 G% M) v$ h% L! l0 C& J  m5 p

示例:

     STM32使用 CPUID加密算法,很简单的加密算法! R/ W% t  x- t) s; ^) Z1 J
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);7 R, ?3 L, a9 c& `1 b0 P0 W5 \
     CpuID[0]    CpuID[1]    CpuID[2]    Lock_Code    CpuID[0]>>1    CpuID[0]>>2    CpuID[0]>>3, W5 X' T8 J/ P, Y
1号CPU    0668FF30    3037564E    43023216    17A29B6D    3347F98    C0DD593    8604642
# g2 o/ m, j3 V9 |$ j! r2号CPU    066AFF30    3037564E    43024449    17A39DB4    3357F98    C0DD593    8604889# d4 m+ J5 i6 I
3号CPU    066CFF30    3037564E    43021551    17A497D5    3367F98    C0DD593    86042AA3 |; J3 i! c- u
4号CPU    066BFF30    3037564E    43024716    17A41E0D    335FF98    C0DD593    86048E2, K+ i9 Q! ^2 V" b7 O. q/ a# l5 _
5号CPU    066CFF30    3037564E    43023851    17A49C35    3367F98    C0DD593    860470A# b, q2 Z# _5 l% n* Q4 L9 |. |
6号CPU    066DFF37    3235564E    43152737    1826FA14    336FF9B    C8D5593    862A4E6" F: `& u4 ~6 {. M: ^$ B6 j

6 {1 @; K" T3 V8 ^9 f: x3 f1 O

————————————————
/ J. `9 X7 E( n: w; m版权声明:jiangchao3392


3 Q+ E! l1 [6 ~- ~$ H+ Z
收藏 评论0 发布时间:2023-1-3 18:02

举报

0个回答

所属标签

相似分享

官网相关资源

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