mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
esp32c6: add efuse support
This commit is contained in:
parent
68159feb10
commit
21663bd0b9
@ -488,7 +488,7 @@ def main():
|
|||||||
|
|
||||||
parser = argparse.ArgumentParser(description='ESP32 eFuse Manager')
|
parser = argparse.ArgumentParser(description='ESP32 eFuse Manager')
|
||||||
parser.add_argument('--idf_target', '-t', help='Target chip type', choices=['esp32', 'esp32s2', 'esp32s3', 'esp32c3',
|
parser.add_argument('--idf_target', '-t', help='Target chip type', choices=['esp32', 'esp32s2', 'esp32s3', 'esp32c3',
|
||||||
'esp32h2', 'esp32c2'], default='esp32')
|
'esp32h2', 'esp32c2', 'esp32c6'], default='esp32')
|
||||||
parser.add_argument('--quiet', '-q', help="Don't print non-critical status messages to stderr", action='store_true')
|
parser.add_argument('--quiet', '-q', help="Don't print non-critical status messages to stderr", action='store_true')
|
||||||
parser.add_argument('--debug', help='Create header file with debug info', default=False, action='store_false')
|
parser.add_argument('--debug', help='Create header file with debug info', default=False, action='store_false')
|
||||||
parser.add_argument('--info', help='Print info about range of used bits', default=False, action='store_true')
|
parser.add_argument('--info', help='Print info about range of used bits', default=False, action='store_true')
|
||||||
|
55
components/efuse/esp32c6/esp_efuse_fields.c
Normal file
55
components/efuse/esp32c6/esp_efuse_fields.c
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "esp_efuse.h"
|
||||||
|
#include "esp_efuse_utility.h"
|
||||||
|
#include "esp_efuse_table.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "esp_types.h"
|
||||||
|
#include "esp32c6/rom/efuse.h"
|
||||||
|
#include "assert.h"
|
||||||
|
#include "esp_err.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "soc/efuse_periph.h"
|
||||||
|
#include "bootloader_random.h"
|
||||||
|
#include "sys/param.h"
|
||||||
|
|
||||||
|
static __attribute__((unused)) const char *TAG = "efuse";
|
||||||
|
|
||||||
|
// Contains functions that provide access to efuse fields which are often used in IDF.
|
||||||
|
|
||||||
|
// Returns chip package from efuse
|
||||||
|
uint32_t esp_efuse_get_pkg_ver(void)
|
||||||
|
{
|
||||||
|
uint32_t pkg_ver = 0;
|
||||||
|
esp_efuse_read_field_blob(ESP_EFUSE_PKG_VERSION, &pkg_ver, ESP_EFUSE_PKG_VERSION[0]->bit_count);
|
||||||
|
return pkg_ver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
esp_err_t esp_efuse_set_rom_log_scheme(esp_efuse_rom_log_scheme_t log_scheme)
|
||||||
|
{
|
||||||
|
int cur_log_scheme = 0;
|
||||||
|
esp_efuse_read_field_blob(ESP_EFUSE_UART_PRINT_CONTROL, &cur_log_scheme, 2);
|
||||||
|
if (!cur_log_scheme) { // not burned yet
|
||||||
|
return esp_efuse_write_field_blob(ESP_EFUSE_UART_PRINT_CONTROL, &log_scheme, 2);
|
||||||
|
} else {
|
||||||
|
return ESP_ERR_INVALID_STATE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_efuse_disable_rom_download_mode(void)
|
||||||
|
{
|
||||||
|
return esp_efuse_write_field_bit(ESP_EFUSE_DIS_DOWNLOAD_MODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_efuse_enable_rom_secure_download_mode(void)
|
||||||
|
{
|
||||||
|
if (esp_efuse_read_field_bit(ESP_EFUSE_DIS_DOWNLOAD_MODE)) {
|
||||||
|
return ESP_ERR_INVALID_STATE;
|
||||||
|
}
|
||||||
|
return esp_efuse_write_field_bit(ESP_EFUSE_ENABLE_SECURITY_DOWNLOAD);
|
||||||
|
}
|
95
components/efuse/esp32c6/esp_efuse_rtc_calib.c
Normal file
95
components/efuse/esp32c6/esp_efuse_rtc_calib.c
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <esp_bit_defs.h>
|
||||||
|
#include "esp_efuse.h"
|
||||||
|
#include "esp_efuse_table.h"
|
||||||
|
|
||||||
|
int esp_efuse_rtc_calib_get_ver(void)
|
||||||
|
{
|
||||||
|
uint32_t result = 0;
|
||||||
|
esp_efuse_read_field_blob(ESP_EFUSE_BLK_VERSION_MAJOR, &result, ESP_EFUSE_BLK_VERSION_MAJOR[0]->bit_count); // IDF-5366
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t esp_efuse_rtc_calib_get_init_code(int version, uint32_t adc_unit, int atten)
|
||||||
|
{
|
||||||
|
assert(version == 1);
|
||||||
|
(void) adc_unit;
|
||||||
|
const esp_efuse_desc_t** init_code_efuse;
|
||||||
|
assert(atten < 4);
|
||||||
|
if (atten == 0) {
|
||||||
|
init_code_efuse = ESP_EFUSE_ADC1_INIT_CODE_ATTEN0;
|
||||||
|
} else if (atten == 1) {
|
||||||
|
init_code_efuse = ESP_EFUSE_ADC1_INIT_CODE_ATTEN1;
|
||||||
|
} else if (atten == 2) {
|
||||||
|
init_code_efuse = ESP_EFUSE_ADC1_INIT_CODE_ATTEN2;
|
||||||
|
} else {
|
||||||
|
init_code_efuse = ESP_EFUSE_ADC1_INIT_CODE_ATTEN3;
|
||||||
|
}
|
||||||
|
|
||||||
|
int init_code_size = esp_efuse_get_field_size(init_code_efuse);
|
||||||
|
assert(init_code_size == 10);
|
||||||
|
|
||||||
|
uint32_t init_code = 0;
|
||||||
|
ESP_ERROR_CHECK(esp_efuse_read_field_blob(init_code_efuse, &init_code, init_code_size));
|
||||||
|
return init_code + 1000; // version 1 logic
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, int atten, uint32_t* out_digi, uint32_t* out_vol_mv)
|
||||||
|
{
|
||||||
|
const esp_efuse_desc_t** cal_vol_efuse;
|
||||||
|
uint32_t calib_vol_expected_mv;
|
||||||
|
if (version != 1) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
if (atten >= 4) {
|
||||||
|
return ESP_ERR_INVALID_ARG;
|
||||||
|
}
|
||||||
|
if (atten == 0) {
|
||||||
|
cal_vol_efuse = ESP_EFUSE_ADC1_CAL_VOL_ATTEN0;
|
||||||
|
calib_vol_expected_mv = 400;
|
||||||
|
} else if (atten == 1) {
|
||||||
|
cal_vol_efuse = ESP_EFUSE_ADC1_CAL_VOL_ATTEN1;
|
||||||
|
calib_vol_expected_mv = 550;
|
||||||
|
} else if (atten == 2) {
|
||||||
|
cal_vol_efuse = ESP_EFUSE_ADC1_CAL_VOL_ATTEN2;
|
||||||
|
calib_vol_expected_mv = 750;
|
||||||
|
} else {
|
||||||
|
cal_vol_efuse = ESP_EFUSE_ADC1_CAL_VOL_ATTEN3;
|
||||||
|
calib_vol_expected_mv = 1370;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(cal_vol_efuse[0]->bit_count == 10);
|
||||||
|
|
||||||
|
uint32_t cal_vol = 0;
|
||||||
|
ESP_ERROR_CHECK(esp_efuse_read_field_blob(cal_vol_efuse, &cal_vol, cal_vol_efuse[0]->bit_count));
|
||||||
|
|
||||||
|
*out_digi = 2000 + ((cal_vol & BIT(9))? -(cal_vol & ~BIT9): cal_vol);
|
||||||
|
*out_vol_mv = calib_vol_expected_mv;
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
|
||||||
|
{
|
||||||
|
uint32_t version = esp_efuse_rtc_calib_get_ver();
|
||||||
|
if (version != 1) {
|
||||||
|
*tsens_cal = 0.0;
|
||||||
|
return ESP_ERR_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
const esp_efuse_desc_t** cal_temp_efuse;
|
||||||
|
cal_temp_efuse = ESP_EFUSE_TEMP_CALIB;
|
||||||
|
int cal_temp_size = esp_efuse_get_field_size(cal_temp_efuse);
|
||||||
|
assert(cal_temp_size == 9);
|
||||||
|
|
||||||
|
uint32_t cal_temp = 0;
|
||||||
|
esp_err_t err = esp_efuse_read_field_blob(cal_temp_efuse, &cal_temp, cal_temp_size);
|
||||||
|
assert(err == ESP_OK);
|
||||||
|
(void)err;
|
||||||
|
// BIT(8) stands for sign: 1: negtive, 0: positive
|
||||||
|
*tsens_cal = ((cal_temp & BIT(8)) != 0)? -(uint8_t)cal_temp: (uint8_t)cal_temp;
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
1121
components/efuse/esp32c6/esp_efuse_table.c
Normal file
1121
components/efuse/esp32c6/esp_efuse_table.c
Normal file
File diff suppressed because it is too large
Load Diff
178
components/efuse/esp32c6/esp_efuse_table.csv
Normal file
178
components/efuse/esp32c6/esp_efuse_table.csv
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# field_name, | efuse_block, | bit_start, | bit_count, |comment #
|
||||||
|
# | (EFUSE_BLK0 | (0..255) | (1..-) | #
|
||||||
|
# | EFUSE_BLK1 | |MAX_BLK_LEN*| #
|
||||||
|
# | ... | | | #
|
||||||
|
# | EFUSE_BLK10)| | | #
|
||||||
|
##########################################################################
|
||||||
|
# *) The value MAX_BLK_LEN depends on CONFIG_EFUSE_MAX_BLK_LEN, will be replaced with "None" - 256. "3/4" - 192. "REPEAT" - 128.
|
||||||
|
# !!!!!!!!!!! #
|
||||||
|
# After editing this file, run the command manually "make efuse_common_table" or "idf.py efuse-common-table"
|
||||||
|
# this will generate new source files, next rebuild all the sources.
|
||||||
|
# !!!!!!!!!!! #
|
||||||
|
|
||||||
|
# EFUSE_RD_REPEAT_DATA BLOCK #
|
||||||
|
##############################
|
||||||
|
# EFUSE_RD_WR_DIS_REG #
|
||||||
|
WR_DIS, EFUSE_BLK0, 0, 32, Write protection
|
||||||
|
WR_DIS.RD_DIS, EFUSE_BLK0, 0, 1, Write protection for RD_DIS_KEY0 RD_DIS_KEY1 RD_DIS_KEY2 RD_DIS_KEY3 RD_DIS_KEY4 RD_DIS_KEY5 RD_DIS_SYS_DATA_PART2
|
||||||
|
WR_DIS.SWAP_UART_SDIO_EN, EFUSE_BLK0, 1, 1, Write protection for SWAP_UART_SDIO_EN
|
||||||
|
WR_DIS.GROUP_1, EFUSE_BLK0, 2, 1, Write protection for DIS_ICACHE DIS_USB_JTAG DIS_DOWNLOAD_ICACHE DIS_USB_SERIAL_JTAG DIS_FORCE_DOWNLOAD DIS_TWAI DIS_JTAG_SEL_ENABLE SOFT_DIS_JTAG DIS_PADJTAG DIS_DOWNLOAD_MANUAL_ENCRYPT
|
||||||
|
WR_DIS.GROUP_2, EFUSE_BLK0, 3, 1, Write protection for WDT_DELAY_SEL
|
||||||
|
WR_DIS.SPI_BOOT_CRYPT_CNT, EFUSE_BLK0, 4, 1, Write protection for SPI_BOOT_CRYPT_CNT
|
||||||
|
WR_DIS.SECURE_BOOT_KEY_REVOKE0,EFUSE_BLK0, 5, 1, Write protection for SECURE_BOOT_KEY_REVOKE0
|
||||||
|
WR_DIS.SECURE_BOOT_KEY_REVOKE1,EFUSE_BLK0, 6, 1, Write protection for SECURE_BOOT_KEY_REVOKE1
|
||||||
|
WR_DIS.SECURE_BOOT_KEY_REVOKE2,EFUSE_BLK0, 7, 1, Write protection for SECURE_BOOT_KEY_REVOKE2
|
||||||
|
WR_DIS.KEY0_PURPOSE, EFUSE_BLK0, 8, 1, Write protection for key_purpose. KEY0
|
||||||
|
WR_DIS.KEY1_PURPOSE, EFUSE_BLK0, 9, 1, Write protection for key_purpose. KEY1
|
||||||
|
WR_DIS.KEY2_PURPOSE, EFUSE_BLK0, 10, 1, Write protection for key_purpose. KEY2
|
||||||
|
WR_DIS.KEY3_PURPOSE, EFUSE_BLK0, 11, 1, Write protection for key_purpose. KEY3
|
||||||
|
WR_DIS.KEY4_PURPOSE, EFUSE_BLK0, 12, 1, Write protection for key_purpose. KEY4
|
||||||
|
WR_DIS.KEY5_PURPOSE, EFUSE_BLK0, 13, 1, Write protection for key_purpose. KEY5
|
||||||
|
WR_DIS.SEC_DPA_LEVEL, EFUSE_BLK0, 14, 1, Write protection for SEC_DPA_LEVEL
|
||||||
|
WR_DIS.SECURE_BOOT_EN, EFUSE_BLK0, 15, 1, Write protection for SECURE_BOOT_EN
|
||||||
|
WR_DIS.SECURE_BOOT_AGGRESSIVE_REVOKE,EFUSE_BLK0, 16, 1, Write protection for SECURE_BOOT_AGGRESSIVE_REVOKE
|
||||||
|
WR_DIS.GROUP_3, EFUSE_BLK0, 18, 1, Write protection for FLASH_TPUW DIS_DOWNLOAD_MODE DIS_DIRECT_BOOT DIS_USB_PRINT DIS_USB_DOWNLOAD_MODE ENABLE_SECURITY_DOWNLOAD UART_PRINT_CONTROLFLASH_TYPE FORCE_SEND_RESUME SECURE_VERSION
|
||||||
|
WR_DIS.SECURE_BOOT_DISABLE_FAST_WAKE,EFUSE_BLK0, 19, 1, Write protection for SECURE_BOOT_DISABLE_FAST_WAKE
|
||||||
|
WR_DIS.BLK1, EFUSE_BLK0, 20, 1, Write protection for EFUSE_BLK1. MAC_SPI_8M_SYS
|
||||||
|
WR_DIS.SYS_DATA_PART1, EFUSE_BLK0, 21, 1, Write protection for EFUSE_BLK2. SYS_DATA_PART1
|
||||||
|
WR_DIS.USER_DATA, EFUSE_BLK0, 22, 1, Write protection for EFUSE_BLK3. USER_DATA
|
||||||
|
WR_DIS.KEY0, EFUSE_BLK0, 23, 1, Write protection for EFUSE_BLK4. KEY0
|
||||||
|
WR_DIS.KEY1, EFUSE_BLK0, 24, 1, Write protection for EFUSE_BLK5. KEY1
|
||||||
|
WR_DIS.KEY2, EFUSE_BLK0, 25, 1, Write protection for EFUSE_BLK6. KEY2
|
||||||
|
WR_DIS.KEY3, EFUSE_BLK0, 26, 1, Write protection for EFUSE_BLK7. KEY3
|
||||||
|
WR_DIS.KEY4, EFUSE_BLK0, 27, 1, Write protection for EFUSE_BLK8. KEY4
|
||||||
|
WR_DIS.KEY5, EFUSE_BLK0, 28, 1, Write protection for EFUSE_BLK9. KEY5
|
||||||
|
WR_DIS.SYS_DATA_PART2, EFUSE_BLK0, 29, 1, Write protection for EFUSE_BLK10. SYS_DATA_PART2
|
||||||
|
|
||||||
|
# EFUSE_RD_REPEAT_DATA0_REG #
|
||||||
|
RD_DIS, EFUSE_BLK0, 32, 7, Read protection
|
||||||
|
RD_DIS.KEY0, EFUSE_BLK0, 32, 1, Read protection for EFUSE_BLK4. KEY0
|
||||||
|
RD_DIS.KEY1, EFUSE_BLK0, 33, 1, Read protection for EFUSE_BLK5. KEY1
|
||||||
|
RD_DIS.KEY2, EFUSE_BLK0, 34, 1, Read protection for EFUSE_BLK6. KEY2
|
||||||
|
RD_DIS.KEY3, EFUSE_BLK0, 35, 1, Read protection for EFUSE_BLK7. KEY3
|
||||||
|
RD_DIS.KEY4, EFUSE_BLK0, 36, 1, Read protection for EFUSE_BLK8. KEY4
|
||||||
|
RD_DIS.KEY5, EFUSE_BLK0, 37, 1, Read protection for EFUSE_BLK9. KEY5
|
||||||
|
RD_DIS.SYS_DATA_PART2, EFUSE_BLK0, 38, 1, Read protection for EFUSE_BLK10. SYS_DATA_PART2
|
||||||
|
SWAP_UART_SDIO_EN, EFUSE_BLK0, 39, 1, Swap pad of uart and sdio.
|
||||||
|
DIS_ICACHE, EFUSE_BLK0, 40, 1, Disable Icache
|
||||||
|
DIS_USB_JTAG, EFUSE_BLK0, 41, 1, Disable USB JTAG
|
||||||
|
DIS_DOWNLOAD_ICACHE, EFUSE_BLK0, 42, 1, Disable Icache in download mode
|
||||||
|
DIS_USB_SERIAL_JTAG, EFUSE_BLK0, 43, 1, Disable USB_SERIAL_JTAG
|
||||||
|
DIS_FORCE_DOWNLOAD, EFUSE_BLK0, 44, 1, Disable force chip go to download mode function
|
||||||
|
DIS_TWAI, EFUSE_BLK0, 46, 1, Disable TWAI function
|
||||||
|
JTAG_SEL_ENABLE, EFUSE_BLK0, 47, 1, Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0.
|
||||||
|
SOFT_DIS_JTAG, EFUSE_BLK0, 48, 3, Set these bits to disable JTAG in the soft way (odd number 1 means disable). JTAG can be enabled in HMAC module.
|
||||||
|
DIS_PAD_JTAG, EFUSE_BLK0, 51, 1, Disable JTAG in the hard way. JTAG is disabled permanently.
|
||||||
|
DIS_DOWNLOAD_MANUAL_ENCRYPT, EFUSE_BLK0, 52, 1, Disable flash encryption when in download boot modes.
|
||||||
|
USB_DREFH, EFUSE_BLK0, 53, 2, Controls single-end input threshold vrefh 1.76 V to 2 V with step of 80 mV stored in eFuse.
|
||||||
|
USB_DREFL, EFUSE_BLK0, 55, 2, Controls single-end input threshold vrefl 0.8 V to 1.04 V with step of 80 mV stored in eFuse.
|
||||||
|
USB_EXCHG_PINS, EFUSE_BLK0, 57, 1, Exchange D+ D- pins
|
||||||
|
VDD_SPI_AS_GPIO, EFUSE_BLK0, 58, 1, Set this bit to vdd spi pin function as gpio
|
||||||
|
|
||||||
|
|
||||||
|
# EFUSE_RD_REPEAT_DATA1_REG #
|
||||||
|
WDT_DELAY_SEL, EFUSE_BLK0, 80, 2, Select RTC WDT time out threshold
|
||||||
|
SPI_BOOT_CRYPT_CNT, EFUSE_BLK0, 82, 3, SPI boot encrypt decrypt enable. odd number 1 enable. even number 1 disable
|
||||||
|
SECURE_BOOT_KEY_REVOKE0, EFUSE_BLK0, 85, 1, Enable revoke first secure boot key
|
||||||
|
SECURE_BOOT_KEY_REVOKE1, EFUSE_BLK0, 86, 1, Enable revoke second secure boot key
|
||||||
|
SECURE_BOOT_KEY_REVOKE2, EFUSE_BLK0, 87, 1, Enable revoke third secure boot key
|
||||||
|
KEY_PURPOSE_0, EFUSE_BLK0, 88, 4, Key0 purpose
|
||||||
|
KEY_PURPOSE_1, EFUSE_BLK0, 92, 4, Key1 purpose
|
||||||
|
|
||||||
|
# EFUSE_RD_REPEAT_DATA2_REG #
|
||||||
|
KEY_PURPOSE_2, EFUSE_BLK0, 96, 4, Key2 purpose
|
||||||
|
KEY_PURPOSE_3, EFUSE_BLK0, 100, 4, Key3 purpose
|
||||||
|
KEY_PURPOSE_4, EFUSE_BLK0, 104, 4, Key4 purpose
|
||||||
|
KEY_PURPOSE_5, EFUSE_BLK0, 108, 4, Key5 purpose
|
||||||
|
SEC_DPA_LEVEL, EFUSE_BLK0, 112, 2, Configures the clock random divide mode to determine the spa secure level
|
||||||
|
SECURE_BOOT_EN, EFUSE_BLK0, 116, 1, Secure boot enable
|
||||||
|
SECURE_BOOT_AGGRESSIVE_REVOKE, EFUSE_BLK0, 117, 1, Enable aggressive secure boot revoke
|
||||||
|
FLASH_TPUW, EFUSE_BLK0, 124, 4, Flash wait time after power up. (unit is ms). When value is 15. the time is 30 ms
|
||||||
|
|
||||||
|
# EFUSE_RD_REPEAT_DATA3_REG #
|
||||||
|
DIS_DOWNLOAD_MODE, EFUSE_BLK0, 128, 1, Disble download mode include boot_mode[3:0] is 0 1 2 3 6 7
|
||||||
|
DIS_DIRECT_BOOT, EFUSE_BLK0, 129, 1, Disable direct boot mode
|
||||||
|
DIS_USB_PRINT, EFUSE_BLK0, 130, 1, Disable USB Print
|
||||||
|
DIS_USB_DOWNLOAD_MODE, EFUSE_BLK0, 132, 1, Disable download through USB
|
||||||
|
ENABLE_SECURITY_DOWNLOAD, EFUSE_BLK0, 133, 1, Enable security download mode
|
||||||
|
UART_PRINT_CONTROL, EFUSE_BLK0, 134, 2, b00:force print. b01:control by GPIO8 - low level print. b10:control by GPIO8 - high level print. b11:force disable print.
|
||||||
|
FORCE_SEND_RESUME, EFUSE_BLK0, 141, 1, Force ROM code to send a resume command during SPI boot
|
||||||
|
SECURE_VERSION, EFUSE_BLK0, 142, 16, Secure version for anti-rollback
|
||||||
|
|
||||||
|
# EFUSE_RD_REPEAT_DATA4_REG #
|
||||||
|
DISABLE_WAFER_VERSION_MAJOR, EFUSE_BLK0, 160, 1, Disables check of wafer version major
|
||||||
|
DISABLE_BLK_VERSION_MAJOR, EFUSE_BLK0, 161, 1, Disables check of blk version major
|
||||||
|
|
||||||
|
# MAC_SPI_SYS BLOCK#
|
||||||
|
#######################
|
||||||
|
# RD_MAC_SPI_SYS_0 - RD_MAC_SPI_SYS_2
|
||||||
|
MAC_FACTORY, EFUSE_BLK1, 40, 8, Factory MAC addr [0]
|
||||||
|
, EFUSE_BLK1, 32, 8, Factory MAC addr [1]
|
||||||
|
, EFUSE_BLK1, 24, 8, Factory MAC addr [2]
|
||||||
|
, EFUSE_BLK1, 16, 8, Factory MAC addr [3]
|
||||||
|
, EFUSE_BLK1, 8, 8, Factory MAC addr [4]
|
||||||
|
, EFUSE_BLK1, 0, 8, Factory MAC addr [5]
|
||||||
|
SPI_PAD_CONFIG_CLK, EFUSE_BLK1, 48, 6, SPI_PAD_configure CLK
|
||||||
|
SPI_PAD_CONFIG_Q_D1, EFUSE_BLK1, 54, 6, SPI_PAD_configure Q(D1)
|
||||||
|
SPI_PAD_CONFIG_D_D0, EFUSE_BLK1, 60, 6, SPI_PAD_configure D(D0)
|
||||||
|
SPI_PAD_CONFIG_CS, EFUSE_BLK1, 66, 6, SPI_PAD_configure CS
|
||||||
|
SPI_PAD_CONFIG_HD_D3, EFUSE_BLK1, 72, 6, SPI_PAD_configure HD(D3)
|
||||||
|
SPI_PAD_CONFIG_WP_D2, EFUSE_BLK1, 78, 6, SPI_PAD_configure WP(D2)
|
||||||
|
SPI_PAD_CONFIG_DQS, EFUSE_BLK1, 84, 6, SPI_PAD_configure DQS
|
||||||
|
SPI_PAD_CONFIG_D4, EFUSE_BLK1, 90, 6, SPI_PAD_configure D4
|
||||||
|
SPI_PAD_CONFIG_D5, EFUSE_BLK1, 96, 6, SPI_PAD_configure D5
|
||||||
|
|
||||||
|
# RD_MAC_SPI_SYS_3
|
||||||
|
SPI_PAD_CONFIG_D6, EFUSE_BLK1, 102, 6, SPI_PAD_configure D6
|
||||||
|
SPI_PAD_CONFIG_D7, EFUSE_BLK1, 108, 6, SPI_PAD_configure D7
|
||||||
|
WAFER_VERSION_MINOR, EFUSE_BLK1, 114, 3, WAFER_VERSION_MINOR least significant bits
|
||||||
|
, EFUSE_BLK1, 183, 1, WAFER_VERSION_MINOR most significant bit
|
||||||
|
# WAFER_VERSION_MINOR most significant bit is from RD_MAC_SPI_SYS_5
|
||||||
|
PKG_VERSION, EFUSE_BLK1, 117, 3, Package version 0:ESP32C3
|
||||||
|
BLK_VERSION_MINOR, EFUSE_BLK1, 120, 3, BLK_VERSION_MINOR
|
||||||
|
|
||||||
|
# RD_MAC_SPI_SYS_5
|
||||||
|
# WAFER_VERSION_MINOR most significant bit
|
||||||
|
WAFER_VERSION_MAJOR, EFUSE_BLK1, 184, 2, WAFER_VERSION_MAJOR
|
||||||
|
|
||||||
|
# SYS_DATA_PART1 BLOCK# - System configuration
|
||||||
|
#######################
|
||||||
|
# RD_SYS_PART1_DATA0 - rd_sys_part1_data3
|
||||||
|
OPTIONAL_UNIQUE_ID, EFUSE_BLK2, 0, 128, Optional unique 128-bit ID
|
||||||
|
|
||||||
|
# RD_SYS_PART1_DATA4
|
||||||
|
BLK_VERSION_MAJOR, EFUSE_BLK2, 128, 2, BLK_VERSION_MAJOR of BLOCK2
|
||||||
|
TEMP_CALIB, EFUSE_BLK2, 131, 9, Temperature calibration data
|
||||||
|
OCODE, EFUSE_BLK2, 140, 8, ADC OCode
|
||||||
|
ADC1_INIT_CODE_ATTEN0, EFUSE_BLK2, 148, 10, ADC1 init code at atten0
|
||||||
|
ADC1_INIT_CODE_ATTEN1, EFUSE_BLK2, 158, 10, ADC1 init code at atten1
|
||||||
|
|
||||||
|
# RD_SYS_PART1_DATA5
|
||||||
|
ADC1_INIT_CODE_ATTEN2, EFUSE_BLK2, 168, 10, ADC1 init code at atten2
|
||||||
|
ADC1_INIT_CODE_ATTEN3, EFUSE_BLK2, 178, 10, ADC1 init code at atten3
|
||||||
|
ADC1_CAL_VOL_ATTEN0, EFUSE_BLK2, 188, 10, ADC1 calibration voltage at atten0
|
||||||
|
ADC1_CAL_VOL_ATTEN1, EFUSE_BLK2, 198, 10, ADC1 calibration voltage at atten1
|
||||||
|
ADC1_CAL_VOL_ATTEN2, EFUSE_BLK2, 208, 10, ADC1 calibration voltage at atten2
|
||||||
|
ADC1_CAL_VOL_ATTEN3, EFUSE_BLK2, 218, 10, ADC1 calibration voltage at atten3
|
||||||
|
|
||||||
|
################
|
||||||
|
USER_DATA, EFUSE_BLK3, 0, 256, User data
|
||||||
|
USER_DATA.MAC_CUSTOM, EFUSE_BLK3, 200, 48, Custom MAC
|
||||||
|
|
||||||
|
################
|
||||||
|
KEY0, EFUSE_BLK4, 0, 256, Key0 or user data
|
||||||
|
KEY1, EFUSE_BLK5, 0, 256, Key1 or user data
|
||||||
|
KEY2, EFUSE_BLK6, 0, 256, Key2 or user data
|
||||||
|
KEY3, EFUSE_BLK7, 0, 256, Key3 or user data
|
||||||
|
KEY4, EFUSE_BLK8, 0, 256, Key4 or user data
|
||||||
|
KEY5, EFUSE_BLK9, 0, 256, Key5 or user data
|
||||||
|
SYS_DATA_PART2, EFUSE_BLK10, 0, 256, System configuration
|
||||||
|
|
||||||
|
# AUTO CONFIG DIG&RTC DBIAS#
|
||||||
|
################
|
||||||
|
K_RTC_LDO, EFUSE_BLK1, 135, 7, BLOCK1 K_RTC_LDO
|
||||||
|
K_DIG_LDO, EFUSE_BLK1, 142, 7, BLOCK1 K_DIG_LDO
|
||||||
|
V_RTC_DBIAS20, EFUSE_BLK1, 149, 8, BLOCK1 voltage of rtc dbias20
|
||||||
|
V_DIG_DBIAS20, EFUSE_BLK1, 157, 8, BLOCK1 voltage of digital dbias20
|
||||||
|
DIG_DBIAS_HVT, EFUSE_BLK1, 165, 5, BLOCK1 digital dbias when hvt
|
||||||
|
THRES_HVT, EFUSE_BLK1, 170, 10, BLOCK1 pvt threshold when hvt
|
Can't render this file because it contains an unexpected character in line 7 and column 87.
|
215
components/efuse/esp32c6/esp_efuse_utility.c
Normal file
215
components/efuse/esp32c6/esp_efuse_utility.c
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "assert.h"
|
||||||
|
#include "esp_efuse_utility.h"
|
||||||
|
#include "soc/efuse_periph.h"
|
||||||
|
#include "hal/efuse_hal.h"
|
||||||
|
|
||||||
|
static const char *TAG = "efuse";
|
||||||
|
|
||||||
|
#ifdef CONFIG_EFUSE_VIRTUAL
|
||||||
|
extern uint32_t virt_blocks[EFUSE_BLK_MAX][COUNT_EFUSE_REG_PER_BLOCK];
|
||||||
|
#endif // CONFIG_EFUSE_VIRTUAL
|
||||||
|
|
||||||
|
/*Range addresses to read blocks*/
|
||||||
|
const esp_efuse_range_addr_t range_read_addr_blocks[] = {
|
||||||
|
{EFUSE_RD_WR_DIS_REG, EFUSE_RD_REPEAT_DATA4_REG}, // range address of EFUSE_BLK0 REPEAT
|
||||||
|
{EFUSE_RD_MAC_SPI_SYS_0_REG, EFUSE_RD_MAC_SPI_SYS_5_REG}, // range address of EFUSE_BLK1 MAC_SPI_8M
|
||||||
|
{EFUSE_RD_SYS_PART1_DATA0_REG, EFUSE_RD_SYS_PART1_DATA7_REG}, // range address of EFUSE_BLK2 SYS_DATA
|
||||||
|
{EFUSE_RD_USR_DATA0_REG, EFUSE_RD_USR_DATA7_REG}, // range address of EFUSE_BLK3 USR_DATA
|
||||||
|
{EFUSE_RD_KEY0_DATA0_REG, EFUSE_RD_KEY0_DATA7_REG}, // range address of EFUSE_BLK4 KEY0
|
||||||
|
{EFUSE_RD_KEY1_DATA0_REG, EFUSE_RD_KEY1_DATA7_REG}, // range address of EFUSE_BLK5 KEY1
|
||||||
|
{EFUSE_RD_KEY2_DATA0_REG, EFUSE_RD_KEY2_DATA7_REG}, // range address of EFUSE_BLK6 KEY2
|
||||||
|
{EFUSE_RD_KEY3_DATA0_REG, EFUSE_RD_KEY3_DATA7_REG}, // range address of EFUSE_BLK7 KEY3
|
||||||
|
{EFUSE_RD_KEY4_DATA0_REG, EFUSE_RD_KEY4_DATA7_REG}, // range address of EFUSE_BLK8 KEY4
|
||||||
|
{EFUSE_RD_KEY5_DATA0_REG, EFUSE_RD_KEY5_DATA7_REG}, // range address of EFUSE_BLK9 KEY5
|
||||||
|
{EFUSE_RD_SYS_PART2_DATA0_REG, EFUSE_RD_SYS_PART2_DATA7_REG} // range address of EFUSE_BLK10 KEY6
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint32_t write_mass_blocks[EFUSE_BLK_MAX][COUNT_EFUSE_REG_PER_BLOCK] = { 0 };
|
||||||
|
|
||||||
|
/*Range addresses to write blocks (it is not real regs, it is buffer) */
|
||||||
|
const esp_efuse_range_addr_t range_write_addr_blocks[] = {
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK0][0], (uint32_t) &write_mass_blocks[EFUSE_BLK0][5]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK1][0], (uint32_t) &write_mass_blocks[EFUSE_BLK1][5]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK2][0], (uint32_t) &write_mass_blocks[EFUSE_BLK2][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK3][0], (uint32_t) &write_mass_blocks[EFUSE_BLK3][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK4][0], (uint32_t) &write_mass_blocks[EFUSE_BLK4][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK5][0], (uint32_t) &write_mass_blocks[EFUSE_BLK5][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK6][0], (uint32_t) &write_mass_blocks[EFUSE_BLK6][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK7][0], (uint32_t) &write_mass_blocks[EFUSE_BLK7][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK8][0], (uint32_t) &write_mass_blocks[EFUSE_BLK8][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK9][0], (uint32_t) &write_mass_blocks[EFUSE_BLK9][7]},
|
||||||
|
{(uint32_t) &write_mass_blocks[EFUSE_BLK10][0], (uint32_t) &write_mass_blocks[EFUSE_BLK10][7]},
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef CONFIG_EFUSE_VIRTUAL
|
||||||
|
// Update Efuse timing configuration
|
||||||
|
static esp_err_t esp_efuse_set_timing(void)
|
||||||
|
{
|
||||||
|
// efuse clock is fixed.
|
||||||
|
// An argument (0) is for compatibility and will be ignored.
|
||||||
|
efuse_hal_set_timing(0);
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
#endif // ifndef CONFIG_EFUSE_VIRTUAL
|
||||||
|
|
||||||
|
// Efuse read operation: copies data from physical efuses to efuse read registers.
|
||||||
|
void esp_efuse_utility_clear_program_registers(void)
|
||||||
|
{
|
||||||
|
efuse_hal_read();
|
||||||
|
efuse_hal_clear_program_registers();
|
||||||
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_efuse_utility_check_errors(void)
|
||||||
|
{
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Burn values written to the efuse write registers
|
||||||
|
esp_err_t esp_efuse_utility_burn_chip(void)
|
||||||
|
{
|
||||||
|
esp_err_t error = ESP_OK;
|
||||||
|
#ifdef CONFIG_EFUSE_VIRTUAL
|
||||||
|
ESP_LOGW(TAG, "Virtual efuses enabled: Not really burning eFuses");
|
||||||
|
for (int num_block = EFUSE_BLK_MAX - 1; num_block >= EFUSE_BLK0; num_block--) {
|
||||||
|
int subblock = 0;
|
||||||
|
for (uint32_t addr_wr_block = range_write_addr_blocks[num_block].start; addr_wr_block <= range_write_addr_blocks[num_block].end; addr_wr_block += 4) {
|
||||||
|
virt_blocks[num_block][subblock++] |= REG_READ(addr_wr_block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef CONFIG_EFUSE_VIRTUAL_KEEP_IN_FLASH
|
||||||
|
esp_efuse_utility_write_efuses_to_flash();
|
||||||
|
#endif
|
||||||
|
#else // CONFIG_EFUSE_VIRTUAL
|
||||||
|
if (esp_efuse_set_timing() != ESP_OK) {
|
||||||
|
ESP_LOGE(TAG, "Efuse fields are not burnt");
|
||||||
|
} else {
|
||||||
|
// Permanently update values written to the efuse write registers
|
||||||
|
// It is necessary to process blocks in the order from MAX-> EFUSE_BLK0, because EFUSE_BLK0 has protection bits for other blocks.
|
||||||
|
for (int num_block = EFUSE_BLK_MAX - 1; num_block >= EFUSE_BLK0; num_block--) {
|
||||||
|
bool need_burn_block = false;
|
||||||
|
for (uint32_t addr_wr_block = range_write_addr_blocks[num_block].start; addr_wr_block <= range_write_addr_blocks[num_block].end; addr_wr_block += 4) {
|
||||||
|
if (REG_READ(addr_wr_block) != 0) {
|
||||||
|
need_burn_block = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!need_burn_block) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (error) {
|
||||||
|
// It is done for a use case: BLOCK2 (Flash encryption key) could have an error (incorrect written data)
|
||||||
|
// in this case we can not burn any data into BLOCK0 because it might set read/write protections of BLOCK2.
|
||||||
|
ESP_LOGE(TAG, "BLOCK%d can not be burned because a previous block got an error, skipped.", num_block);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
efuse_hal_clear_program_registers();
|
||||||
|
if (esp_efuse_get_coding_scheme(num_block) == EFUSE_CODING_SCHEME_RS) {
|
||||||
|
uint8_t block_rs[12];
|
||||||
|
efuse_hal_rs_calculate((void *)range_write_addr_blocks[num_block].start, block_rs);
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
||||||
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||||
|
memcpy((void *)EFUSE_PGM_CHECK_VALUE0_REG, block_rs, sizeof(block_rs));
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
}
|
||||||
|
unsigned r_data_len = (range_read_addr_blocks[num_block].end - range_read_addr_blocks[num_block].start) + sizeof(uint32_t);
|
||||||
|
unsigned data_len = (range_write_addr_blocks[num_block].end - range_write_addr_blocks[num_block].start) + sizeof(uint32_t);
|
||||||
|
memcpy((void *)EFUSE_PGM_DATA0_REG, (void *)range_write_addr_blocks[num_block].start, data_len);
|
||||||
|
|
||||||
|
uint32_t backup_write_data[8 + 3]; // 8 words are data and 3 words are RS coding data
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#if __GNUC__ >= 11
|
||||||
|
#pragma GCC diagnostic ignored "-Wstringop-overread"
|
||||||
|
#endif
|
||||||
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||||
|
memcpy(backup_write_data, (void *)EFUSE_PGM_DATA0_REG, sizeof(backup_write_data));
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
int repeat_burn_op = 1;
|
||||||
|
bool correct_written_data;
|
||||||
|
bool coding_error_before = efuse_hal_is_coding_error_in_block(num_block);
|
||||||
|
if (coding_error_before) {
|
||||||
|
ESP_LOGW(TAG, "BLOCK%d already has a coding error", num_block);
|
||||||
|
}
|
||||||
|
bool coding_error_occurred;
|
||||||
|
|
||||||
|
do {
|
||||||
|
ESP_LOGI(TAG, "BURN BLOCK%d", num_block);
|
||||||
|
efuse_hal_program(num_block); // BURN a block
|
||||||
|
|
||||||
|
bool coding_error_after;
|
||||||
|
for (unsigned i = 0; i < 5; i++) {
|
||||||
|
efuse_hal_read();
|
||||||
|
coding_error_after = efuse_hal_is_coding_error_in_block(num_block);
|
||||||
|
if (coding_error_after == true) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
coding_error_occurred = (coding_error_before != coding_error_after) && coding_error_before == false;
|
||||||
|
if (coding_error_occurred) {
|
||||||
|
ESP_LOGW(TAG, "BLOCK%d got a coding error", num_block);
|
||||||
|
}
|
||||||
|
|
||||||
|
correct_written_data = esp_efuse_utility_is_correct_written_data(num_block, r_data_len);
|
||||||
|
if (!correct_written_data || coding_error_occurred) {
|
||||||
|
ESP_LOGW(TAG, "BLOCK%d: next retry to fix an error [%d/3]...", num_block, repeat_burn_op);
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
||||||
|
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||||
|
memcpy((void *)EFUSE_PGM_DATA0_REG, (void *)backup_write_data, sizeof(backup_write_data));
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
}
|
||||||
|
|
||||||
|
} while ((!correct_written_data || coding_error_occurred) && repeat_burn_op++ < 3);
|
||||||
|
|
||||||
|
if (coding_error_occurred) {
|
||||||
|
ESP_LOGW(TAG, "Coding error was not fixed");
|
||||||
|
if (num_block == 0) {
|
||||||
|
ESP_LOGE(TAG, "BLOCK0 got a coding error, which might be critical for security");
|
||||||
|
error = ESP_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!correct_written_data) {
|
||||||
|
ESP_LOGE(TAG, "Written data are incorrect");
|
||||||
|
error = ESP_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // CONFIG_EFUSE_VIRTUAL
|
||||||
|
esp_efuse_utility_reset();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
// After esp_efuse_write.. functions EFUSE_BLKx_WDATAx_REG were filled is not coded values.
|
||||||
|
// This function reads EFUSE_BLKx_WDATAx_REG registers, and checks possible to write these data with RS coding scheme.
|
||||||
|
// The RS coding scheme does not require data changes for the encoded data. esp32s2 has special registers for this.
|
||||||
|
// They will be filled during the burn operation.
|
||||||
|
esp_err_t esp_efuse_utility_apply_new_coding_scheme()
|
||||||
|
{
|
||||||
|
// start with EFUSE_BLK1. EFUSE_BLK0 - always uses EFUSE_CODING_SCHEME_NONE.
|
||||||
|
for (int num_block = EFUSE_BLK1; num_block < EFUSE_BLK_MAX; num_block++) {
|
||||||
|
if (esp_efuse_get_coding_scheme(num_block) == EFUSE_CODING_SCHEME_RS) {
|
||||||
|
for (uint32_t addr_wr_block = range_write_addr_blocks[num_block].start; addr_wr_block <= range_write_addr_blocks[num_block].end; addr_wr_block += 4) {
|
||||||
|
if (REG_READ(addr_wr_block)) {
|
||||||
|
int num_reg = 0;
|
||||||
|
for (uint32_t addr_rd_block = range_read_addr_blocks[num_block].start; addr_rd_block <= range_read_addr_blocks[num_block].end; addr_rd_block += 4, ++num_reg) {
|
||||||
|
if (esp_efuse_utility_read_reg(num_block, num_reg)) {
|
||||||
|
ESP_LOGE(TAG, "Bits are not empty. Write operation is forbidden.");
|
||||||
|
return ESP_ERR_CODING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
79
components/efuse/esp32c6/include/esp_efuse_chip.h
Normal file
79
components/efuse/esp32c6/include/esp_efuse_chip.h
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Type of eFuse blocks ESP32C6
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
EFUSE_BLK0 = 0, /**< Number of eFuse BLOCK0. REPEAT_DATA */
|
||||||
|
|
||||||
|
EFUSE_BLK1 = 1, /**< Number of eFuse BLOCK1. MAC_SPI_8M_SYS */
|
||||||
|
|
||||||
|
EFUSE_BLK2 = 2, /**< Number of eFuse BLOCK2. SYS_DATA_PART1 */
|
||||||
|
EFUSE_BLK_SYS_DATA_PART1 = 2, /**< Number of eFuse BLOCK2. SYS_DATA_PART1 */
|
||||||
|
|
||||||
|
EFUSE_BLK3 = 3, /**< Number of eFuse BLOCK3. USER_DATA*/
|
||||||
|
EFUSE_BLK_USER_DATA = 3, /**< Number of eFuse BLOCK3. USER_DATA*/
|
||||||
|
|
||||||
|
EFUSE_BLK4 = 4, /**< Number of eFuse BLOCK4. KEY0 */
|
||||||
|
EFUSE_BLK_KEY0 = 4, /**< Number of eFuse BLOCK4. KEY0 */
|
||||||
|
|
||||||
|
EFUSE_BLK5 = 5, /**< Number of eFuse BLOCK5. KEY1 */
|
||||||
|
EFUSE_BLK_KEY1 = 5, /**< Number of eFuse BLOCK5. KEY1 */
|
||||||
|
|
||||||
|
EFUSE_BLK6 = 6, /**< Number of eFuse BLOCK6. KEY2 */
|
||||||
|
EFUSE_BLK_KEY2 = 6, /**< Number of eFuse BLOCK6. KEY2 */
|
||||||
|
|
||||||
|
EFUSE_BLK7 = 7, /**< Number of eFuse BLOCK7. KEY3 */
|
||||||
|
EFUSE_BLK_KEY3 = 7, /**< Number of eFuse BLOCK7. KEY3 */
|
||||||
|
|
||||||
|
EFUSE_BLK8 = 8, /**< Number of eFuse BLOCK8. KEY4 */
|
||||||
|
EFUSE_BLK_KEY4 = 8, /**< Number of eFuse BLOCK8. KEY4 */
|
||||||
|
|
||||||
|
EFUSE_BLK9 = 9, /**< Number of eFuse BLOCK9. KEY5 */
|
||||||
|
EFUSE_BLK_KEY5 = 9, /**< Number of eFuse BLOCK9. KEY5 */
|
||||||
|
EFUSE_BLK_KEY_MAX = 10,
|
||||||
|
|
||||||
|
EFUSE_BLK10 = 10, /**< Number of eFuse BLOCK10. SYS_DATA_PART2 */
|
||||||
|
EFUSE_BLK_SYS_DATA_PART2 = 10, /**< Number of eFuse BLOCK10. SYS_DATA_PART2 */
|
||||||
|
|
||||||
|
EFUSE_BLK_MAX
|
||||||
|
} esp_efuse_block_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Type of coding scheme
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
EFUSE_CODING_SCHEME_NONE = 0, /**< None */
|
||||||
|
EFUSE_CODING_SCHEME_RS = 3, /**< Reed-Solomon coding */
|
||||||
|
} esp_efuse_coding_scheme_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Type of key purpose
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_USER = 0, /**< User purposes (software-only use) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_RESERVED = 1, /**< Reserved */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_XTS_AES_128_KEY = 4, /**< XTS_AES_128_KEY (flash/PSRAM encryption) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_HMAC_DOWN_ALL = 5, /**< HMAC Downstream mode */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_HMAC_DOWN_JTAG = 6, /**< JTAG soft enable key (uses HMAC Downstream mode) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_HMAC_DOWN_DIGITAL_SIGNATURE = 7, /**< Digital Signature peripheral key (uses HMAC Downstream mode) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_HMAC_UP = 8, /**< HMAC Upstream mode */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_SECURE_BOOT_DIGEST0 = 9, /**< SECURE_BOOT_DIGEST0 (Secure Boot key digest) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_SECURE_BOOT_DIGEST1 = 10, /**< SECURE_BOOT_DIGEST1 (Secure Boot key digest) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_SECURE_BOOT_DIGEST2 = 11, /**< SECURE_BOOT_DIGEST2 (Secure Boot key digest) */
|
||||||
|
ESP_EFUSE_KEY_PURPOSE_MAX, /**< MAX PURPOSE */
|
||||||
|
} esp_efuse_purpose_t;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
59
components/efuse/esp32c6/include/esp_efuse_rtc_calib.h
Normal file
59
components/efuse/esp32c6/include/esp_efuse_rtc_calib.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <esp_types.h>
|
||||||
|
#include <esp_err.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//This is the ADC calibration value version burnt in efuse
|
||||||
|
#define ESP_EFUSE_ADC_CALIB_VER 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the RTC calibration efuse version
|
||||||
|
*
|
||||||
|
* @return Version of the stored efuse
|
||||||
|
*/
|
||||||
|
int esp_efuse_rtc_calib_get_ver(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the init code in the efuse, for the corresponding attenuation.
|
||||||
|
*
|
||||||
|
* @param version Version of the stored efuse
|
||||||
|
* @param adc_unit ADC unit. Not used, for compatibility. On esp32c6, for calibration v1, both ADC units use the same init code (calibrated by ADC1)
|
||||||
|
* @param atten Attenuation of the init code
|
||||||
|
* @return The init code stored in efuse
|
||||||
|
*/
|
||||||
|
uint32_t esp_efuse_rtc_calib_get_init_code(int version, uint32_t adc_unit, int atten);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the calibration digits stored in the efuse, and the corresponding voltage.
|
||||||
|
*
|
||||||
|
* @param version Version of the stored efuse
|
||||||
|
* @param atten Attenuation to use
|
||||||
|
* @param out_digi Output buffer of the digits
|
||||||
|
* @param out_vol_mv Output of the voltage, in mV
|
||||||
|
* @return
|
||||||
|
* - ESP_ERR_INVALID_ARG: If efuse version or attenuation is invalid
|
||||||
|
* - ESP_OK: if success
|
||||||
|
*/
|
||||||
|
esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, int atten, uint32_t* out_digi, uint32_t* out_vol_mv);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the temperature sensor calibration number delta_T stored in the efuse.
|
||||||
|
*
|
||||||
|
* @param tsens_cal Pointer of the specification of temperature sensor calibration number in efuse.
|
||||||
|
*
|
||||||
|
* @return ESP_OK if get the calibration value successfully.
|
||||||
|
* ESP_ERR_INVALID_ARG if can't get the calibration value.
|
||||||
|
*/
|
||||||
|
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
144
components/efuse/esp32c6/include/esp_efuse_table.h
Normal file
144
components/efuse/esp32c6/include/esp_efuse_table.h
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "esp_efuse.h"
|
||||||
|
|
||||||
|
// md5_digest_table 5b3b6e026d28aacca6dc3b96be8bd280
|
||||||
|
// This file was generated from the file esp_efuse_table.csv. DO NOT CHANGE THIS FILE MANUALLY.
|
||||||
|
// If you want to change some fields, you need to change esp_efuse_table.csv file
|
||||||
|
// then run `efuse_common_table` or `efuse_custom_table` command it will generate this file.
|
||||||
|
// To show efuse_table run the command 'show_efuse_table'.
|
||||||
|
|
||||||
|
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_RD_DIS[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SWAP_UART_SDIO_EN[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_GROUP_1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_GROUP_2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SPI_BOOT_CRYPT_CNT[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SECURE_BOOT_KEY_REVOKE0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SECURE_BOOT_KEY_REVOKE1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SECURE_BOOT_KEY_REVOKE2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY0_PURPOSE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY1_PURPOSE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY2_PURPOSE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY3_PURPOSE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY4_PURPOSE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY5_PURPOSE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SEC_DPA_LEVEL[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SECURE_BOOT_EN[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SECURE_BOOT_AGGRESSIVE_REVOKE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_GROUP_3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SECURE_BOOT_DISABLE_FAST_WAKE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_BLK1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SYS_DATA_PART1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_USER_DATA[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY4[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_KEY5[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WR_DIS_SYS_DATA_PART2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_KEY0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_KEY1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_KEY2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_KEY3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_KEY4[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_KEY5[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_RD_DIS_SYS_DATA_PART2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SWAP_UART_SDIO_EN[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_ICACHE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_USB_JTAG[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_DOWNLOAD_ICACHE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_USB_SERIAL_JTAG[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_FORCE_DOWNLOAD[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_TWAI[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_JTAG_SEL_ENABLE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SOFT_DIS_JTAG[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_PAD_JTAG[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_USB_DREFH[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_USB_DREFL[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_USB_EXCHG_PINS[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_VDD_SPI_AS_GPIO[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WDT_DELAY_SEL[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_BOOT_CRYPT_CNT[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SECURE_BOOT_KEY_REVOKE0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SECURE_BOOT_KEY_REVOKE1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SECURE_BOOT_KEY_REVOKE2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY_PURPOSE_0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY_PURPOSE_1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY_PURPOSE_2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY_PURPOSE_3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY_PURPOSE_4[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY_PURPOSE_5[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SEC_DPA_LEVEL[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SECURE_BOOT_EN[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SECURE_BOOT_AGGRESSIVE_REVOKE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_FLASH_TPUW[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_DOWNLOAD_MODE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_DIRECT_BOOT[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_USB_PRINT[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIS_USB_DOWNLOAD_MODE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ENABLE_SECURITY_DOWNLOAD[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_UART_PRINT_CONTROL[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_FORCE_SEND_RESUME[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SECURE_VERSION[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DISABLE_WAFER_VERSION_MAJOR[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DISABLE_BLK_VERSION_MAJOR[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_MAC_FACTORY[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_CLK[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_Q_D1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_D_D0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_CS[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_HD_D3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_WP_D2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_DQS[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_D4[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_D5[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_D6[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SPI_PAD_CONFIG_D7[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WAFER_VERSION_MINOR[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_PKG_VERSION[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_BLK_VERSION_MINOR[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_WAFER_VERSION_MAJOR[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_OPTIONAL_UNIQUE_ID[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_BLK_VERSION_MAJOR[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_TEMP_CALIB[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_OCODE[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_INIT_CODE_ATTEN0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_INIT_CODE_ATTEN1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_INIT_CODE_ATTEN2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_INIT_CODE_ATTEN3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_CAL_VOL_ATTEN0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_CAL_VOL_ATTEN1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_CAL_VOL_ATTEN2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_ADC1_CAL_VOL_ATTEN3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_USER_DATA[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_USER_DATA_MAC_CUSTOM[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY0[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY1[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY3[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY4[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_KEY5[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_SYS_DATA_PART2[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_K_RTC_LDO[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_K_DIG_LDO[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_V_RTC_DBIAS20[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_V_DIG_DBIAS20[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_DIG_DBIAS_HVT[];
|
||||||
|
extern const esp_efuse_desc_t* ESP_EFUSE_THRES_HVT[];
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
21
components/efuse/esp32c6/private_include/esp_efuse_utility.h
Normal file
21
components/efuse/esp32c6/private_include/esp_efuse_utility.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define COUNT_EFUSE_REG_PER_BLOCK 8 /* The number of registers per block. */
|
||||||
|
|
||||||
|
#define ESP_EFUSE_SECURE_VERSION_NUM_BLOCK EFUSE_BLK0
|
||||||
|
|
||||||
|
#define ESP_EFUSE_FIELD_CORRESPONDS_CODING_SCHEME(scheme, max_num_bit)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
4
components/efuse/esp32c6/sources.cmake
Normal file
4
components/efuse/esp32c6/sources.cmake
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
set(EFUSE_SOC_SRCS "esp_efuse_table.c"
|
||||||
|
"esp_efuse_fields.c"
|
||||||
|
"esp_efuse_rtc_calib.c"
|
||||||
|
"esp_efuse_utility.c")
|
@ -16,7 +16,6 @@
|
|||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "soc/efuse_periph.h"
|
#include "soc/efuse_periph.h"
|
||||||
#include "bootloader_random.h"
|
#include "bootloader_random.h"
|
||||||
#include "soc/syscon_reg.h"
|
|
||||||
#include "sys/param.h"
|
#include "sys/param.h"
|
||||||
|
|
||||||
static __attribute__((unused)) const char *TAG = "efuse";
|
static __attribute__((unused)) const char *TAG = "efuse";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user