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

【经验分享】STM32 随机数发生器详解

[复制链接]
STMCU小助手 发布时间:2022-6-14 14:09
01. 随机数发生器简介
9 N% g$ a4 ]2 ?1 G& O) @- oRNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。+ z1 l# u5 h' w. y& `

7 x- M* r5 j0 R1 G4 J3 w9 x0 X% mRNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。
; d8 \1 G2 P) ~; k& T8 k
1 U& Z: y" p9 n  f2 |2 r. L02. 随机数发生器主要特性1 n3 n6 f# v1 I2 P+ R8 E
● 提供由模拟量发生器产生的 32 位随机数
0 e- ]: Q! y  B; q3 w  g● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期1 l) N9 S, d, ~8 }
● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)* a+ j  Y' y; K4 O! V# X, m7 c( u
● 可被禁止以降低功耗
: i. u1 o+ Y" i4 E7 Y
! b2 y: A2 {: ^& U03. 随机数发生器功能说明
% K  r3 j: ]6 _: x3 m2 y, I" ?, A9 x9 M
[8~CG91~4QC0`~ZQTCXNP38.png 0 {7 I+ m7 q! s
; T+ A- Y( W, c! S1 O2 q
04. 随机数发生器操作

7 v  g+ I' a) D  r8 t7 g要运行 RNG,请按以下步骤操作:
4 Q9 _6 a6 n- `( x" ?
/ T3 d1 }; w' I7 }1 n1.如果需要,使能中断(为此,将 RNG_CR 寄存器中的 IE 位置 1)。准备好随机数时或出现错误时生成中断。3 R2 F7 o: t, F8 V6 S
2 ^/ F# d+ |* \1 y7 I  s0 ~) t
2.通过将 RNG_CR 寄存器中的 RNGEN 位置 1 使能随机数产生。这会激活模拟部分、RNG_LFSR 和错误检测器。
0 R% z  A) z+ r5 n2 l* |0 k8 Y& E# f; R7 W
3.每次中断时,检查确认未出现错误(RNG_SR 寄存器中的 SEIS 和 CEIS 位应为 0),并且随机数已准备就绪(RNG_SR 寄存器中的 DRDY 位为 1)。然后即可读取 RNG_DR寄存器中的内容。5 [; c& z6 F7 \% B4 Q
5 y4 C0 ]; V# N" o! [# p0 ^* k
按照 FIPS PUB(联邦信息处理标准出版物)140-2 的要求,将 RNGEN 位置 1 后产生的第一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)。3 u5 J6 V5 g/ K- @+ S/ O; J
/ Y" E6 E& C- F, O) g
05. 随机数发生器寄存器
8 r' J7 x: e. f0 n" c5.1 RNG 控制寄存器 (RNG_CR)
" u9 O, \  P+ `; ~. Z; H
RNG control register
" B3 V  M( D# S9 a& ^/ O+ j4 N偏移地址:0x00; u2 X5 z$ P; z& h( H3 Y' b' G
复位值:0x0000 0000% z2 z1 l4 U, s) M0 c! z8 M
( r; v4 A0 G; p" u
20200909173915649.png
0 V6 s$ ~# n! l5 u+ b/ r0 y$ ~7 l
) ^0 n+ c% K( z" E0 x# L3 q& Q5 S# Z位 31:4 保留,必须保持复位值
3 r3 U! @+ F& k( C8 l& b位 3 IE :中断使能 (Interrupt enable)
1 ~& J; R5 h6 r0:禁止 RNG 中断。
2 a* Z- X% I4 W- v6 c1:使能 RNG 中断。只要 RNG_SR 寄存器中 DRDY=1 或 SEIS=1 或 CEIS=1,就会挂起中断。, X+ n; Y( a/ d# }( ?  ]" X! ]8 M
位 2 RNGEN :随机数发生器使能 (Random number generator enable)
& `9 S; g0 ^. W  ^1 I0:禁止随机数发生器。
- i  T0 ^5 T9 D- i3 ]1 l8 f( F1:使能随机数发生器。
- ]& \" c0 b3 n( v6 {位 1:0 保留,必须保持复位值
: p9 j. \2 f& O7 t+ r2 r9 Q  f' h5 Z" \, r
5.2 RNG 状态寄存器 (RNG_SR)
5 U8 b1 [% i! c! L( Q. C# H9 m- WRNG status register
" P0 r# f  Q$ }8 D1 s& E8 T! R偏移地址:0x04
; J3 J! b& _, Z& Q( S复位值:0x0000 0000/ s4 R3 L' N& U4 i9 r
& j" Z) N$ p. |( M" @# O/ h! U% J1 G
[2]C_(T{85NXGY_%[)]P6@I.png * B  X+ j* {- N2 D2 V3 b/ D

* e, ]6 I8 }$ z/ m2 y- n/ F  C位 31:3 保留,必须保持复位值) m. p& e! X) p0 j' b( F8 y

* q; e, X, H9 J9 n& O) ^$ K位 6 SEIS :种子错误中断状态 (Seed error interrupt status)
0 f  Q6 l4 m! x5 e: Q此位与 SECS 同时设置,通过向其写入 0 来清零。
( V8 B5 X5 V" [1 `& Z0:未检测到错误序列8 l( {$ ]# _6 F+ Y0 |
1:检测到以下错误序列之一:
6 o# |& j, g- _( u5 y— 超过 64 个连续位具有相同值(0 或 1)3 w8 L, }. W$ r1 X' H
— 超过 32 个连续交替的 0 和 1 (0101010101…01)& n$ `, f+ {$ z" I9 b+ t' T
如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。2 A/ S' g% g  O6 i, E- a! K

# _# ^4 q; p8 Q. a! h5 A3 L位 5 CEIS :时钟错误中断状态 (Clock error interrupt status)
& t$ g! i. S# F此位与 CECS 同时设置,通过向其写入 0 来清零。
" P5 v+ V; C/ ?3 F( F0:正确检测到 PLL48CLK 时钟0 p. C0 L( Q$ d* j7 h# ]; M! }
1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16)
+ W$ W4 W1 H- m& x7 b; V. r& z如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。* T2 L3 s$ y7 g4 m

) A+ t3 c0 g4 N# I( X位 4:3 保留,必须保持复位值( E$ U" N' u0 T) E  F$ _$ s$ O

' j% ?- ^4 o6 b0 H# [8 Z位 2 SECS :种子错误当前状态 (Seed error current status)- c0 E( C- s( S/ U% q
0:目前未检测到错误序列。如果 SEIS 位置 1,则意味着已检测到错误序列并已恢复正常。
5 l# d5 L7 B! \& _: l1:检测到以下错误序列之一:
' U5 @% J8 @7 i' C  ~1 u2 B) s— 超过 64 个连续位具有相同值(0 或 1)
) A3 O/ K% m1 R4 F# e1 q— 超过 32 个连续交替的 0 和 1 (0101010101…01)9 V$ h7 j1 o6 K, k( n

% `0 U$ P) A  b* r$ H8 u位 1 CECS :时钟错误当前状态 (Clock error current status)# T% `1 a! G; X, }8 z4 z+ G: p3 B
0:正确检测到 PLL48CLK 时钟。如果 CEIS 位置 1,则意味着已检测到时钟错误并已恢复
+ y# ~4 z1 ]+ C+ G正常。
  f/ ^" M, O* [& k1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16)。3 V# S+ E9 {" c! _! N

! L1 J4 G. A% d8 {- Q位 0 DRDY :数据就绪 (Data ready)
1 L& {# }+ B: N% x0:RNG_DR 寄存器尚未有效,无可用随机数据# P3 [- T3 |1 G
1:RNG_DR 寄存器包含有效随机数据
, P1 ?8 E( u  q- {: t注意:如果 RNG_CR 寄存器中 IE = 1 ,则会挂起中断。
0 f5 o1 M9 k, U读取 RNG_DR 寄存器后,此位恢复到 0 ,直到计算出新的有效值/ T" b6 N9 X% t8 J0 l

, H; W; X1 A4 h( k5.3 RNG 数据寄存器 (RNG_DR)
2 I4 {5 b4 _" Z# c' oRNG data register+ M% N( x' `$ f. [: c" n- d
偏移地址:0x08
6 N' N3 N3 x2 A5 @复位值:0x0000 0000
: F" T4 O$ j0 m8 L. c4 T, ARNG_DR 寄存器是只读寄存器,在读取时提供 32 位随机数值。读取后,此寄存器在最多40 个 PLL48CLK 时钟周期后,提供新的随机数值。在读取 RNDATA 值之前,软件必须检查DRDY 位是否已置 1。
' W4 \) J/ m' ~, |. a7 B+ B
. Q  Q! }# y# J; W. ` 873_5BG5~_9@R6_KO8`%]PL.png
% g- D" x1 B6 p$ q3 {3 M: K$ o# E! d- G9 o0 x2 o
5.4 RNG寄存器映射
8 M8 |! _( \: j* T; S4 O' r A[[X%Y0)1JKXL2SB_O(51CR.png . v0 n- |+ H( I+ \

$ ^. t+ l9 H: c5 w% `9 E! i; f# F( P; q* d" H5 b7 K

8 F! K" Z) k1 y' V+ N
: I( ~5 [1 Y) ]
赞 收藏 评论0 发布时间:2022-6-14 14:09

举报

0个回答

所属标签

相似技术帖

官网相关资源

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