Skip to content

Commit d51ecbe

Browse files
feat(espefuse): Support different efuse table versions for ESP32H2
1 parent 9b74df6 commit d51ecbe

File tree

4 files changed

+20
-9
lines changed

4 files changed

+20
-9
lines changed

espefuse/efuse/esp32h2/fields.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ def __init__(
111111
EfuseField.convert(self, efuse) for efuse in self.Fields.CALC
112112
]
113113

114+
if self.get_chip_version() <= 101:
115+
rev = EfuseDefineFields(None, revision="esp32h2_v0.0_v1.1")
116+
self.efuses += [EfuseField.convert(self, efuse) for efuse in rev.EFUSES]
117+
114118
def __getitem__(self, efuse_name):
115119
"""Return the efuse field with the given name"""
116120
for e in self.efuses:

espefuse/efuse/esp32h2/mem_definition.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def get_burn_block_data_names(self):
111111

112112

113113
class EfuseDefineFields(EfuseFieldsBase):
114-
def __init__(self, extend_efuse_table) -> None:
114+
def __init__(self, extend_efuse_table, revision=None) -> None:
115115
# List of efuse fields from TRM the chapter eFuse Controller.
116116
self.EFUSES = []
117117
self.KEYBLOCKS = []
@@ -120,6 +120,8 @@ def __init__(self, extend_efuse_table) -> None:
120120

121121
dir_name = os.path.dirname(os.path.abspath(__file__))
122122
dir_name, file_name = os.path.split(dir_name)
123+
if revision is not None:
124+
file_name = revision
123125
file_name = file_name + ".yaml"
124126
dir_name, _ = os.path.split(dir_name)
125127
efuse_file = os.path.join(dir_name, "efuse_defs", file_name)

espefuse/efuse/esp32h2/operations.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,16 @@ def burn_key(esp, efuses, args, digest=None):
318318
if efuses[block.key_purpose_name].is_writeable():
319319
disable_wr_protect_key_purpose = True
320320

321-
if keypurpose == "ECDSA_KEY":
322-
if efuses["ECDSA_FORCE_USE_HARDWARE_K"].get() == 0:
323-
# For ECDSA key purpose block permanently enable
324-
# the hardware TRNG supplied k mode (most secure mode)
325-
print("\tECDSA_FORCE_USE_HARDWARE_K: 0 -> 1")
326-
efuses["ECDSA_FORCE_USE_HARDWARE_K"].save(1)
327-
else:
328-
print("\tECDSA_FORCE_USE_HARDWARE_K is already '1'")
321+
# >= ESP32-H2 ECO5 revision (v1.2) does not have ECDSA_FORCE_USE_HARDWARE_K
322+
if efuses.get_chip_version() <= 101:
323+
if keypurpose == "ECDSA_KEY":
324+
if efuses["ECDSA_FORCE_USE_HARDWARE_K"].get() == 0:
325+
# For ECDSA key purpose block permanently enable
326+
# the hardware TRNG supplied k mode (most secure mode)
327+
print("\tECDSA_FORCE_USE_HARDWARE_K: 0 -> 1")
328+
efuses["ECDSA_FORCE_USE_HARDWARE_K"].save(1)
329+
else:
330+
print("\tECDSA_FORCE_USE_HARDWARE_K is already '1'")
329331

330332
if disable_wr_protect_key_purpose:
331333
print("\tDisabling write to '%s'." % block.key_purpose_name)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
VER_NO: 44563d2af4ebdba4db6c0a34a50c94f9
2+
EFUSES:
3+
ECDSA_FORCE_USE_HARDWARE_K : {show: y, blk : 0, word: 3, pos: 18, len : 1, start: 114, type : bool, wr_dis : 17, rd_dis: null, alt : '', dict : '', desc: 'Represents whether hardware random number k is forced used in ESDCA. 1: force used. 0: not force used', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[18]', bloc: 'B14[2]'}

0 commit comments

Comments
 (0)