部分 ESP32-WROVER 系列模组存在差异
中国,上海
2018年10月29日
乐鑫信息科技(上海)有限公司近期生产的部分模组与默认版本有一定差异,具体包括我司在 2018 年 2 月至 2018 年 7 月期间生产的部分 ESP32-WROVER、ESP32-WROVER-I、ESP32-WROVER-B 及 ESP32-WROVER-IB 模组。这部分受影响模组的主要差异在于:1)其内部一次性可编程存储器 eFuse 采用了“3/4 编码方式”(即系统参数 coding_scheme 设置为“3/4 编码方式”),而非此前的“非编码方式”;2)在 eFuse 的 BLOCK3 中写入了额外的 ADC 校准数据。注意,这部分改动自 2018 年 7 月起已经移除,目前乐鑫在 2018 年 7 月后生产的所有 ESP32 模组均采用默认“编码方式”(即“非编码方式”),且不向 eFuse 的 BLOCK3 写入任何内容。
注意,仅有部分 2018 年 2 月至 2018 年 7 月期间生产的 ESP32-WROVER、ESP32-WROVER-I、ESP32-WROVER-B 和 ESP32-WROVER-IB 模组涉及该部分改动,不涉及 ESP32-WROOM 模组及其它乐鑫芯片和模组。目前,仅有需要将数据写入 eFuse BLOCK1、BLOCK2 或 BLOCK3 的应用程序将受此改动的影响,其中包括 ESP-IDF 中的 Flash 加密和 Secure Boot 功能。
如需确认您手中的模组是否属于受影响的批次,请使用 “espefuse.py summary” 命令行工具,检查 eFuse 系统参数 coding_scheme 的值,“0” 表示“非编码方式”,代表非受影响批次,“1” 表示 “3/4 编码方式”,代表受影响批次。此外,您也可以直接联系乐鑫商务或您所在地区的分销商,了解更多信息。
影响范围
对于采用“3/4 编码方式”的模组,使用 ESP-IDF 3.1.0 及更早版本时,不建议使用 Flash 加密和 Secure Boot 功能,并且不支持向 eFuse 的 BLOCK1、BLOCK2 或 BLOCK3 写入用户数据,强行写入可能会导致从 eFuse 读出的用户数据和写入的用户数据不一致。
具体来说,在 coding_scheme 被设置为“3/4 编码方式”时,如强行使用 ESP-IDF 3.1.0 及更早版本中的 Flash 加密和 Secure Boot 功能,则设备首次开机时会生成 192 位随机密钥,但 eFuse block 的 64 位纠错字段中也会写入一些随机数。这里,经过硬件纠错后,该随机密钥的有效密钥熵将降低至最小 176 位。对于采用“3/4 编码方式”的模组,这种情况可能不会影响设备的整体安全性,但强烈建议您将 SDK 升级至支持“3/4 编码方式”的版本。
目前,ESP-IDF 主分支(开发)(从 commit 66a54c7 起)中已提供对 “3/4 编码方式”的支持,正式版本预计将在很快发布的 ESP-IDF 3.1.1 中与大家见面。
此外,受此影响模组的 eFuse BLOCK3 中还写入了 48 位可读 ADC 出厂校准数据,具体确认方式为检查 eFuse 的 BLK3_part_reserve 字段是否存在数据。有关更多信息,请参阅《ESP32 技术参考手册》第 20.3.1.4 节对 “BLK3_part_reserve” 的描述。ESP-IDF V3.0 及其更新版本在使用 ADC 校准功能时,将自动使用这些额外数据。在其它不受影响的 ESP32 设备中,ADC 校准功能将使用存储在 eFuse BLOCK0 中的 VRef 校准数据。
更多信息
有关 eFuse 编码方式的更多信息,请参阅《ESP32 技术参考手册》第 20.3.1.3 节对“系统参数 coding_scheme” 的描述。