
ESP-IDF v6.2 升级指南加密栈转向 PSA Crypto 全拆解【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idfESP-IDF v6.2 这条主线tools/cmake/version.cmake里IDF_VERSION已钉在 6.2.0最实打实的变化是加密层从 MbedTLS 直调收敛到 PSA Crypto 统一接口密钥默认落 NVSesp_pm_config_t统一了各芯片的差异 typedef驱动拆成esp_hal_*esp_driver_*两层。先说结论如果你还在 v5.x 上直调mbedtls/aes.h这次迁移是接口换名级别的不是重写但功耗和 TLS 两块值得单独看一遍。模块v6 之前的写法v6.2 的行为影响范围加密直调 MbedTLS C APImbedtls/aes.h统一走psa/crypto.h密钥默认由 PSA ITS 存 NVS所有用 mbedtls 的工程电源每芯片一个esp_pm_config_xxx_t统一esp_pm_config_t旧 typedef 标记 deprecated调esp_pm_configure()的工程驱动/HALdriver 里混着芯片细节esp_hal_*硬件抽象esp_driver_*通用接口分层移植/换芯片目标芯片数量少components/soc/下 13 个 SoCesp32/c2/c3/c5/c6/c61/h2/h21/h4/p4/s2/s3/s31idf.py set-target列表TLS 根证书手工维护 CA bundle独立esp_crt_bundle组件 PSA ITS 自定义后端依赖 TLS 的设备构建size 输出分散统一idf.py sizeesp-idf-size 包每次看 flash/RAM 占用加密与信任栈把 MbedTLS 直调换成 PSA 统一接口为什么要改。旧写法让你直接 includembedtls/aes.h、mbedtls/ssl.h密钥和随机种子散在应用代码里换芯片基本要重测一遍。v6 把这条链收敛到 PSA 一层components/mbedtls/ 里的mbedtls子模块指向乐鑫自维护 fork.gitmodules里url ../../espressif/mbedtls.gitPSA 的密钥持久化后端默认是 NVSPSA ITS文档里还给了把一段 key ID 路由到自定义存储的开关CONFIG_MBEDTLS_PSA_ITS_CUSTOM_STORAGE_BACKEND。好处是应用只认psa_*一套名字硬件加速在底层透明。新架构怎么工作。密钥生命周期走 PSApsa_import_key导入、psa_cipher_*/psa_aead_*调算不再手写mbedtls_aes_context。密钥默认落 NVSPSA ITS可选把某段 key ID 交给自定义后端其余仍走 NVS。根证书从应用剥离成独立组件esp_crt_bundlecacrt_all.pem等和加密库解耦。信任边界再往前推一步components/esp_tee/提供 TEE安全启动、安全存储、OTA、attestationdocs/en/security/tee/有完整说明。可感知差异。仓库里没公布具体吞吐数字components/mbedtls/test_apps/mbedtls_ut/是回归测试不是 benchmark所以下面是行为对比而非性能表维度旧直调 MbedTLS新 PSA 统一接口应用 includembedtls/aes.h等psa/crypto.h密钥存放应用自己管理默认 NVS可配自定义后端换芯片需重测/重改同一套 PSA 调用ESP-IDF v6.2 中 TEE 安全 OTA 的 flash 分区布局展示安全存储与 OTA 分区如何共存HAL 与驱动框架把芯片差异从应用代码里剥出来为什么要改。以前加一个新芯片driver 里到处是#ifdef CONFIG_IDF_TARGET_xxx应用层偶尔也会碰到芯片常量。v6 把它拆成两层components/esp_hal_*放寄存器级硬件抽象esp_hal_dma、esp_hal_gpio、esp_hal_i2c、esp_hal_mspi等目录里每个芯片一份实现components/esp_driver_*放面向应用的通用接口esp_driver_spi、esp_driver_i2c、esp_driver_gpio…。应用只 include 上层芯片差异被压在 HAL 层。新架构怎么工作。一个外设 一个esp_driver_x通用组件 若干esp_hal_x芯片实现靠CMakeLists.txt按 target 选择。驱动内部再往下走components/soc/的寄存器头13 个 SoC 各一套应用不直接接触。换芯片 换set-target 换 HAL 实现应用侧接口基本不动新驱动自带test_apps/用统一框架跑各芯片一致性。可感知差异。迁移时主要看 include 路径有没有变把driver/spi_master.h这类旧头换成新esp_driver_*的公共头纯应用代码任务、队列、VFS通常不用动。驱动的状态机以 I2S 为例docs/_static/diagrams/i2s/里能直接对照新旧行为ESP-IDF v6.2 的 I2S 驱动状态机说明通用驱动层在 HAL 之上如何组织状态迁移电源管理一个 config 结构体加两级 Kconfig 开关为什么要改。旧版每个芯片一个esp_pm_config_esp32_t、esp_pm_config_esp32s3_t……components/esp_pm/include/esp_pm.h里现在全被标成deprecated(please use esp_pm_config_t instead)只剩统一的esp_pm_config_t。这意味着同一段esp_pm_configure()代码可以跨芯片复用不用再做#if分支。新架构怎么工作。结构体就三个字段max_freq_mhz、min_freq_mhz、light_sleep_enable见esp_pm.h。Kconfig 两级CONFIG_PM_ENABLE总开关CONFIG_PM_DFS_INIT_AUTO让启动代码自动配 DFS否则你自己在代码里esp_pm_configure()。观测开关独立CONFIG_PM_PROFILING计数/统计、CONFIG_PM_TRACE、CONFIG_PM_SLP_IRAM_OPT、CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP都在 components/esp_pm/ 的Kconfig里。Wi-Fi 场景的省电modem sleep / auto light sleep由examples/wifi/power_save/单独覆盖和 CPU DFS 是两条线。可感知差异。下面是仓库自带的对比图power_save_graph.png是开省电和基线的电流曲线具体毫安数不在本仓库内以对应芯片 datasheet 为准ESP-IDF v6.2 的 Wi-Fi 省电示例电流曲线对比开省电前后的差异动手实操一个 v5.x 温湿度采集器升到 v6.2场景基于 v5.x 的 ESP32-C5 采集器TLS 上报 电池供电要升到 v6.2。仓库克隆地址如需要https://gitcode.com/GitHub_Trending/es/esp-idf。Step 1切版本、定目标做什么切到 release 分支并把目标钉到 C5。git checkout release/v6.2 # 对应你的发布分支 idf.py set-target esp32c5 idf.py fullclean idf.py build验证idf.py build零错误idf.py size能正常出 flash/RAM 汇总。Step 2加密改成 PSA做什么把直调 MbedTLS 的那段换成 PSA 接口。// 旧mbedtls_aes_setkey_enc(aes, key, 256); // 新 #include psa/crypto.h psa_key_attributes_t attr PSA_KEY_ATTRIBUTES_INIT; psa_set_key_type(attr, PSA_KEY_TYPE_AES); psa_import_key(attr, key, 32, key_id); psa_cipher_encrypt(key_id, PSA_ALG_ECB_NO_PADDING, NULL, 0, in, 16, out, 16, out_len);验证编译后跑一次加解密自测确认密钥默认进 NVSPSA ITS断电重启仍能psa_get_key_attributes读到。ESP32 开发板引脚布局便于核对温湿度传感器与 UART/USB 接线Step 3开电源与 DFSKconfig做什么在idf.py menuconfig→ Power Management 里确认这几项。CONFIG_PM_ENABLEy CONFIG_PM_DFS_INIT_AUTOy CONFIG_PM_PROFILINGy CONFIG_PM_TRACEy验证CONFIG_PM_DFS_INIT_AUTOy时启动日志里出现 DFS 已按默认配置否则看 Step 4 手动路径。Step 4手动esp_pm_configure()如需覆盖默认做什么电池场景压低最小频率并允许浅睡。esp_pm_config_t pm_cfg { .max_freq_mhz 240, .min_freq_mhz 10, .light_sleep_enable true, }; esp_pm_configure(pm_cfg);验证CONFIG_PM_PROFILINGy下读统计计数浅睡/DFS 降频计数在增长电流曲线对照 Step 里的 power_save 图。Step 5开 Wi-Fi 611ax做什么C5 支持 HE把 STA 协议位补上 11AX。wifi_config_t cfg { 0 }; cfg.sta.protocol WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N | WIFI_PROTOCOL_11AX; esp_wifi_set_config(WIFI_IF_STA, cfg);验证esp_wifi_set_config返回ESP_OK关联后esp_wifi日志里协议协商含 11AX需 AP 也支持。升级验收清单idf.py build通过无esp_pm_config_xxx_t的 deprecated 告警idf.py size对比旧版flash/RAM 未超出分区表加密PSA 密钥默认落 NVS断电重启后可正常读取功耗PM_PROFILING统计里能看到 DFS 降频与浅睡计数在涨OTA / 回滚流程在 v6.2 下回归通过迁移检查表与工具链速查项目类型推荐 Kconfig 组合功耗手段说明常在线网关PM_ENABLEPM_DFS_INIT_AUTOPM_PROFILINGactive DFS优先保连接DFS 兜底电池传感器PM_ENABLEPM_POWER_DOWN_CPU_IN_LIGHT_SLEEPPM_SLP_IRAM_OPTlight sleep关浅睡进 CPU 断电省更多工业 MCUPM_ENABLEPM_DFS_INIT_AUTO按需开浅睡active/DFS实时性优先浅睡可关功耗列是手段档位具体电流以芯片 datasheet 为准本仓库不内置数值。配套 CLI都在tools/idf.pysize 由tools/idf_size.py调esp-idf-size包idf.py size输出各分区/段.text/.data/.bss/rodata 等的 flash 与 RAM 占用用于判断是否超表。idf.py build/idf.py rebuild增量编译 / 重编rebuild会在改过公共头后更彻底。idf.py set-target chip切换目标芯片决定components/soc/、esp_hal_*选哪套实现。仓库内关键路径按上面顺序查components/mbedtls/PSA/ITS/esp_crt_bundle、components/esp_pm/esp_pm_config_t与Kconfig、tools/cmake/版本号与构建属性。PSA ITS 自定义后端等细节见docs/en/api-reference/protocols/mbedtls.rst。收尾加密栈转向 PSA 与esp_pm_config_t统一是这次升级里改动面最大、也最换名不换逻辑的两块功耗与 TLS 的优化更多靠 Kconfig 组合而非改代码。下一步建议对照 ROADMAP.md 与SUPPORT_POLICY.md确认你的目标芯片在 v6.2 的支持档位再排迁移窗口。【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考