【STM32】随机数发生器详解

00. 目录

01. 随机数发生器简介

RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。

RNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。

02. 随机数发生器主要特性

● 提供由模拟量发生器产生的 32 位随机数
● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期
● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)
● 可被禁止以降低功耗

03. 随机数发生器功能说明

在这里插入图片描述

04. 随机数发生器操作

要运行 RNG,请按以下步骤操作:

  1. 如果需要,使能中断(为此,将 RNG_CR 寄存器中的 IE 位置 1)。准备好随机数时或出现错误时生成中断。

  2. 通过将 RNG_CR 寄存器中的 RNGEN 位置 1 使能随机数产生。这会激活模拟部分、RNG_LFSR 和错误检测器。

  3. 每次中断时,检查确认未出现错误(RNG_SR 寄存器中的 SEIS 和 CEIS 位应为 0),并且随机数已准备就绪(RNG_SR 寄存器中的 DRDY 位为 1)。然后即可读取 RNG_DR寄存器中的内容。

按照 FIPS PUB(联邦信息处理标准出版物)140-2 的要求,将 RNGEN 位置 1 后产生的第一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)。

05. 随机数发生器寄存器

5.1 RNG 控制寄存器 (RNG_CR)

RNG control register
偏移地址:0x00
复位值:0x0000 0000
在这里插入图片描述

位 31:4 保留,必须保持复位值
位 3 IE :中断使能 (Interrupt enable)
0:禁止 RNG 中断。
1:使能 RNG 中断。只要 RNG_SR 寄存器中 DRDY=1 或 SEIS=1 或 CEIS=1,就会挂起中断。
位 2 RNGEN :随机数发生器使能 (Random number generator enable)
0:禁止随机数发生器。
1:使能随机数发生器。
位 1:0 保留,必须保持复位值

5.2 RNG 状态寄存器 (RNG_SR)

RNG status register
偏移地址:0x04
复位值:0x0000 0000
在这里插入图片描述

位 31:3 保留,必须保持复位值

位 6 SEIS :种子错误中断状态 (Seed error interrupt status)
此位与 SECS 同时设置,通过向其写入 0 来清零。
0:未检测到错误序列
1:检测到以下错误序列之一:
— 超过 64 个连续位具有相同值(0 或 1)
— 超过 32 个连续交替的 0 和 1 (0101010101…01)
如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。

位 5 CEIS :时钟错误中断状态 (Clock error interrupt status)
此位与 CECS 同时设置,通过向其写入 0 来清零。
0:正确检测到 PLL48CLK 时钟
1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16)
如果 RNG_CR 寄存器中 IE = 1,则会挂起中断。

位 4:3 保留,必须保持复位值

位 2 SECS :种子错误当前状态 (Seed error current status)
0:目前未检测到错误序列。如果 SEIS 位置 1,则意味着已检测到错误序列并已恢复正常。
1:检测到以下错误序列之一:
— 超过 64 个连续位具有相同值(0 或 1)
— 超过 32 个连续交替的 0 和 1 (0101010101…01)

位 1 CECS :时钟错误当前状态 (Clock error current status)
0:正确检测到 PLL48CLK 时钟。如果 CEIS 位置 1,则意味着已检测到时钟错误并已恢复
正常。
1:未正确检测到 PLL48CLK 时钟 (f PLL48CLK < f HCLK /16)。

位 0 DRDY :数据就绪 (Data ready)
0:RNG_DR 寄存器尚未有效,无可用随机数据
1:RNG_DR 寄存器包含有效随机数据
注意:如果 RNG_CR 寄存器中 IE = 1 ,则会挂起中断。
读取 RNG_DR 寄存器后,此位恢复到 0 ,直到计算出新的有效值

5.3 RNG 数据寄存器 (RNG_DR)

RNG data register
偏移地址:0x08
复位值:0x0000 0000
RNG_DR 寄存器是只读寄存器,在读取时提供 32 位随机数值。读取后,此寄存器在最多40 个 PLL48CLK 时钟周期后,提供新的随机数值。在读取 RNDATA 值之前,软件必须检查DRDY 位是否已置 1。
在这里插入图片描述

5.4 RNG寄存器映射

在这里插入图片描述

06. 附录

6.1 【STM32】STM32系列教程汇总

网址:【STM32】STM32系列教程汇总

07. 声明

STM32F4xx英文参考手册

猜你喜欢

转载自blog.csdn.net/dengjin20104042056/article/details/108495044