mirror of
https://github.com/espressif/esp-idf.git
synced 2026-05-28 16:46:31 +03:00
update rng souce enable and disable
This commit is contained in:
@@ -9,32 +9,89 @@
|
||||
#include "soc/soc.h"
|
||||
#include "soc/rng_reg.h"
|
||||
#include "esp_rom_sys.h"
|
||||
#include "soc/pcr_reg.h"
|
||||
#include "soc/pmu_reg.h"
|
||||
#include "soc/apb_saradc_reg.h"
|
||||
#include "esp_private/regi2c_ctrl.h"
|
||||
#include "soc/regi2c_saradc.h"
|
||||
|
||||
static const uint32_t SAR2_CHANNEL = 9;
|
||||
static const uint32_t SAR1_CHANNEL = 7;
|
||||
static const uint32_t PATTERN_BIT_WIDTH = 6;
|
||||
static const uint32_t SAR1_ATTEN = 3;
|
||||
static const uint32_t SAR2_ATTEN = 3;
|
||||
|
||||
void sar_adc_enable(void)
|
||||
{
|
||||
REG_SET_BIT(PCR_SARADC_CONF_REG, PCR_SARADC_RST_EN);
|
||||
REG_CLR_BIT(PCR_SARADC_CONF_REG, PCR_SARADC_RST_EN);
|
||||
|
||||
REG_SET_BIT(PCR_SARADC_CONF_REG, PCR_SARADC_REG_CLK_EN);
|
||||
|
||||
REG_SET_BIT(PCR_SARADC_CONF_REG, PCR_SARADC_REG_RST_EN);
|
||||
REG_CLR_BIT(PCR_SARADC_CONF_REG, PCR_SARADC_REG_RST_EN);
|
||||
|
||||
REG_CLR_BIT(PCR_SARADC_CLKM_CONF_REG, PCR_SARADC_CLKM_EN);
|
||||
|
||||
REG_SET_FIELD(PCR_SARADC_CLKM_CONF_REG, PCR_SARADC_CLKM_SEL, 0);
|
||||
|
||||
REG_SET_FIELD(PCR_SARADC_CLKM_CONF_REG, PCR_SARADC_CLKM_DIV_NUM, 0);
|
||||
|
||||
SET_PERI_REG_MASK(PMU_RF_PWC_REG, PMU_XPD_PERIF_I2C);
|
||||
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_DTEST, 0);
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_ENT_SAR, 1);
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_SAR1_EN_TOUT, 1);
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_SAR2_EN_TOUT, 1);
|
||||
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_SAR2_INIT_CODE_MSB, 0x08);
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_SAR2_INIT_CODE_LSB, 0x66);
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_SAR1_INIT_CODE_MSB, 0x08);
|
||||
REGI2C_WRITE_MASK(I2C_SARADC, I2C_SARADC_SAR1_INIT_CODE_LSB, 0x66);
|
||||
|
||||
uint32_t pattern_one = (SAR2_CHANNEL << 2) | SAR2_ATTEN;
|
||||
uint32_t pattern_two = (SAR1_CHANNEL << 2) | SAR1_ATTEN;
|
||||
uint32_t pattern_table = 0 | (pattern_two << 3 * PATTERN_BIT_WIDTH) |pattern_one << 2 * PATTERN_BIT_WIDTH;
|
||||
REG_WRITE(APB_SARADC_SAR_PATT_TAB1_REG, pattern_table);
|
||||
|
||||
REG_SET_FIELD(APB_SARADC_CTRL_REG, APB_SARADC_SARADC_SAR_PATT_LEN, 1);
|
||||
REG_SET_FIELD(APB_SARADC_CTRL_REG, APB_SARADC_SARADC_SAR_CLK_DIV, 15);
|
||||
REG_SET_FIELD(APB_SARADC_CTRL2_REG, APB_SARADC_SARADC_TIMER_TARGET, 200);
|
||||
REG_SET_BIT(APB_SARADC_CTRL2_REG, APB_SARADC_SARADC_TIMER_EN);
|
||||
}
|
||||
|
||||
void sar_adc_disable(void)
|
||||
{
|
||||
REG_CLR_BIT(APB_SARADC_CTRL2_REG, APB_SARADC_SARADC_TIMER_EN);
|
||||
}
|
||||
|
||||
void bootloader_random_enable(void)
|
||||
{
|
||||
REG_SET_BIT(RNG_DATE_REG, RNG_CLK_EN);
|
||||
REG_SET_BIT(RNG_CFG_REG, RNG_TIMER_EN);
|
||||
REG_SET_FIELD(RNG_CFG_REG, RNG_RTC_TIMER_EN, 0x3);
|
||||
// Enable source of saradc
|
||||
sar_adc_enable();
|
||||
|
||||
// Enable source of ring
|
||||
REG_SET_BIT(RNG_CFG_REG, RNG_SAMPLE_ENABLE);
|
||||
|
||||
// // For dieharder test
|
||||
// esp_rom_printf("H4: Random bytes (%s) follow:\n", "test");
|
||||
// while (1)
|
||||
// {
|
||||
// uint32_t random_sync = REG_READ(RNG_DATA_SYNC_REG);
|
||||
// // esp_rom_printf("sync_random_data: %d\n", random_sync);
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
uint32_t random_sync = REG_READ(RNG_DATA_SYNC_REG);
|
||||
uint32_t random_unsync = REG_READ(RNG_DATA_REG);
|
||||
uint32_t rng_cfg = REG_READ(RNG_CFG_REG);
|
||||
uint32_t sample_cnt = (rng_cfg >> RNG_SAMPLE_CNT_S) & 0xFF;
|
||||
esp_rom_printf(" [%d] sync: 0x%08x, unsync: 0x%08x, sample_cnt: 0x%02x\r\n",
|
||||
i + 1, random_sync, random_unsync, sample_cnt);
|
||||
esp_rom_delay_us(1000);
|
||||
}
|
||||
// uart_tx_one_char(random_sync >> 24);
|
||||
// uart_tx_one_char(random_sync >> 16);
|
||||
// uart_tx_one_char(random_sync >> 8);
|
||||
// uart_tx_one_char(random_sync);
|
||||
// }
|
||||
}
|
||||
|
||||
void bootloader_random_disable(void)
|
||||
{
|
||||
// Disable source of saradc
|
||||
sar_adc_disable();
|
||||
|
||||
// Disable source of ring
|
||||
REG_CLR_BIT(RNG_CFG_REG, RNG_SAMPLE_ENABLE);
|
||||
REG_SET_FIELD(RNG_CFG_REG, RNG_RTC_TIMER_EN, 0x0);
|
||||
REG_CLR_BIT(RNG_CFG_REG, RNG_TIMER_EN);
|
||||
REG_CLR_BIT(RNG_DATE_REG, RNG_CLK_EN);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*/
|
||||
|
||||
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define I2C_SAR_ADC 0x69
|
||||
#define I2C_SAR_ADC_HOSTID 0
|
||||
|
||||
@@ -52,7 +50,37 @@
|
||||
#define ADC_SAR1_ENCAL_GND_ADDR 0x8
|
||||
#define ADC_SAR1_ENCAL_GND_ADDR_MSB 0x1
|
||||
#define ADC_SAR1_ENCAL_GND_ADDR_LSB 0x1
|
||||
|
||||
|
||||
|
||||
#define I2C_SARADC_TSENS_DAC 0x6
|
||||
#define I2C_SARADC_TSENS_DAC_MSB 0x3
|
||||
#define I2C_SARADC_TSENS_DAC_LSB 0x0
|
||||
|
||||
#define I2C_SARADC 0x69
|
||||
#define I2C_SARADC_HOSTID 0
|
||||
|
||||
#define I2C_SARADC_SAR1_INIT_CODE_LSB 0
|
||||
#define I2C_SARADC_SAR1_INIT_CODE_LSB_MSB 7
|
||||
#define I2C_SARADC_SAR1_INIT_CODE_LSB_LSB 0
|
||||
|
||||
#define I2C_SARADC_SAR1_INIT_CODE_MSB 1
|
||||
#define I2C_SARADC_SAR1_INIT_CODE_MSB_MSB 3
|
||||
#define I2C_SARADC_SAR1_INIT_CODE_MSB_LSB 0
|
||||
|
||||
#define I2C_SARADC_SAR2_INIT_CODE_LSB 3
|
||||
#define I2C_SARADC_SAR2_INIT_CODE_LSB_MSB 7
|
||||
#define I2C_SARADC_SAR2_INIT_CODE_LSB_LSB 0
|
||||
|
||||
#define I2C_SARADC_SAR2_INIT_CODE_MSB 4
|
||||
#define I2C_SARADC_SAR2_INIT_CODE_MSB_MSB 3
|
||||
#define I2C_SARADC_SAR2_INIT_CODE_MSB_LSB 0
|
||||
|
||||
|
||||
#define I2C_SARADC_SAR1_EN_TOUT 8
|
||||
#define I2C_SARADC_SAR1_EN_TOUT_MSB 0
|
||||
#define I2C_SARADC_SAR1_EN_TOUT_LSB 0
|
||||
|
||||
#define I2C_SARADC_SAR2_EN_TOUT 8
|
||||
#define I2C_SARADC_SAR2_EN_TOUT_MSB 2
|
||||
#define I2C_SARADC_SAR2_EN_TOUT_LSB 2
|
||||
Reference in New Issue
Block a user