十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESP32-C6 eFuse 表全解析:使用 show-efuse-table 查看字段布局与可用位

ESP32-C6 eFuse 表全解析:使用 show-efuse-table 查看字段布局与可用位 ESP32-C6 eFuse 表全解析使用 show-efuse-table 查看字段布局与可用位【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf本篇技术指南以 ESP-IDF 仓库中docs/en/api-reference/system/inc/show-efuse-table_ESP32-C6.rst为骨架完整讲解 ESP32-C6 芯片 eFuse 表的查看方式、字段布局与解读方法。读完本文你将掌握通过idf.py show-efuse-table或efuse_table_gen.py --info查看任意目标芯片 eFuse 字段清单与占用/空闲位范围的方法能够据此为自定义 eFuse 字段挑选空闲位并理解WR_DIS/RD_DIS写保护、密钥块与系统参数块的分布逻辑。文档上下文这段输出从何而来show-efuse-table_ESP32-C6.rst是 eFuse 管理器官方文档 efuse.rst 中 How to Add a New Field 一节通过.. include::指令引入的片段见 efuse.rst。它展示的是在 ESP32-C6 目标下运行efuse_table_gen.py --info或等价的idf.py show-efuse-table后打印的完整输出作用是帮助开发者找到空闲位以添加新字段.. include:: inc/show-efuse-table_{IDF_TARGET_NAME}.rst该文件在docs/en/api-reference/system/inc/与docs/zh_CN/api-reference/system/inc/下为每个芯片各有一份如ESP32-C3、ESP32-S3、ESP32-C6等{IDF_TARGET_NAME}在文档构建时被替换为实际芯片名。本文聚焦 ESP32-C6 版本其对应的底层数据源是 components/efuse/esp32c6/esp_efuse_table.csv。查看 eFuse 表的三种等价方式原文档输出对应的命令模板如下{IDF_TARGET_PATH_NAME}对 ESP32-C6 即esp32c6$ ./efuse_table_gen.py -t IDF_TARGET_PATH_NAME {IDF_TARGET_PATH_NAME}/esp_efuse_table.csv --info实际在 ESP32-C6 上运行在$IDF_PATH/components/efuse/目录下为./efuse_table_gen.py -t esp32c6 esp32c6/esp_efuse_table.csv --info此外ESP-IDF 还提供了封装命令idf.py show-efuse-table其注册位于 tools/idf_py_actions/core_ext.py说明为 Print eFuse table.并带有reconfigure顺序依赖。它与直接调用脚本等价是日常最常用的方式。从 efuse_table_gen.py 源码可以确认该输出的生成逻辑命令行入口在 main()--info参数L534用于 Print info about range of used bits--max_blk_len默认 256L535因此首行打印 Max number of bits in BLK 256输出依次经历process_input_file打印 Parsing efuse CSV input file ...与verify()打印 Verifying efuse table...见 L480-L483最终调用show_range_used_bits()L209-L232按(efuse_block, bit_start)排序打印字段表再聚合输出每个块内已被占用的位区间并附注 Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)。ESP32-C6 eFuse 完整字段表139 个记录以下是 ESP32-C6 上--info输出的上半部分——排序后的完整 eFuse 字段表。四列分别表示记录序号、字段名field_name、所在块efuse_block、起始位bit_start与位宽bit_countMax number of bits in BLK 256 Parsing efuse CSV input file esp32c6/esp_efuse_table.csv ... Verifying efuse table... Sorted efuse table: # field_name efuse_block bit_start bit_count 1 WR_DIS EFUSE_BLK0 0 32 2 WR_DIS.RD_DIS EFUSE_BLK0 0 1 3 WR_DIS.CRYPT_DPA_ENABLE EFUSE_BLK0 1 1 4 WR_DIS.SWAP_UART_SDIO_EN EFUSE_BLK0 2 1 5 WR_DIS.DIS_ICACHE EFUSE_BLK0 2 1 6 WR_DIS.DIS_USB_JTAG EFUSE_BLK0 2 1 7 WR_DIS.DIS_DOWNLOAD_ICACHE EFUSE_BLK0 2 1 8 WR_DIS.DIS_USB_SERIAL_JTAG EFUSE_BLK0 2 1 9 WR_DIS.DIS_FORCE_DOWNLOAD EFUSE_BLK0 2 1 10 WR_DIS.DIS_TWAI EFUSE_BLK0 2 1 11 WR_DIS.JTAG_SEL_ENABLE EFUSE_BLK0 2 1 12 WR_DIS.DIS_PAD_JTAG EFUSE_BLK0 2 1 13 WR_DIS.DIS_DOWNLOAD_MANUAL_ENCRYPT EFUSE_BLK0 2 1 14 WR_DIS.WDT_DELAY_SEL EFUSE_BLK0 3 1 15 WR_DIS.SPI_BOOT_CRYPT_CNT EFUSE_BLK0 4 1 16 WR_DIS.SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 5 1 17 WR_DIS.SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 6 1 18 WR_DIS.SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 7 1 19 WR_DIS.KEY_PURPOSE_0 EFUSE_BLK0 8 1 20 WR_DIS.KEY_PURPOSE_1 EFUSE_BLK0 9 1 21 WR_DIS.KEY_PURPOSE_2 EFUSE_BLK0 10 1 22 WR_DIS.KEY_PURPOSE_3 EFUSE_BLK0 11 1 23 WR_DIS.KEY_PURPOSE_4 EFUSE_BLK0 12 1 24 WR_DIS.KEY_PURPOSE_5 EFUSE_BLK0 13 1 25 WR_DIS.SEC_DPA_LEVEL EFUSE_BLK0 14 1 26 WR_DIS.SECURE_BOOT_EN EFUSE_BLK0 15 1 27 WR_DIS.SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 16 1 28 WR_DIS.SPI_DOWNLOAD_MSPI_DIS EFUSE_BLK0 17 1 29 WR_DIS.FLASH_TPUW EFUSE_BLK0 18 1 30 WR_DIS.DIS_DOWNLOAD_MODE EFUSE_BLK0 18 1 31 WR_DIS.DIS_DIRECT_BOOT EFUSE_BLK0 18 1 32 WR_DIS.DIS_USB_SERIAL_JTAG_ROM_PRINT EFUSE_BLK0 18 1 33 WR_DIS.DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE EFUSE_BLK0 18 1 34 WR_DIS.ENABLE_SECURITY_DOWNLOAD EFUSE_BLK0 18 1 35 WR_DIS.UART_PRINT_CONTROL EFUSE_BLK0 18 1 36 WR_DIS.FORCE_SEND_RESUME EFUSE_BLK0 18 1 37 WR_DIS.SECURE_VERSION EFUSE_BLK0 18 1 38 WR_DIS.SECURE_BOOT_DISABLE_FAST_WAKE EFUSE_BLK0 19 1 39 WR_DIS.DISABLE_WAFER_VERSION_MAJOR EFUSE_BLK0 19 1 40 WR_DIS.DISABLE_BLK_VERSION_MAJOR EFUSE_BLK0 19 1 41 WR_DIS.BLK1 EFUSE_BLK0 20 1 42 WR_DIS.MAC EFUSE_BLK0 20 1 43 WR_DIS.MAC_EXT EFUSE_BLK0 20 1 44 WR_DIS.WAFER_VERSION_MINOR EFUSE_BLK0 20 1 45 WR_DIS.WAFER_VERSION_MAJOR EFUSE_BLK0 20 1 46 WR_DIS.PKG_VERSION EFUSE_BLK0 20 1 47 WR_DIS.BLK_VERSION_MINOR EFUSE_BLK0 20 1 48 WR_DIS.BLK_VERSION_MAJOR EFUSE_BLK0 20 1 49 WR_DIS.FLASH_CAP EFUSE_BLK0 20 1 50 WR_DIS.FLASH_TEMP EFUSE_BLK0 20 1 51 WR_DIS.FLASH_VENDOR EFUSE_BLK0 20 1 52 WR_DIS.SYS_DATA_PART1 EFUSE_BLK0 21 1 53 WR_DIS.OPTIONAL_UNIQUE_ID EFUSE_BLK0 21 1 54 WR_DIS.BLOCK_USR_DATA EFUSE_BLK0 22 1 55 WR_DIS.CUSTOM_MAC EFUSE_BLK0 22 1 56 WR_DIS.BLOCK_KEY0 EFUSE_BLK0 23 1 57 WR_DIS.BLOCK_KEY1 EFUSE_BLK0 24 1 58 WR_DIS.BLOCK_KEY2 EFUSE_BLK0 25 1 59 WR_DIS.BLOCK_KEY3 EFUSE_BLK0 26 1 60 WR_DIS.BLOCK_KEY4 EFUSE_BLK0 27 1 61 WR_DIS.BLOCK_KEY5 EFUSE_BLK0 28 1 62 WR_DIS.BLOCK_SYS_DATA2 EFUSE_BLK0 29 1 63 WR_DIS.USB_EXCHG_PINS EFUSE_BLK0 30 1 64 WR_DIS.VDD_SPI_AS_GPIO EFUSE_BLK0 30 1 65 WR_DIS.SOFT_DIS_JTAG EFUSE_BLK0 31 1 66 RD_DIS EFUSE_BLK0 32 7 67 RD_DIS.BLOCK_KEY0 EFUSE_BLK0 32 1 68 RD_DIS.BLOCK_KEY1 EFUSE_BLK0 33 1 69 RD_DIS.BLOCK_KEY2 EFUSE_BLK0 34 1 70 RD_DIS.BLOCK_KEY3 EFUSE_BLK0 35 1 71 RD_DIS.BLOCK_KEY4 EFUSE_BLK0 36 1 72 RD_DIS.BLOCK_KEY5 EFUSE_BLK0 37 1 73 RD_DIS.BLOCK_SYS_DATA2 EFUSE_BLK0 38 1 74 SWAP_UART_SDIO_EN EFUSE_BLK0 39 1 75 DIS_ICACHE EFUSE_BLK0 40 1 76 DIS_USB_JTAG EFUSE_BLK0 41 1 77 DIS_DOWNLOAD_ICACHE EFUSE_BLK0 42 1 78 DIS_USB_SERIAL_JTAG EFUSE_BLK0 43 1 79 DIS_FORCE_DOWNLOAD EFUSE_BLK0 44 1 80 SPI_DOWNLOAD_MSPI_DIS EFUSE_BLK0 45 1 81 DIS_TWAI EFUSE_BLK0 46 1 82 JTAG_SEL_ENABLE EFUSE_BLK0 47 1 83 SOFT_DIS_JTAG EFUSE_BLK0 48 3 84 DIS_PAD_JTAG EFUSE_BLK0 51 1 85 DIS_DOWNLOAD_MANUAL_ENCRYPT EFUSE_BLK0 52 1 86 USB_EXCHG_PINS EFUSE_BLK0 57 1 87 VDD_SPI_AS_GPIO EFUSE_BLK0 58 1 88 WDT_DELAY_SEL EFUSE_BLK0 80 2 89 SPI_BOOT_CRYPT_CNT EFUSE_BLK0 82 3 90 SECURE_BOOT_KEY_REVOKE0 EFUSE_BLK0 85 1 91 SECURE_BOOT_KEY_REVOKE1 EFUSE_BLK0 86 1 92 SECURE_BOOT_KEY_REVOKE2 EFUSE_BLK0 87 1 93 KEY_PURPOSE_0 EFUSE_BLK0 88 4 94 KEY_PURPOSE_1 EFUSE_BLK0 92 4 95 KEY_PURPOSE_2 EFUSE_BLK0 96 4 96 KEY_PURPOSE_3 EFUSE_BLK0 100 4 97 KEY_PURPOSE_4 EFUSE_BLK0 104 4 98 KEY_PURPOSE_5 EFUSE_BLK0 108 4 99 SEC_DPA_LEVEL EFUSE_BLK0 112 2 100 CRYPT_DPA_ENABLE EFUSE_BLK0 114 1 101 SECURE_BOOT_EN EFUSE_BLK0 116 1 102 SECURE_BOOT_AGGRESSIVE_REVOKE EFUSE_BLK0 117 1 103 FLASH_TPUW EFUSE_BLK0 124 4 104 DIS_DOWNLOAD_MODE EFUSE_BLK0 128 1 105 DIS_DIRECT_BOOT EFUSE_BLK0 129 1 106 DIS_USB_SERIAL_JTAG_ROM_PRINT EFUSE_BLK0 130 1 107 DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE EFUSE_BLK0 132 1 108 ENABLE_SECURITY_DOWNLOAD EFUSE_BLK0 133 1 109 UART_PRINT_CONTROL EFUSE_BLK0 134 2 110 FORCE_SEND_RESUME EFUSE_BLK0 141 1 111 SECURE_VERSION EFUSE_BLK0 142 16 112 SECURE_BOOT_DISABLE_FAST_WAKE EFUSE_BLK0 158 1 113 DISABLE_WAFER_VERSION_MAJOR EFUSE_BLK0 160 1 114 DISABLE_BLK_VERSION_MAJOR EFUSE_BLK0 161 1 115 MAC EFUSE_BLK1 0 8 116 MAC EFUSE_BLK1 8 8 117 MAC EFUSE_BLK1 16 8 118 MAC EFUSE_BLK1 24 8 119 MAC EFUSE_BLK1 32 8 120 MAC EFUSE_BLK1 40 8 121 MAC_EXT EFUSE_BLK1 48 16 122 WAFER_VERSION_MINOR EFUSE_BLK1 114 4 123 WAFER_VERSION_MAJOR EFUSE_BLK1 118 2 124 PKG_VERSION EFUSE_BLK1 120 3 125 BLK_VERSION_MINOR EFUSE_BLK1 123 3 126 BLK_VERSION_MAJOR EFUSE_BLK1 126 2 127 FLASH_CAP EFUSE_BLK1 128 3 128 FLASH_TEMP EFUSE_BLK1 131 2 129 FLASH_VENDOR EFUSE_BLK1 133 3 130 SYS_DATA_PART2 EFUSE_BLK10 0 256 131 OPTIONAL_UNIQUE_ID EFUSE_BLK2 0 128 132 USER_DATA EFUSE_BLK3 0 256 133 USER_DATA.MAC_CUSTOM EFUSE_BLK3 200 48 134 KEY0 EFUSE_BLK4 0 256 135 KEY1 EFUSE_BLK5 0 256 136 KEY2 EFUSE_BLK6 0 256 137 KEY3 EFUSE_BLK7 0 256 138 KEY4 EFUSE_BLK8 0 256 139 KEY5 EFUSE_BLK9 0 256字段表的结构化解读对照 esp_efuse_table.csv共 201 行可以看到--info输出就是对该 CSV 按块与起始位排序后的呈现。四个关键概念块efuse_blockESP32-C6 共有 11 个 eFuse 块EFUSE_BLK0至EFUSE_BLK10每块 256 位、划分为 8 个 32 位寄存器。除EFUSE_BLK3用户数据与EFUSE_BLK4–EFUSE_BLK9密钥块外其余块均为系统参数块见 efuse.rst。位宽bit_count字段位宽为 1~256 位也可写作MAX_BLK_LEN表示整块。例如USER_DATA占据EFUSE_BLK3的 0~255 全部位。父字段与子字段WR_DIS32 位是父字段WR_DIS.RD_DIS、WR_DIS.BLOCK_KEY0等是它的子字段子字段必须落在父字段位范围内且互不重叠。USER_DATA.MAC_CUSTOM同理是USER_DATA的子字段。字段名中的.在生成 C 结构时被替换为_例如WR_DIS.RD_DIS对应ESP_EFUSE_WR_DIS_RD_DIS。非连续位字段MAC在表中出现 6 次每次 8 位对应 CSV 中首行写MAC、后续行field_name留空的做法用于表达位序不连续小端、从 LSB 到 MSB的字段。各块的典型字段功能EFUSE_BLK0系统参数 保护位WR_DIS0~31 位写保护位每一位对应一个或多个字段烧写后对应字段将永久不可再编程。表中第 1~65 行全部是WR_DIS及其子字段。RD_DIS32~38 位读保护位对应BLOCK_KEY0~BLOCK_KEY5与BLOCK_SYS_DATA2用于禁止读取密钥块。安全相关SPI_BOOT_CRYPT_CNTFlash 加密计数、SECURE_BOOT_KEY_REVOKE0~2安全启动密钥吊销、SECURE_BOOT_EN、SECURE_VERSIONESP-IDF 防回滚版本号等。KEY_PURPOSE_0~KEY_PURPOSE_5各 4 位定义 6 个密钥块的用途Flash 加密或安全启动。调试/下载相关DIS_ICACHE、DIS_USB_JTAG、DIS_FORCE_DOWNLOAD、DIS_DOWNLOAD_MODE、SOFT_DIS_JTAG、DIS_PAD_JTAG、UART_PRINT_CONTROL等。EFUSE_BLK1身份/封装信息MAC48 位MAC_EXT16 位、WAFER_VERSION_MINOR/MAJOR、PKG_VERSION、BLK_VERSION_MINOR/MAJOR、FLASH_CAPFlash 容量、FLASH_TEMP、FLASH_VENDOR。CSV 中该块还包含若干ACTIVE_HP_DBIAS等模拟校准字段但--info输出的 used-bits 汇总将其归入整体区间。EFUSE_BLK2可选唯一 ID 与校准OPTIONAL_UNIQUE_ID128 位L175以及TEMP_CALIB、OCODE、ADC1_*温度/ADC 校准数据。EFUSE_BLK3用户数据块USER_DATA整块 256 位可作用户参数其中USER_DATA.MAC_CUSTOM占用 200~247 位用于自定义 MAC。EFUSE_BLK4~BLK9密钥块 KEY0~KEY5各 256 位用于安全启动或 Flash 加密密钥若不使用这两个特性可作用户数据。EFUSE_BLK10系统数据 2SYS_DATA_PART2整块 256 位系统保留。已占用位区间汇总寻找空闲位--info输出的下半部分是各块已占用位区间的聚合结果方括号外的位即为空闲可用位Used bits in efuse table: EFUSE_BLK0 [0 31] [0 2] [2 2] ... [30 38] [32 52] [57 58] [80 114] [116 117] [124 130] [132 135] [141 158] [160 161] EFUSE_BLK1 [0 63] [114 135] EFUSE_BLK10 [0 255] EFUSE_BLK2 [0 127] EFUSE_BLK3 [0 255] [200 247] EFUSE_BLK4 [0 255] EFUSE_BLK5 [0 255] EFUSE_BLK6 [0 255] EFUSE_BLK7 [0 255] EFUSE_BLK8 [0 255] EFUSE_BLK9 [0 255] Note: Not printed ranges are free for using. (bits in EFUSE_BLK0 are reserved for Espressif)解读要点区间左闭右闭例如EFUSE_BLK3的[0 255]与[200 247]表示 0~255 位整体被USER_DATA占用、200~247 位被子字段MAC_CUSTOM占用。EFUSE_BLK0 全部区间均属于系统用途末尾注明其空闲位仍为 Espressif 保留不应用于用户字段。EFUSE_BLK1已占用[0 63]MAC MAC_EXT与[114 135]版本/封装/Flash 信息而 64~113、136~255 位为空闲不过其中部分位在 CSV 中实际定义了ACTIVE_HP_DBIAS等校准字段说明--info聚合区间会合并邻近区间具体以 CSV 记录为准。EFUSE_BLK2已占用[0 127]OPTIONAL_UNIQUE_ID128 位以后是校准字段区。EFUSE_BLK3可作为用户参数区但 200~247 位被MAC_CUSTOM保留。EFUSE_BLK4~BLK9若未用于密钥可整体作为用户数据注意RD_DIS/WR_DIS保护位与密钥用途字段的联动。实战如何添加一个新 eFuse 字段结合 efuse.rst添加用户字段的标准流程是找空闲位运行idf.py show-efuse-table或本文展示的efuse_table_gen.py --info命令参照各块 used-bits 区间挑选方括号之外的位。在自定义 CSV 中定义字段用户字段应写入自定义表esp_efuse_custom_table.csv通常位于工程main/目录记录格式为# field_name, efuse_block(EFUSE_BLK0..EFUSE_BLK10), bit_start(0..255), bit_count(1..256), comment例如在USER_DATA上追加结构化子字段USER_DATA.SERIAL_NUMBER, EFUSE_BLK3, 0, 32, USER_DATA.MODEL_NUMBER, EFUSE_BLK3, 32, 10, USER_DATA.HARDWARE_REV, EFUSE_BLK3, 42, 10,校验并生成源码运行idf.py efuse-custom-table生成esp_efuse_custom_table.c/.h校验工具会检查字段名唯一性与位不重叠。若违反规则会报错例如 Field at USER_DATA, EFUSE_BLK3, 0, 256 intersected with SERIAL_NUMBER, EFUSE_BLK3, 0, 32可通过将SERIAL_NUMBER改为USER_DATA.SERIAL_NUMBER解决或 out of range需调整bit_start使子字段落入父字段范围。在应用中读写包含esp_efuse.h与生成的表头文件使用esp_efuse_read_field_blob/esp_efuse_write_field_blob等 API 访问字段。注意 eFuse 一次性可编程只能 0→1不可回退且涉及RS编码的块需使用批量写入模式esp_efuse_batch_write_begin/esp_efuse_batch_write_commit。关联文件速查本文档片段docs/en/api-reference/system/inc/show-efuse-table_ESP32-C6.rsteFuse 管理器官方文档含记录格式、结构化字段、编码方案与 API 说明docs/en/api-reference/system/efuse.rstESP32-C6 eFuse 表数据源--info输出的输入components/efuse/esp32c6/esp_efuse_table.csv输出生成脚本与校验逻辑components/efuse/efuse_table_gen.pyidf.py show-efuse-table命令注册tools/idf_py_actions/core_ext.py其他芯片的 eFuse 表片段对比不同目标的字段布局docs/en/api-reference/system/inc/【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表