随机数发生器 RNG¶
Info
ESP32-S3 内置一个真随机数发生器(RNG),其生成的 32 位随机数可作为加密等操作的基础。ESP32-S3 的随机数发生器可通过物理过程而非算法生成真随机数,所有生成的随机数在特定范围内出现的概率完全一致。
RNG 功能描述¶
下面先来了解噪声源,通过学习噪声源会有一个很好的整体掌握,同时对之后的编程也会有一个清晰的思路。EDP32- S3 的随机数发生器噪声源如下图所示:
ESP32 的随机数发生器通过 RNG_DATA_REG 提供 32 位真随机数,其噪声源主要来自系统中的热噪声和异步时钟。热噪声可来源于 SAR ADC 或高速 ADC,当这些模块工作时,会产生比特流,并通过异或 (XOR) 运算作为随机数种子输入随机数生成器。同时,当数字内核使能 RC_FAST_CLK(20MHz)时,随机数发生器会对其进行采样,利用异步时钟源的亚稳态特性增加熵值。为了保证随机数的最大熵值,建议至少使能一路 ADC(SAR ADC 或高速 ADC)作为随机数种子,同时结合 RC_FAST_CLK 提高熵值。
RND 随机数寄存器¶
RNG_DATA_REG 随机数数据 0x0110 只读
例程¶
本实验使用 ESP32-S3 自带的硬件随机数生成器(RNG),每隔一段时间获取随机数并打印输出。
依赖关系¶
本章无依赖关系
关键函数¶
函数原型 | 说明 | 示例 |
---|---|---|
uint32_t rng_get_random_num(void) | 获取一个随机数 | rng_get_random_num() |
int rng_get_random_range(int min, int max) | 获取指定范围内的随机数 | rng_get_random_range(0, 9) |