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

STM32 唯一ID读取方法

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

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

$ j" f& a: f$ d9 i

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


& ~! ?; L9 W' J' }

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

# E, ~  w$ t* m' H
  1. //读取FlashSize: R) a) q3 _8 w3 d9 J$ e  j
  2. - ]5 A2 j$ ]5 Y4 G% Z* ?, G
  3. uint16_t cpuGetFlashSize(void)
    , U; N. b- Y( ?) C# B2 _) n5 `
  4. {! t. a; U" _% y0 ?: k) S

  5. + y. p- h  y( e8 m" n
  6.    return (**(volatile u16*)(0x1FFF7A22));
    ) Y7 }% h, p9 W7 h- w8 A
  7.    // return (*(volatile u32*)(0x1FFF7A20))>>16;' ]+ Y% i9 o5 y; N& c# s7 `3 G
  8. }
    ! V8 a3 e8 H, ?; E

  9. & L% x3 O" l: {& l* ]' T
  10. //读取ChipID* \# o' {( R! I
  11. ! w& Z2 e: ~& ]0 z4 \: \
  12. void cpuidGetId(void). v7 k4 `% y: Y; W5 T$ p( S. k
  13. {+ ^9 h2 f. F/ I
  14.     mcuID[0] = *(volatile u32*)(0x1FFF7A10);* E! x: T5 r9 ]  ~2 H" L4 ?7 J
  15.     mcuID[1] = *(volatile u32*)(0x1FFF7A14);
    8 n0 ?; q- |, Y4 P% e, t9 p" Q4 p
  16.     mcuID[2] = *(volatile u32*)(0x1FFF7A18);
    3 B% C$ o3 G! P; c/ k! g
  17. }; h2 W' Y! x- V- U/ k7 U9 w! G
  18. + ^1 s+ S9 \2 ^3 m! I/ W
  19. $ m. Y* n+ d- ]& O; V
  20.       Send_data3 = ((CpuID[0]) >> 24)|0x00;& G0 v, f. z% B( P% V- O3 c
  21.       Uart1Write(&Send_data3, 1);
    8 O9 N# p! Y: g9 z4 v! ~# i
  22.                     # w4 k( C: r4 [# |
  23.         Send_data3 = (CpuID[0] >> 16)|0x00;1 w1 j( x( f" U6 t0 B) o1 \5 Z
  24.       Uart1Write(&Send_data3, 1);; H: W1 x0 d% R0 B; a# _1 O
  25.                     + x4 ^* i# h' u) ~) o
  26.       Send_data3 = (CpuID[0] >> 8)|0x00;" \9 m" s" h: W5 `% ~& C+ I
  27.       Uart1Write(&Send_data3, 1);% h& d) F9 L# m  K4 \, Z2 h. a
  28.         " M) x, p& Y9 i9 ]* z2 T+ ~
  29.       Send_data3 = (CpuID[0] )|0x00;
      v' u  e$ |' f$ G! t
  30.       Uart1Write(&Send_data3, 1);' I5 K& V6 Q5 n$ ]5 R" E
  31.    
    * B1 U( B( ], _1 T4 y
  32.       Send_data3 = ((CpuID[1]) >> 24)|0x00;
      |  b0 L# d% V
  33.       Uart1Write(&Send_data3, 1);8 u+ z# F) n3 f3 F' S
  34.                     
    " s, H4 O/ U0 x# S6 Q: b# I
  35.         Send_data3 = (CpuID[1] >> 16)|0x00;6 ?0 O4 F: ?. V6 ^7 I1 e
  36.       Uart1Write(&Send_data3, 1);& X3 ^+ s3 w* w% T$ M- V0 `, a* ]
  37.                     : H) p+ Q7 T. Z  v1 E! g7 }  C
  38.       Send_data3 = (CpuID[1] >> 8)|0x00;
    2 z# x8 h% R+ r4 W6 G  \9 z" k+ o8 f* r
  39.       Uart1Write(&Send_data3, 1);
    9 E) f' p" {) `" p  Y! z
  40.         5 q- i7 B& k7 c0 {! V3 ]7 ^
  41.       Send_data3 = (CpuID[1] )|0x00;
      n7 t+ O% o# H
  42.       Uart1Write(&Send_data3, 1);
    - |) r: o; S* i7 \9 W
  43.         ; \' h1 M9 k4 K* i
  44.         Send_data3 = ((CpuID[2]) >> 24)|0x00;
    7 r8 J0 P3 k( T5 q& X% N* u* M
  45.       Uart1Write(&Send_data3, 1);4 f" x6 ]( q8 N
  46.                     / q2 p) |  X+ s" X% y1 ]1 d' Q
  47.         Send_data3 = (CpuID[2] >> 16)|0x00;9 G( q) z2 P7 ^4 O( Y/ R0 J- s, O
  48.       Uart1Write(&Send_data3, 1);
      I: w3 S: G& |7 @. a8 W
  49.                     0 T( A2 ?. A  _0 ]6 R+ o
  50.       Send_data3 = (CpuID[2] >> 8)|0x00;
    . v* h8 J: H' P7 y0 G
  51.       Uart1Write(&Send_data3, 1);
    3 }7 O$ i9 q: Y2 Z: q
  52.         
    # R) t: Q3 W; Q* H4 L
  53.       Send_data3 = (CpuID[2] )|0x00;
    7 y' k: w! K1 y* q, }- i5 W
  54.       Uart1Write(&Send_data3, 1);
复制代码

- U5 `6 n: A- @( A+ s' R* @

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

串口发送程序;

printf("CPUID IS 0X%X %X %X.\r\n", mcuID[0], mcuID[1], mcuID[2] );   7 ]! ^2 e3 N1 E9 |" E6 @7 ^
printf("Flash size is %d KB\r\n",cpuGetFlashSize());

' t8 q. k2 @$ w+ G5 b

也可以通过 STLink Utility 查看

6 j7 `3 s* q( g) E+ G% n

3 F3 r  J6 P* E7 o) u利用STM32的ID编码结合来进行产品加密,产品唯一的身份标识非常适合:, `' w9 F$ s. \$ r7 a$ d, w
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
8 j+ T# [" X" s# S8 e● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
7 R$ E+ }7 P) \: ?" v; |● 用来激活带安全机制的自举过程) ^: q( W. q! j, h, I3 L
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
+ G5 Y4 o# U: W- h, ]这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。' ^# q$ Q4 _5 C
基地址:0x1FFF F7E8, s( p$ e3 H! o) p& A

$ E7 ^  ~' G8 A3 g2 r* f

( S3 s' f- `8 F5 E1 o每个CPU 出厂的时候都8 S- r: i0 M) x& g# w3 a' P. D
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......
+ `/ L# r$ w5 D
2 _9 V) z: [6 C: ^/ B$ q4 ?
  1. static u32 CpuID[3];; F2 ~5 k8 h8 r9 h9 e. Q6 K' @
  2. static u32 Lock_Code;
    1 Q, q5 v& E7 h' O
  3.   F. I# g' a; n( h4 a: w+ A; o
  4. void GetLockCode(void)
    2 b1 C; Y1 ~. h  r+ \
  5. {
    ( p7 [' U  K) K1 C
  6. //获取CPU唯一ID& G- k! V1 ?: r& ]2 ?4 M9 u
  7. CpuID[0]=*(vu32*)(0x1ffff7e8);( A5 ]% J/ P# p' D8 S. s* G
  8. CpuID[1]=*(vu32*)(0x1ffff7ec);- r4 R9 _. j1 l7 r0 B) ~: A
  9. CpuID[2]=*(vu32*)(0x1ffff7f0);
    8 S/ d% y, S# x
  10. //加密算法,很简单的加密算法( T+ b' U& z# |9 d1 R
  11. Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
    . ]2 [- H* H/ C1 M# a& f
  12. }
复制代码

/ Z& J* I8 C, p+ X

示例:

     STM32使用 CPUID加密算法,很简单的加密算法
' M& t5 _! T+ G+ R8 A7 fLock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
; f9 f8 Y& l  C' M, Z     CpuID[0]    CpuID[1]    CpuID[2]    Lock_Code    CpuID[0]>>1    CpuID[0]>>2    CpuID[0]>>37 G4 D. j3 s2 M
1号CPU    0668FF30    3037564E    43023216    17A29B6D    3347F98    C0DD593    86046425 ?9 S4 i! J0 q
2号CPU    066AFF30    3037564E    43024449    17A39DB4    3357F98    C0DD593    86048899 g1 m. j! ^: c' M+ F: Y3 g0 H! g
3号CPU    066CFF30    3037564E    43021551    17A497D5    3367F98    C0DD593    86042AA1 G% L* H( p# U$ _
4号CPU    066BFF30    3037564E    43024716    17A41E0D    335FF98    C0DD593    86048E2
/ M% ?5 T* m& X; P' r4 }0 N5号CPU    066CFF30    3037564E    43023851    17A49C35    3367F98    C0DD593    860470A
* u/ O# M1 D& D' u9 }) G6号CPU    066DFF37    3235564E    43152737    1826FA14    336FF9B    C8D5593    862A4E6; z) j4 j' z5 F, |( V

& ^: q5 G& R# b

————————————————
9 |. R2 F+ D" N1 _' L6 L5 a  a1 L; e版权声明:jiangchao3392


8 ~# j2 W$ p9 @6 C
收藏 评论0 发布时间:2023-1-3 18:02

举报

0个回答

所属标签

相似分享

官网相关资源

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