当前位置:首页 > 单片机 > 单片机
[导读]RNG主要特性RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的 随机数。RNG的主要特性● 提供由模拟量发生器产生的 32 位随机数● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号

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

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

RNG功能描述

随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR) 的种子, 用于生成 32 位随机数。
该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。RNG_LFSR 由 专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将 大量种子引入 RNG_LFSR 后,RNG_LFSR 的内容会传入数据寄存器 (RNG_DR)。
同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位(RNG_SR 寄存器中)指示何时 在种子上出现异常序列,或指示何时 PLL48CLK 时钟频率过低。检测到错误时生成中断。

操作
要运行 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 后产生的第 一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)

错误管理
如果 CEIS 位的值为 1(时钟错误)
出现时钟错误时,RNG 无法再产生随机数,因为 PLL48CLK 时钟不正确。检查时钟控制器是 否正确配置,是否可提供 RNG 时钟,然后将 CEIS 位清零。当 CECS 位为 0 时,RNG 可正 常工作。时钟错误对产生的上一个随机数没有影响,因此 RNG_DR 寄存器内容可以使用。
如果 SEIS 位的值为 1(种子错误)
出现种子错误时,只要 SECS 位为 1,就会中断随机数产生。如果 RNG_DR 寄存器中有可 用随机数,不能使用该随机数,因为它可能没有足够的熵。
应执行以下操作:将 SEIS 位清零,然后将 RNGEN 位清零并置 1,以便重新初始化和重新 启动 RNG。

STM32F4的RNG库
如何使用RNG驱动
1.通过函数RCC_AHB2PeriphClockCmd(RCC_AHB2Perph_RNG,ENABLE)使能RNG控制器时钟。
2.通过函数RNG_Cmd()使能RNG。
3.等待直到随机数发生器产生有效的随机数(中断或查询模式)。
4.通过函数RNG_GetRandomNumber()得到随机数。
从上面第三步开始继续得到后面的随机数。

初始化和配置函数
这部分函数主要提供以下功能
· 初始化RNG外设
· 使能或禁止RNG外设。
void RNG_DeInit()功能:从新初始化RNG外设寄存器数据到复位值。
void RNG_Cmd(FunctionanState NewState)功能:使能或禁止RNG

得到32位随机数函数
uint32_t RNG_GetRandomNumber(void)
函数功能:返回32位随机数
调用此函数之前需要等待直到DRDY标志置位,调用函数RNG_GetFlagStatus(RNG_FLAG_DRDY)进行等待标志位。每次在的调用RNG_GetrandomNumber(void)后RNG_FLAG_DRDY标志自动清除。
在seed错误的情况下只要SECS位是1,随机数产生将被中断。如果RNG_DR寄存器中有数据可用,但是请不要使用,应为没有足够的entopy。这种情况下推荐用户通过函数RNG_ClearFlag(RNG_FLAG_SECS)清除SEIS标志,然后禁止并重新使能RNG外设(通过函数RNG_Cmd())来从新初始化和启动RNG。
在时钟错误的情况下,应为PLL48CLK时钟的不准确,RNG将无法产生随机数。检查是否正确配置时钟控制器RNG时钟,同时清除CEIS(通过函数RNG——ClearFlag(RNG_FLAG_CECS))位。当CECS位是0的时候RNG次啊能正常工作。时钟错误对先前残生的随机数没有影响,RNG_DR寄存器中的数据仍然可以使用。

中断标志管理
· 标志
RNG_FLAG_DRDY:RNG_DR寄存器有有效随机数时,通过读此寄存器来清除标志(可通过函数RNG_GetRandomNumber()实现)。
RNG_FLAG_CECS:seed检测错误
RNG_FLAG_SECS:时钟检测错误
· 中断
如果是能了RNG中断,下面三种情况僵尸的RNG中断会被挂起。
RNG_DR寄存器含有有效的随机数,只有通过读RNG_DR寄存器才能清除中断源,也就是清除中断挂起标志。
发生seed错误,检测到下面的错误序列之一:
64个以上的的连续位都是0或者1
32个以上出现连续的01.
通过函数RNG_ClearITPendingBit(RNG_IT_SEI)清除此中断源。
发生时钟错误,PLL48CLK不能被正确的检测到


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

基于ARM® Cortex®-M4的STM32F4 MCU系列采用了意法半导体的NVM工艺和ART Accelerator™,在高达180 MHz的工作频率下通过闪存执行时其处理性能达到225 DMIPS/608 Cor...

关键字: stm32f4 ARM

stm32f4和f1都有哪些区别?除了需要的头文件不一样,管脚配置什么的有区别么?

关键字: stm32f4 f1 比较

STM32F407VET6引脚图及中文资料

关键字: stm32f4 引脚图

随机数是以现代密码学为基础的信息安全系统的基石。在现代信息安全系统中,密码体制和算法本身可以被公开,访问策略可以公布,密码设备可能丢失,而系统的安全性要求不受影响。整个系统的安全性完全依赖于随机

关键字: 控制器 随机数发生器 伪随机数 测试

10月9日消息 今日凌晨,英雄联盟S9全球总决赛入围赛淘汰赛阶段结束,小组赛最终抽签结果出炉。今日中午,英雄联盟官方公布了S9小组赛完整赛程。 小组赛首日(10月12日)第一场比赛在SKT与FNC之间

关键字: ig rng 英雄联盟 fpx

LPL夏季赛小组赛已经进入了最后的阶段,万众瞩目的iG vs RNG的比赛也将在8月10日到来,两支颇有争议有话题的队伍终于要正面交锋了。 今日,WWE选手Cesaro和Austin Creed在推

关键字: ig lpl vs 英雄联盟 rng

比较F1的片子对于F4的RTC来说有很大提升,F4的RTC提供了日历时钟和两个可编程闹钟中断,一个周期性可编程唤醒标志。这样很方便设置系统时间,并不会像F1的RTC那样要自己计算年月日时分秒。F4的RTC是一个独立的BC...

关键字: rtc stm32f4

【实验目的】输出7路占空比不同的PWM信号是各个版本ST库必备的例子。本实验的主要目的不是表现ST芯片PWM功能的强大,而是要完成输出的精确计算。【实验内容】输出7路PWM信号,并用示波器测量输出。【实验原理】1、时

关键字: pwm stm32f4 tim1 信号输出

STM32F4的随机数发生器RNG,以环境噪声为种子,产生32位随机数供主机使用。【主要特性】1、产生32位随机数 2、两次转换时间间隔40PLL48CLK 3、随机数熵检测以发现不正常位,以产生稳定序列 3、可被关闭以...

关键字: stm32f4 随机数发生器

书接上文,开始折腾ADC的DMA传输。因为大家都在说DMA,就连ST的例子里边也是使用DMA的。 ADC采集到的数据都存储在一个固定的寄存器中。当常规采样方式采样多个通道时候,使用DMA可以较好地避免将采集到的数据...

关键字: adc dma stm32f4 数据传输 采集数据
关闭
关闭