历史上的今天
返回首页

历史上的今天

今天是:2024年12月08日(星期日)

正在发生

2021年12月08日 | STM32F4学习笔记12——RNG随机数发生器

2021-12-08 来源:eefocus

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不能被正确的检测到

推荐阅读

史海拾趣

GaN Systems公司的发展小趣事

GAIA盖亚电源深知质量是企业生存和发展的基石,因此一直将质量管理放在首位。公司通过了ISO9001 V2008等国际质量管理体系认证,并建立了完善的质量管理体系。在生产过程中,GAIA盖亚电源采用高标准流程和自动化制造能力,确保每一个产品都符合严格的质量标准。此外,公司还定期对产品进行严格的测试和验证,以确保其在实际应用中的可靠性和稳定性。

Comtronic Gmbh-Verbindungstechnik公司的发展小趣事

多年来,GAIA盖亚电源凭借其卓越的产品性能和专业的技术支持,赢得了众多知名客户的信赖和合作。这些客户涵盖了航空航天、军事、交通运输、工业自动化等多个领域。在与客户的合作过程中,GAIA盖亚电源不仅提供了高质量的产品和服务,还与客户共同研发了多项创新解决方案,帮助客户解决了许多技术难题。这些成功案例不仅彰显了GAIA盖亚电源的技术实力和市场竞争力,也为其在电子行业的发展奠定了坚实的基础。

Fine Products Microelectronics Corp公司的发展小趣事

为了更好地服务全球客户,GAIA盖亚电源积极实施全球化战略,在全球范围内设立了25个分支机构,形成了覆盖广泛的销售和技术支持网络。这些分支机构不仅负责当地市场的开拓和维护,还为客户提供了及时、专业的技术支持和售后服务。通过本地化管理,GAIA盖亚电源能够更加灵活地应对不同地区的市场需求,进一步提升客户满意度和品牌影响力。

ELINA INDEK公司的发展小趣事

因美纳(Illumina)公司成立于2000年,起初是一家专注于基因测序技术的小型企业。在创始人Jay Flatley的领导下,公司成功研发出了一系列高性能、低成本的基因测序仪器,使得基因测序技术从昂贵的实验室研究工具转变为广泛应用的医疗诊断工具。这一技术突破不仅为因美纳赢得了市场份额,也为整个医疗行业带来了革命性的变化。

eLED.com Corp公司的发展小趣事

作为一家致力于LED行业的公司,eLED.com Corp深知LED产品对于节能减排的重要性。因此,公司始终将绿色环保理念贯穿于产品的研发、生产和销售过程中。通过采用环保材料和节能技术,eLED.com Corp的产品不仅具有出色的性能,还具备较低的能耗和较长的使用寿命。此外,公司还积极参与各类环保公益活动,推动LED行业向更加绿色、环保的方向发展。

和芯润德(CoreChips)公司的发展小趣事

随着技术的不断进步,和芯润德并未满足于现状。公司持续加大研发投入,积极探索新的技术领域。通过与世界领先的EDA工具提供商合作,和芯润德建立了完整的集成电路设计链,并成功研发出多款高性能、低功耗的集成电路芯片产品。这些产品在市场上获得了广泛好评,使和芯润德成为了技术创新的引领者。

问答坊 | AI 解惑

常见传感器资料

本帖最后由 paulhyde 于 2014-9-15 03:35 编辑 在电子设计竞赛中,肯定少不了各种传感器的应用。下面我将传感器的资料收集如下。希望能够帮到大家。多多提出疑问和意见,大家共同讨论!  …

查看全部问答>

wang1jin带您从零学PCB设计8小时视频教程下载地址

wang1jin带你从零学PCB设计8小时视频教程 原创者:wang1jin 纳米盘下载,请大家下载前装一个纳米工具。再进行下载。 如果文件不能下载请联系wang1jin@126.com。 本视频教程欢迎大家免费传播,供大家学习使用。但不能用于赢取私利,如果有什 ...…

查看全部问答>

求可以和keil联合仿真的Proteus版本

请给出keil版本和Proteus版本以及下载地址,最好可以有怎么使用的具体操作步骤 另外Proteus要有破解的,我下了几次都没有破解文件而不能用 网上给的教程版本不一样,把我都搞晕了…

查看全部问答>

新手上路 skyeye模拟内核移植bootloader能用VIVI么?

老师留得思考题  没人鸟他 但我想尝试下    高手帮帮忙好吗?? 前不久用的u-boot 进行了一次内核移植 (用skyeye模拟的) 不知道 用vivi怎么来 在vivi文件夹内写 skyeye.conf要注意什么啊?? 谢谢了啊!!!…

查看全部问答>

请教关于FLASH

各位大侠:     我的板子现在是用的32M的nor flash : rc28f256j3c ,没有nand flash 由于FLASH太小,想换成一个64M的nor flash :rc28f256p33 我看目前的BSP---driver中并没有关于NOR flash的驱动 只有在eboot中有这样两个函数是关于FL ...…

查看全部问答>

在手机上使用的嵌入式office软件除了quickoffice还有其他的吗?

在手机上使用的嵌入式office软件除了quickoffice还有其他的吗?哪位大侠知道请回答一下。…

查看全部问答>

求OrCAD 原理图仿真技巧

;P ;P ;P [ 本帖最后由 ch0721 于 2010-11-30 00:10 编辑 ]…

查看全部问答>

uart2

各位高手: 我想请教下大家,我想使用omapl138(合众达产品)的uart2 我应该如何修改arm Linux 内核的配置? (能通过测试 使示波器看到波形)…

查看全部问答>

LinUx系统问题

菜鸟问下各位大师怎么查看cpU和操作系统的位…

查看全部问答>

求大神 求帮忙 数控直流电源设计

本帖最后由 paulhyde 于 2014-9-15 03:26 编辑 设计内容:1电路原理图2元件清单3实物制作4设计报告设计要求:1输出电压:范围0-9.9V,步进0.1V2纹波不大于10mV3输出电流:500mA4输出电压值由数码管显示  求大神 求帮忙  感激不尽  有 ...…

查看全部问答>