找回密码
 立即注册
首页 业界区 安全 《ESP32-S3使用指南—IDF版 V1.6》第三十一章 RNG实验 ...

《ESP32-S3使用指南—IDF版 V1.6》第三十一章 RNG实验

呼延冰枫 昨天 10:34
第三十一章 RNG实验
1)实验平台:正点原子DNESP32S3开发板
2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6
3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子DNESP32S3开发板技术交流群:132780729
1.jpeg

2.png

本章,我们将介绍ESP32-S3的硬件随机数发生器。我们使用BOOT按键来获取硬件随机数,并且将获取到的随机数值显示在LCD上面。同时,使用LED指示程序运行状态。
本章分为如下几个小节:
31.1 随机数发生器简介
31.2 硬件设计
31.3 程序设计
31.4 下载验证
31.1 随机数发生器简介
ESP32-S3内置一个真随机数发生器(RNG),其生成的32位随机数可作为加密等操作的基础。ESP32-S3 的随机数发生器可通过物理过程而非算法生成真随机数,所有生成的随机数在特定范围内出现的概率完全一致。
31.1.1 RNG功能描述
下面先来了解噪声源,通过学习噪声源会有一个很好的整体掌握,同时对之后的编程也会有一个清晰的思路。EDP32- S3的随机数发生器噪声源如图31.1.1.1所示:
3.png

图31.1.1.1 ESP32-S3随机数发生器噪声源
系统可以从随机数发生器的寄存器RNG_DATA_REG中读取随机数,每个读到的32位随机数都是真随机数,噪声源为系统中的热噪声和异步时钟。具体来说,这些热噪声可以来自SARADC或高速ADC或两者兼有。当芯片的SARADC或高速ADC工作时,就会产生比特流,并通过异或(XOR)逻辑运算作为随机数种子进入随机数生成器。当为数字内核使能RC_FAST_CLK时钟时,随机数发生器也会对RC_FAST_CLK(20MHz)进行采样,作为随机数种子。RC_FAST_CLK是一种异步时钟源,由于存在电路亚稳态,因此可以提高随机数发生器的墒值。然而,为了保证随机数发生器可以获得最大熵值,仍建议在使用随机数发生器时至少使能一路ADC作为随机数种子。
31.1.2 RNG随机数寄存器
RND随机数寄存器描述如下所示:
4.png

表31.1.2.1 RNG寄存器列表
5.png

图31.1.2.1 RNG_CR寄存器
需要注意的是,这里的地址都是相对于随机数发生器基地址的地址偏移量。
31.2 硬件设计
31.2.1 例程功能
本实验使用ESP32-S3自带的硬件随机数生成器(RNG),获取随机数,并显示在LCD屏幕上。按BOOT按键可以获取一次随机数。同时程序自动获取0~9范围内的随机数,显示在屏幕上。LED闪烁用于提示程序正在运行。
31.2.2 硬件资源

  • LED
    LED - IO1
    2.独立按键
    BOOT - IO0
  • XL9555
    IIC_SDA-IO41
    IIC_SCL-IO42
  • SPILCD
    CS-IO21
    SCK-IO12
    SDA-IO11
    DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
    PWR- IO1_3(XL9555)
    RST- IO1_2(XL9555)
  • RNG(硬件随机数生成器)
31.2.3 原理图
RNG属于ESP32-S3内部资源,通过软件设置好就可以了。本实验通过配合按键获取随机数和通过LCD显示。
31.3 程序设计
31.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:
6.png

图31.3.1.1随机数实验程序流程图
31.3.2 RNG函数解析
ESP-IDF提供了一套API来配置RNG。要使用此功能,需要导入必要的头文件:
  1. #include "esp_random.h"
复制代码
接下来,作者将介绍一些常用的ESP32-S3中的RNG函数,这些函数的描述及其作用如下:
1,得到随机数
该函数用于获取一个32位的硬件随机数,其函数原型如下:
  1. uint32_t esp_random(void);
复制代码
该函数的形参描述,如下表所示:
7.png

表31.3.2.1 函数esp_random()形参描述
该函数的返回值描述,如下表所示:
8.png

表31.3.2.2 函数esp_random ()返回值描述
31.3.3 RNG驱动解析
在IDF版21_rng例程中,作者在21_rng\components\BSP路径下新增了一个RNG文件夹,分别用于存放rng.c、rng.h这两个文件。其中,rng.h文件负责声明RNG相关的函数和变量,而rng.c文件则实现了RNG的驱动代码。下面,我们将详细解析这两个文件的实现内容。
1,rng.h文件
  1. /* 函数声明 */
  2. uint32_t rng_get_random_num(void);          /* 得到随机数 */
  3. intrng_get_random_range(int min, int max); /* 得到某个范围内的随机数 */
复制代码
2,rng.c文件
[code]/*** @brief       得到随机数* @param       无* @retval      获取到的随机数(32bit)*/uint32_t rng_get_random_num(void){    uint32_t randomnum;       randomnum = esp_random();       return randomnum;}/*** @brief       得到某个范围内的随机数* @param       min,max: 最小,最大值.* @retval      得到的随机数(rval),满足:min
您需要登录后才可以回帖 登录 | 立即注册