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

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

[复制链接]
STMCU小助手 发布时间:2022-3-30 12:00
01. 随机数发生器简介
! G; @, h0 c) h- I6 p  ]RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。4 ^0 X# _& I7 {( g" @2 \' v. T

4 s: i0 Y0 S- @8 J5 o! L6 M7 kRNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。
: Q  H! M; w0 \4 w, J: c5 O/ Q  z" d! m& C8 ~
02. 随机数发生器主要特性
1 ]! A* r6 U1 _" g& q0 h; P9 S● 提供由模拟量发生器产生的 32 位随机数! Y; P( {1 E4 M+ v
● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期- a7 @% E7 H$ o' s, k. |
● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)
) N+ `) Z9 b6 r● 可被禁止以降低功耗
1 J3 I5 o; e( A6 W1 E, G5 a, }7 O! i7 Y$ \; h
03. 随机数发生器功能说明' ~# x0 x2 i' ~: T2 }% N  v

3 ~- U% f3 A% f0 }" [ 20200909173902311.png : B5 f( k" S+ ], I9 M6 E" `
, j2 L) f! l9 y0 l% D  i
04. 随机数发生器操作. C5 Q6 K6 _0 l. J: I
要运行 RNG,请按以下步骤操作:
+ e) M# n& d# _6 _5 J) u; _' {+ `! ~# g$ S* y! z7 B# _! L3 i$ p
1.如果需要,使能中断(为此,将 RNG_CR 寄存器中的 IE 位置 1)。准备好随机数时或出现错误时生成中断。6 B3 k0 x# t& D
6 \% N$ M8 [+ P- b* s
2.通过将 RNG_CR 寄存器中的 RNGEN 位置 1 使能随机数产生。这会激活模拟部分、RNG_LFSR 和错误检测器。+ A! E$ q/ f" N5 a9 h

( O3 E$ o7 S1 E1 x. ]3.每次中断时,检查确认未出现错误(RNG_SR 寄存器中的 SEIS 和 CEIS 位应为 0),并且随机数已准备就绪(RNG_SR 寄存器中的 DRDY 位为 1)。然后即可读取 RNG_DR寄存器中的内容。
* r0 `( Q! [7 Z8 J0 |' ^! ^0 D6 @3 Q- T- q
按照 FIPS PUB(联邦信息处理标准出版物)140-2 的要求,将 RNGEN 位置 1 后产生的第一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)。
/ G8 D# r+ T8 M$ z+ z. ~" B) p' R9 m! p3 ~- O0 x  p
05. 随机数发生器寄存器
5 W( j: w  `8 K8 ~+ M8 i+ ^5.1 RNG 控制寄存器 (RNG_CR)
" N! \) X# ~) G3 ~& W
RNG control register- D* w9 _9 f: C" K6 n5 o
偏移地址:0x00
. D5 g  c" K0 Z9 I复位值:0x0000 0000
2 |1 W% }' f$ X* R$ D. x' I8 v( M7 L1 q4 Z" @3 a
20200909173915649.png
/ k% g  C7 e' z$ x8 i" ?7 b, P, }5 n# i9 G2 g4 t
位 31:4 保留,必须保持复位值1 g5 Z& |5 W4 x8 Q. b
位 3 IE :中断使能 (Interrupt enable)
3 d- P! I8 g4 l+ X7 T! {3 d& s0:禁止 RNG 中断。. m$ m4 A0 C" l9 P
1:使能 RNG 中断。只要 RNG_SR 寄存器中 DRDY=1 或 SEIS=1 或 CEIS=1,就会挂起中断。
# {1 }; Z8 z/ n位 2 RNGEN :随机数发生器使能 (Random number generator enable)
& g( Q  o2 k$ H- G1 l* i! w( z0:禁止随机数发生器。
+ J: P1 t! v. _) C* O) J1:使能随机数发生器。4 K( O$ o2 Q3 ^: F& f! `
位 1:0 保留,必须保持复位值
- g; F8 _1 |9 }, h2 T/ H+ I* A% z8 g  q9 ]; r) ?
5.2 RNG 状态寄存器 (RNG_SR)) y! B- G+ [$ h$ A) [! S
RNG status register
$ \0 E8 s& S# }2 ^4 u# U3 p偏移地址:0x046 t: U- H! W) R
复位值:0x0000 00005 ~8 {# d( Z9 T  Y. K
" s: n  c. m6 ^4 N. g: R3 o  e6 o
20200909173927829.png ( d- E+ S/ n2 F+ Z4 {9 w
' |; E( D) q' {+ o- t* U* m
位 31:3 保留,必须保持复位值
* \1 V5 Y; P8 n9 {5 b+ t2 O  F3 e0 y- r# ^7 S  \0 `! P0 S; ^
位 6 SEIS :种子错误中断状态 (Seed error interrupt status)  M: i9 v/ R0 K
此位与 SECS 同时设置,通过向其写入 0 来清零。( b3 p! |  ~: S8 [
0:未检测到错误序列
" H/ F7 s( G/ ~  U( h1:检测到以下错误序列之一:
& b/ H! h* l5 x) @* E( ^' K— 超过 64 个连续位具有相同值(0 或 1)- H8 x2 K4 x7 _. Q3 a
— 超过 32 个连续交替的 0 和 1 (0101010101…01)' l; c3 Q& s4 r6 P6 f
如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。* r5 M2 y. H; ^: s# p1 f& ^

' _0 B3 L" v9 W, c/ Q# V位 5 CEIS :时钟错误中断状态 (Clock error interrupt status)
- x! f* I2 h0 d$ {8 p此位与 CECS 同时设置,通过向其写入 0 来清零。
1 L3 }  X% c6 N0:正确检测到 PLL48CLK 时钟8 a8 \# T9 x% f5 \: ^8 \2 @0 B! D
1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16): D+ Y" W$ E. t5 c' _& m: l+ Z
如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。
" q% \5 |3 J; O/ O1 p7 ?# A1 H! B8 a: Y
位 4:3 保留,必须保持复位值& S1 D# |% d0 @! m( r$ ~' z5 `$ G/ O

* S/ k$ v1 v" _9 q; {0 C位 2 SECS :种子错误当前状态 (Seed error current status): X( Y8 I; {1 d! z" @% J
0:目前未检测到错误序列。如果 SEIS 位置 1,则意味着已检测到错误序列并已恢复正常。1 ~# _/ a* N% b: |& P8 [
1:检测到以下错误序列之一:, `2 [5 O: Z9 Z& B4 v
— 超过 64 个连续位具有相同值(0 或 1)
7 G' j9 k$ g# V' T— 超过 32 个连续交替的 0 和 1 (0101010101…01). Y) F, G& k3 H( j: s0 D! j
1 L3 n! N2 [, [( E/ ?( M2 l
位 1 CECS :时钟错误当前状态 (Clock error current status)! Z# u! N0 U+ q7 `6 _( W; r
0:正确检测到 PLL48CLK 时钟。如果 CEIS 位置 1,则意味着已检测到时钟错误并已恢复" Q8 r& l+ l, ^$ Z/ t8 e' B9 \( x
正常。
' X7 X+ ]0 F9 B1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16)。
; S: L& ^( t) z, T, T; ^: a
1 |6 j9 p9 q1 A& G3 c. N+ {% p位 0 DRDY :数据就绪 (Data ready)
3 B3 R! W. k5 Y0 G  L0:RNG_DR 寄存器尚未有效,无可用随机数据% x; x, e/ f% O2 b, z
1:RNG_DR 寄存器包含有效随机数据
- a0 j& c4 r7 `0 ~! F注意:如果 RNG_CR 寄存器中 IE = 1 ,则会挂起中断。' r4 I7 G( n& D2 \7 j6 e
读取 RNG_DR 寄存器后,此位恢复到 0 ,直到计算出新的有效值
% b) o* M4 V: t  U7 N  f, g+ U
& X9 D) X. ?. t0 N  P/ Y5.3 RNG 数据寄存器 (RNG_DR)
: x0 ^% x: d5 G9 ?) |9 ]8 wRNG data register
9 A! S- ?, z( u偏移地址:0x08% i# I+ K, ]" s& ?: P
复位值:0x0000 0000; T5 K( c- `9 K# w1 |4 @. a) D
RNG_DR 寄存器是只读寄存器,在读取时提供 32 位随机数值。读取后,此寄存器在最多40 个 PLL48CLK 时钟周期后,提供新的随机数值。在读取 RNDATA 值之前,软件必须检查DRDY 位是否已置 1。! U' I; k2 D9 E* G4 w8 ]

7 _& G) ~7 \+ G+ A 20200909173939846.png
3 d3 |, h$ Z4 a" z
! b/ f' @8 C0 O. N& w7 z$ v6 g5.4 RNG寄存器映射 20200909173945779.png
7 a$ U+ W# e4 r$ _. s! ?1 F
9 v7 F, f$ T  V0 j$ Z* C9 I
0 i. V! D! w/ r' h  h+ W! D7 w7 n. v; G) N: |. Z5 o% a' q! l
赞 收藏 评论0 发布时间:2022-3-30 12:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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