STMCU小助手
发布时间:2022-3-30 12:00
|
01. 随机数发生器简介 RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。4 ^0 X# _& I7 {( g" @2 \' v. T RNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。 5 O/ Q z" d! m& C8 ~ 02. 随机数发生器主要特性 ● 提供由模拟量发生器产生的 32 位随机数! Y; P( {1 E4 M+ v ● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期- a7 @% E7 H$ o' s, k. | ● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列) ● 可被禁止以降低功耗 1 E, G5 a, }7 O! i7 Y$ \; h 03. 随机数发生器功能说明' ~# x0 x2 i' ~: T2 }% N v
, j2 L) f! l9 y0 l% D i 04. 随机数发生器操作. C5 Q6 K6 _0 l. J: I 要运行 RNG,请按以下步骤操作: # 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 3.每次中断时,检查确认未出现错误(RNG_SR 寄存器中的 SEIS 和 CEIS 位应为 0),并且随机数已准备就绪(RNG_SR 寄存器中的 DRDY 位为 1)。然后即可读取 RNG_DR寄存器中的内容。 ' ^! ^0 D6 @3 Q- T- q 按照 FIPS PUB(联邦信息处理标准出版物)140-2 的要求,将 RNGEN 位置 1 后产生的第一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)。 " B) p' R9 m! p3 ~- O0 x p 05. 随机数发生器寄存器 5.1 RNG 控制寄存器 (RNG_CR)" N! \) X# ~) G3 ~& W RNG control register- D* w9 _9 f: C" K6 n5 o 偏移地址:0x00 复位值:0x0000 0000 8 v( M7 L1 q4 Z" @3 a
$ 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) 0:禁止 RNG 中断。. m$ m4 A0 C" l9 P 1:使能 RNG 中断。只要 RNG_SR 寄存器中 DRDY=1 或 SEIS=1 或 CEIS=1,就会挂起中断。 位 2 RNGEN :随机数发生器使能 (Random number generator enable) 0:禁止随机数发生器。 1:使能随机数发生器。4 K( O$ o2 Q3 ^: F& f! ` 位 1:0 保留,必须保持复位值 / H+ I* A% z8 g q9 ]; r) ? 5.2 RNG 状态寄存器 (RNG_SR)) y! B- G+ [$ h$ A) [! S RNG status register 偏移地址: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
' |; E( D) q' {+ o- t* U* m 位 31:3 保留,必须保持复位值 2 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:未检测到错误序列 1:检测到以下错误序列之一: — 超过 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& ^ 位 5 CEIS :时钟错误中断状态 (Clock error interrupt status) 此位与 CECS 同时设置,通过向其写入 0 来清零。 0:正确检测到 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,则会挂起中断。 / O1 p7 ?# A1 H! B8 a: Y 位 4:3 保留,必须保持复位值& S1 D# |% d0 @! m( r$ ~' z5 `$ G/ O 位 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) — 超过 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 正常。 1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16)。 位 0 DRDY :数据就绪 (Data ready) 0:RNG_DR 寄存器尚未有效,无可用随机数据% x; x, e/ f% O2 b, z 1:RNG_DR 寄存器包含有效随机数据 注意:如果 RNG_CR 寄存器中 IE = 1 ,则会挂起中断。' r4 I7 G( n& D2 \7 j6 e 读取 RNG_DR 寄存器后,此位恢复到 0 ,直到计算出新的有效值 5.3 RNG 数据寄存器 (RNG_DR) RNG data register 偏移地址: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 ]
5.4 RNG寄存器映射
7 w7 n. v; G) N: |. Z5 o% a' q! l |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版