esptool 5.1.dev1__tar.gz → 5.2.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {esptool-5.1.dev1/esptool.egg-info → esptool-5.2.dev1}/PKG-INFO +4 -3
- {esptool-5.1.dev1 → esptool-5.2.dev1}/README.md +1 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/__init__.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/esp_port_manager.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/redirector.py +3 -4
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/__init__.py +4 -3
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/cli_util.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/base_fields.py +21 -16
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/base_operations.py +14 -14
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/csv_table_parser.py +3 -5
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/emulate_efuse_controller_base.py +5 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/emulate_efuse_controller.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/fields.py +9 -11
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/operations.py +3 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/fields.py +6 -7
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/operations.py +8 -6
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/fields.py +5 -6
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/fields.py +8 -16
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/fields.py +8 -9
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/fields.py +7 -8
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/fields.py +10 -11
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/fields.py +11 -12
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/fields.py +11 -15
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/fields.py +104 -13
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/mem_definition.py +19 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/fields.py +9 -10
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/fields.py +10 -11
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/operations.py +4 -2
- esptool-5.2.dev1/espefuse/efuse/esp32s31/__init__.py +5 -0
- esptool-5.2.dev1/espefuse/efuse/esp32s31/emulate_efuse_controller.py +92 -0
- esptool-5.2.dev1/espefuse/efuse/esp32s31/fields.py +443 -0
- esptool-5.2.dev1/espefuse/efuse/esp32s31/mem_definition.py +158 -0
- esptool-5.2.dev1/espefuse/efuse/esp32s31/operations.py +297 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/mem_definition_base.py +3 -3
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/util.py +3 -3
- esptool-5.2.dev1/espefuse/efuse_defs/esp32p4_v3.0.yaml +174 -0
- esptool-5.2.dev1/espefuse/efuse_defs/esp32s31.yaml +122 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_interface.py +2 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/__init__.py +20 -15
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/esp_hsm_sign/__init__.py +5 -3
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/__init__.py +52 -13
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/bin_image.py +41 -32
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/cli_util.py +10 -6
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/cmds.py +15 -19
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/loader.py +34 -23
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/logger.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/reset.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/__init__.py +2 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32.py +8 -7
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c2.py +20 -19
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c3.py +10 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c5.py +22 -5
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c6.py +23 -4
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c61.py +13 -4
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32p4.py +32 -5
- esptool-5.2.dev1/esptool/targets/esp32s31.py +221 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp8266.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/README.md +1 -1
- esptool-5.2.dev1/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
- esptool-5.2.dev1/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/uf2_writer.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/util.py +24 -21
- {esptool-5.1.dev1 → esptool-5.2.dev1/esptool.egg-info}/PKG-INFO +4 -3
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/SOURCES.txt +9 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/requires.txt +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev1}/pyproject.toml +7 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c5.json +0 -8
- {esptool-5.1.dev1 → esptool-5.2.dev1}/LICENSE +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/MANIFEST.in +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c2.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c5.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c61.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h2.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h21.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h4.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32p4.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32s3.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/esp_hsm_sign/exceptions.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/config.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32h2.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32h21.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32h4.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32s2.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32s3.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c61.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
- /esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32p4.json → /esptool-5.2.dev1/esptool/targets/stub_flasher/1/esp32p4rc1.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/README.md +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c5.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c61.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32p4.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp8266.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/entry_points.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/top_level.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/setup.cfg +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: esptool
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.2.dev1
|
|
4
4
|
Summary: A serial utility for flashing, provisioning, and interacting with Espressif SoCs.
|
|
5
5
|
Author: Fredrik Ahlberg (themadinventor), Angus Gratton (projectgus), Espressif Systems
|
|
6
6
|
License: GPLv2+
|
|
@@ -31,7 +31,7 @@ Requires-Dist: pyserial>=3.3
|
|
|
31
31
|
Requires-Dist: reedsolo<1.8,>=1.5.3
|
|
32
32
|
Requires-Dist: PyYAML>=5.1
|
|
33
33
|
Requires-Dist: intelhex
|
|
34
|
-
Requires-Dist: rich_click
|
|
34
|
+
Requires-Dist: rich_click<1.9.0
|
|
35
35
|
Requires-Dist: click<9
|
|
36
36
|
Provides-Extra: dev
|
|
37
37
|
Requires-Dist: pyelftools; extra == "dev"
|
|
@@ -44,7 +44,7 @@ Requires-Dist: czespressif; extra == "dev"
|
|
|
44
44
|
Provides-Extra: hsm
|
|
45
45
|
Requires-Dist: python-pkcs11; extra == "hsm"
|
|
46
46
|
Provides-Extra: docs
|
|
47
|
-
Requires-Dist: esp-docs~=1
|
|
47
|
+
Requires-Dist: esp-docs~=2.1; extra == "docs"
|
|
48
48
|
Requires-Dist: sphinx-tabs; extra == "docs"
|
|
49
49
|
Dynamic: license-file
|
|
50
50
|
|
|
@@ -53,6 +53,7 @@ Dynamic: license-file
|
|
|
53
53
|
A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
|
|
54
54
|
|
|
55
55
|
[](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
|
|
56
|
+
[](https://results.pre-commit.ci/latest/github/espressif/esptool/master)
|
|
56
57
|
|
|
57
58
|
## Documentation
|
|
58
59
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
|
|
4
4
|
|
|
5
5
|
[](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
|
|
6
|
+
[](https://results.pre-commit.ci/latest/github/espressif/esptool/master)
|
|
6
7
|
|
|
7
8
|
## Documentation
|
|
8
9
|
|
|
@@ -38,7 +38,7 @@ class EspPortManager(serial.rfc2217.PortManager):
|
|
|
38
38
|
def __init__(self, serial_port, connection, esp32r0_delay, logger=None):
|
|
39
39
|
self.esp32r0_delay = esp32r0_delay
|
|
40
40
|
self.is_download_mode = False
|
|
41
|
-
super(
|
|
41
|
+
super().__init__(serial_port, connection, logger)
|
|
42
42
|
|
|
43
43
|
def _telnet_process_subnegotiation(self, suboption):
|
|
44
44
|
if suboption[0:1] == COM_PORT_OPTION and suboption[1:2] == SET_CONTROL:
|
|
@@ -66,7 +66,7 @@ class EspPortManager(serial.rfc2217.PortManager):
|
|
|
66
66
|
]:
|
|
67
67
|
return
|
|
68
68
|
# only in cases not handled above do the original implementation in PortManager
|
|
69
|
-
super(
|
|
69
|
+
super()._telnet_process_subnegotiation(suboption)
|
|
70
70
|
|
|
71
71
|
def _hard_reset_thread(self):
|
|
72
72
|
"""
|
|
@@ -5,12 +5,11 @@
|
|
|
5
5
|
import threading
|
|
6
6
|
import time
|
|
7
7
|
import logging
|
|
8
|
-
import socket
|
|
9
8
|
|
|
10
9
|
from esp_rfc2217_server.esp_port_manager import EspPortManager
|
|
11
10
|
|
|
12
11
|
|
|
13
|
-
class Redirector
|
|
12
|
+
class Redirector:
|
|
14
13
|
def __init__(self, serial_instance, socket, debug=False, esp32r0delay=False):
|
|
15
14
|
self.serial = serial_instance
|
|
16
15
|
self.socket = socket
|
|
@@ -54,7 +53,7 @@ class Redirector(object):
|
|
|
54
53
|
if data:
|
|
55
54
|
# escape outgoing data when needed (Telnet IAC (0xff) character)
|
|
56
55
|
self.write(b"".join(self.rfc2217.escape(data)))
|
|
57
|
-
except
|
|
56
|
+
except OSError as msg:
|
|
58
57
|
self.log.error("{}".format(msg))
|
|
59
58
|
# probably got disconnected
|
|
60
59
|
break
|
|
@@ -74,7 +73,7 @@ class Redirector(object):
|
|
|
74
73
|
if not data:
|
|
75
74
|
break
|
|
76
75
|
self.serial.write(b"".join(self.rfc2217.filter(data)))
|
|
77
|
-
except
|
|
76
|
+
except OSError as msg:
|
|
78
77
|
self.log.error("{}".format(msg))
|
|
79
78
|
# probably got disconnected
|
|
80
79
|
break
|
|
@@ -93,9 +93,10 @@ __all__ = [
|
|
|
93
93
|
"Use with caution!",
|
|
94
94
|
)
|
|
95
95
|
@click.option(
|
|
96
|
-
"--postpone",
|
|
97
|
-
|
|
98
|
-
help="Postpone burning some eFuses from BLOCK0 at the end
|
|
96
|
+
"--postpone/--no-postpone",
|
|
97
|
+
default=True,
|
|
98
|
+
help="Postpone burning some eFuses from BLOCK0 at the end "
|
|
99
|
+
"(enabled by default, can be disabled with --no-postpone).",
|
|
99
100
|
)
|
|
100
101
|
@click.option(
|
|
101
102
|
"--extend-efuse-table",
|
|
@@ -220,7 +220,7 @@ class Group(EsptoolGroup):
|
|
|
220
220
|
commands = init_commands(port=None, chip=ctx.obj["chip"], skip_connect=True)
|
|
221
221
|
commands.add_cli_commands(self)
|
|
222
222
|
elif len(used_cmds) == 0:
|
|
223
|
-
self.get_help(ctx)
|
|
223
|
+
log.print(self.get_help(ctx))
|
|
224
224
|
ctx.exit()
|
|
225
225
|
|
|
226
226
|
cmd_groups = self.repeat_read_commands(used_cmds, cmd_groups)
|
|
@@ -17,7 +17,7 @@ from esptool.logger import log
|
|
|
17
17
|
from . import util
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
class CheckArgValue
|
|
20
|
+
class CheckArgValue:
|
|
21
21
|
def __init__(self, efuses, name):
|
|
22
22
|
self.efuses = efuses
|
|
23
23
|
self.name = name
|
|
@@ -85,7 +85,7 @@ class CheckArgValue(object):
|
|
|
85
85
|
return check_arg_value(efuse, new_value)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
class EfuseProtectBase
|
|
88
|
+
class EfuseProtectBase:
|
|
89
89
|
# This class is used by EfuseBlockBase and EfuseFieldBase
|
|
90
90
|
read_disable_bit: int | list[int] | None
|
|
91
91
|
write_disable_bit: int | list[int] | None
|
|
@@ -214,9 +214,7 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
214
214
|
elif coding_scheme == self.parent.REGS.CODING_SCHEME_RS:
|
|
215
215
|
return self.len * 4
|
|
216
216
|
else:
|
|
217
|
-
raise esptool.FatalError(
|
|
218
|
-
"Coding scheme (%d) not supported" % (coding_scheme)
|
|
219
|
-
)
|
|
217
|
+
raise esptool.FatalError(f"Coding scheme ({coding_scheme}) not supported")
|
|
220
218
|
|
|
221
219
|
def get_coding_scheme(self):
|
|
222
220
|
if self.id == 0:
|
|
@@ -255,7 +253,7 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
255
253
|
words = self.get_words()
|
|
256
254
|
data = BitArray()
|
|
257
255
|
for word in reversed(words):
|
|
258
|
-
data.append("uint:32
|
|
256
|
+
data.append(f"uint:32={word}")
|
|
259
257
|
self.bitarray.overwrite(data, pos=0)
|
|
260
258
|
if print_info:
|
|
261
259
|
self.print_block(self.bitarray, "read_regs")
|
|
@@ -264,13 +262,13 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
264
262
|
if self.parent.debug or debug:
|
|
265
263
|
bit_string.pos = 0
|
|
266
264
|
log.print(
|
|
267
|
-
"
|
|
268
|
-
|
|
265
|
+
f"{self.name:<15s} ({' '.join(self.alias)[:16]:<16s}) "
|
|
266
|
+
f"[{self.id:<2d}] {comment}:",
|
|
269
267
|
" ".join(
|
|
270
268
|
[
|
|
271
|
-
"
|
|
269
|
+
f"{word:08x}"
|
|
272
270
|
for word in bit_string.readlist(
|
|
273
|
-
"
|
|
271
|
+
f"{int(bit_string.len / 32)}*uint:32"
|
|
274
272
|
)[::-1]
|
|
275
273
|
]
|
|
276
274
|
),
|
|
@@ -285,8 +283,8 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
285
283
|
return False
|
|
286
284
|
if len(wr_data.bytes) != len(self.bitarray.bytes):
|
|
287
285
|
raise esptool.FatalError(
|
|
288
|
-
"Data does not fit:
|
|
289
|
-
|
|
286
|
+
f"Data does not fit: block{self.id} size "
|
|
287
|
+
f"{len(self.bitarray.bytes)} bytes, data {len(wr_data.bytes)} bytes"
|
|
290
288
|
)
|
|
291
289
|
self.check_wr_rd_protect()
|
|
292
290
|
|
|
@@ -468,7 +466,7 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
468
466
|
self.wr_bitarray.set(0)
|
|
469
467
|
|
|
470
468
|
|
|
471
|
-
class EspEfusesBase
|
|
469
|
+
class EspEfusesBase:
|
|
472
470
|
"""
|
|
473
471
|
Wrapper object to manage the efuse fields in a connected ESP bootloader
|
|
474
472
|
"""
|
|
@@ -538,8 +536,14 @@ class EspEfusesBase(object):
|
|
|
538
536
|
log.print("Re-connecting...")
|
|
539
537
|
baudrate = esp._port.baudrate
|
|
540
538
|
port = esp._port.port
|
|
539
|
+
connect_mode = (
|
|
540
|
+
"usb-reset"
|
|
541
|
+
if esp._get_pid() == esp.USB_JTAG_SERIAL_PID
|
|
542
|
+
else "default-reset"
|
|
543
|
+
)
|
|
544
|
+
log.print(f"Port: {port}, Baudrate: {baudrate}, Connect mode: {connect_mode}")
|
|
541
545
|
esp._port.close()
|
|
542
|
-
return esptool.detect_chip(port, baudrate)
|
|
546
|
+
return esptool.detect_chip(port, baudrate, connect_mode)
|
|
543
547
|
|
|
544
548
|
def get_index_block_by_name(self, name):
|
|
545
549
|
for block in self.blocks:
|
|
@@ -674,8 +678,9 @@ class EspEfusesBase(object):
|
|
|
674
678
|
@staticmethod
|
|
675
679
|
def confirm(action, do_not_confirm):
|
|
676
680
|
log.print(
|
|
677
|
-
"
|
|
678
|
-
|
|
681
|
+
"{}{}\nThis is an irreversible operation!".format(
|
|
682
|
+
action, "" if action.endswith("\n") else ". "
|
|
683
|
+
)
|
|
679
684
|
)
|
|
680
685
|
if not do_not_confirm:
|
|
681
686
|
log.print("Type 'BURN' (all capitals) to continue.", flush=True)
|
|
@@ -9,7 +9,8 @@ import io
|
|
|
9
9
|
import os
|
|
10
10
|
import json
|
|
11
11
|
import sys
|
|
12
|
-
from typing import Any, BinaryIO,
|
|
12
|
+
from typing import Any, BinaryIO, TextIO
|
|
13
|
+
from collections.abc import Callable
|
|
13
14
|
|
|
14
15
|
import espsecure
|
|
15
16
|
import rich_click as click
|
|
@@ -850,9 +851,9 @@ class BaseCommands:
|
|
|
850
851
|
for block in self.efuses.blocks:
|
|
851
852
|
burn_list_a_block = [e for e in burn_efuses_list if e.block == block.id]
|
|
852
853
|
if len(burn_list_a_block):
|
|
853
|
-
log.print(" from BLOCK
|
|
854
|
+
log.print(f" from BLOCK{block.id}")
|
|
854
855
|
for field in burn_list_a_block:
|
|
855
|
-
log.print(" -
|
|
856
|
+
log.print(f" - {field.name}")
|
|
856
857
|
if (
|
|
857
858
|
self.efuses.blocks[field.block].get_coding_scheme()
|
|
858
859
|
!= self.efuses.REGS.CODING_SCHEME_NONE
|
|
@@ -990,7 +991,7 @@ class BaseCommands:
|
|
|
990
991
|
]
|
|
991
992
|
if error:
|
|
992
993
|
raise esptool.FatalError(
|
|
993
|
-
"
|
|
994
|
+
f"{efuse_name} must be readable, stop this operation!"
|
|
994
995
|
)
|
|
995
996
|
else:
|
|
996
997
|
for block in self.efuses.Blocks.BLOCKS:
|
|
@@ -1000,8 +1001,8 @@ class BaseCommands:
|
|
|
1000
1001
|
self.efuses[block.key_purpose].get()
|
|
1001
1002
|
):
|
|
1002
1003
|
raise esptool.FatalError(
|
|
1003
|
-
"
|
|
1004
|
-
|
|
1004
|
+
f"{efuse_name} must be readable, "
|
|
1005
|
+
f"stop this operation!"
|
|
1005
1006
|
)
|
|
1006
1007
|
break
|
|
1007
1008
|
# make full list of which efuses will be disabled
|
|
@@ -1013,8 +1014,8 @@ class BaseCommands:
|
|
|
1013
1014
|
]
|
|
1014
1015
|
names = ", ".join(e.name for e in all_disabling)
|
|
1015
1016
|
log.print(
|
|
1016
|
-
"Permanently read-disabling eFuse
|
|
1017
|
-
|
|
1017
|
+
f"Permanently read-disabling eFuse"
|
|
1018
|
+
f"{'s' if len(all_disabling) > 1 else ''} {names}"
|
|
1018
1019
|
)
|
|
1019
1020
|
efuse.disable_read()
|
|
1020
1021
|
|
|
@@ -1055,8 +1056,8 @@ class BaseCommands:
|
|
|
1055
1056
|
]
|
|
1056
1057
|
names = ", ".join(e.name for e in all_disabling)
|
|
1057
1058
|
log.print(
|
|
1058
|
-
"Permanently write-disabling eFuse
|
|
1059
|
-
|
|
1059
|
+
f"Permanently write-disabling eFuse"
|
|
1060
|
+
f"{'s' if len(all_disabling) > 1 else ''} {names}"
|
|
1060
1061
|
)
|
|
1061
1062
|
efuse.disable_write()
|
|
1062
1063
|
|
|
@@ -1166,11 +1167,10 @@ class BaseCommands:
|
|
|
1166
1167
|
)
|
|
1167
1168
|
data_block.reverse()
|
|
1168
1169
|
log.print(
|
|
1169
|
-
"bit_number: "
|
|
1170
|
-
"
|
|
1171
|
-
% (data_block.len - 1)
|
|
1170
|
+
f"bit_number: [{data_block.len - 1:03d}]"
|
|
1171
|
+
f"........................................................[0]"
|
|
1172
1172
|
)
|
|
1173
|
-
log.print("BLOCK
|
|
1173
|
+
log.print(f"BLOCK{block_obj.id:>2d} :", data_block)
|
|
1174
1174
|
block_obj.print_block(data_block, "regs_to_write", debug=True)
|
|
1175
1175
|
block_obj.save(data_block.bytes[::-1])
|
|
1176
1176
|
|
|
@@ -180,7 +180,7 @@ class CSVFuseTable(list):
|
|
|
180
180
|
print_error(p, n, state)
|
|
181
181
|
|
|
182
182
|
|
|
183
|
-
class FuseDefinition
|
|
183
|
+
class FuseDefinition:
|
|
184
184
|
def __init__(self):
|
|
185
185
|
self.field_name = ""
|
|
186
186
|
self.group = ""
|
|
@@ -261,11 +261,9 @@ class FuseDefinition(object):
|
|
|
261
261
|
|
|
262
262
|
class InputError(RuntimeError):
|
|
263
263
|
def __init__(self, e):
|
|
264
|
-
super(
|
|
264
|
+
super().__init__(e)
|
|
265
265
|
|
|
266
266
|
|
|
267
267
|
class ValidationError(InputError):
|
|
268
268
|
def __init__(self, p, message):
|
|
269
|
-
super(
|
|
270
|
-
f"Entry {p.field_name} invalid: {message}"
|
|
271
|
-
)
|
|
269
|
+
super().__init__(f"Entry {p.field_name} invalid: {message}")
|
|
@@ -10,7 +10,7 @@ from bitstring import BitStream
|
|
|
10
10
|
from esptool.logger import log
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
class EmulateEfuseControllerBase
|
|
13
|
+
class EmulateEfuseControllerBase:
|
|
14
14
|
"""The class for virtual efuse operations. Using for HOST_TEST."""
|
|
15
15
|
|
|
16
16
|
CHIP_NAME = ""
|
|
@@ -19,6 +19,7 @@ class EmulateEfuseControllerBase(object):
|
|
|
19
19
|
Blocks = None
|
|
20
20
|
Fields = None
|
|
21
21
|
REGS = None
|
|
22
|
+
USB_JTAG_SERIAL_PID = 0x1001
|
|
22
23
|
|
|
23
24
|
def __init__(self, efuse_file=None, debug=False):
|
|
24
25
|
self.debug = debug
|
|
@@ -76,6 +77,9 @@ class EmulateEfuseControllerBase(object):
|
|
|
76
77
|
blk = self.Blocks.get(self.Blocks.BLOCKS[block])
|
|
77
78
|
self.write_reg(blk.wr_addr + (4 * n), value)
|
|
78
79
|
|
|
80
|
+
def _get_pid(self):
|
|
81
|
+
return -1
|
|
82
|
+
|
|
79
83
|
""" << esptool method end """
|
|
80
84
|
|
|
81
85
|
def handle_writing_event(self, addr, value):
|
|
@@ -22,7 +22,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
|
|
|
22
22
|
self.Blocks = EfuseDefineBlocks
|
|
23
23
|
self.Fields = EfuseDefineFields(None)
|
|
24
24
|
self.REGS = EfuseDefineRegisters
|
|
25
|
-
super(
|
|
25
|
+
super().__init__(efuse_file, debug)
|
|
26
26
|
|
|
27
27
|
""" esptool method start >> """
|
|
28
28
|
|
|
@@ -39,7 +39,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
|
|
|
39
39
|
if addr == self.REGS.APB_CTL_DATE_ADDR:
|
|
40
40
|
return self.REGS.APB_CTL_DATE_V << self.REGS.APB_CTL_DATE_S
|
|
41
41
|
else:
|
|
42
|
-
return super(
|
|
42
|
+
return super().read_reg(addr)
|
|
43
43
|
|
|
44
44
|
""" << esptool method end """
|
|
45
45
|
|
|
@@ -27,7 +27,7 @@ class EfuseBlock(base_fields.EfuseBlockBase):
|
|
|
27
27
|
else:
|
|
28
28
|
if parent.coding_scheme is None:
|
|
29
29
|
parent.read_coding_scheme()
|
|
30
|
-
super(
|
|
30
|
+
super().__init__(parent, param, skip_read=skip_read)
|
|
31
31
|
|
|
32
32
|
def apply_coding_scheme(self):
|
|
33
33
|
data = self.get_raw(from_read=False)[::-1]
|
|
@@ -82,8 +82,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
82
82
|
self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
|
|
83
83
|
if esp.CHIP_NAME != "ESP32":
|
|
84
84
|
raise esptool.FatalError(
|
|
85
|
-
"Expected the 'esp' param for ESP32 chip but got for '
|
|
86
|
-
% (esp.CHIP_NAME)
|
|
85
|
+
f"Expected the 'esp' param for ESP32 chip but got for '{esp.CHIP_NAME}'."
|
|
87
86
|
)
|
|
88
87
|
self.blocks = [
|
|
89
88
|
EfuseBlock(self, self.Blocks.get(block), skip_read=skip_connect)
|
|
@@ -115,7 +114,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
115
114
|
]
|
|
116
115
|
else:
|
|
117
116
|
raise esptool.FatalError(
|
|
118
|
-
"The coding scheme (
|
|
117
|
+
f"The coding scheme ({self.coding_scheme}) - is not supported"
|
|
119
118
|
)
|
|
120
119
|
if self["MAC_VERSION"].get() == 1:
|
|
121
120
|
self.efuses += [
|
|
@@ -297,13 +296,12 @@ class EfuseMacField(EfuseField):
|
|
|
297
296
|
def get_and_check(raw_mac, stored_crc):
|
|
298
297
|
computed_crc = EfuseMacField.calc_crc(raw_mac)
|
|
299
298
|
if computed_crc == stored_crc:
|
|
300
|
-
valid_msg = "(CRC
|
|
299
|
+
valid_msg = f"(CRC {stored_crc:#04x} OK)"
|
|
301
300
|
else:
|
|
302
|
-
valid_msg =
|
|
303
|
-
stored_crc
|
|
304
|
-
computed_crc,
|
|
301
|
+
valid_msg = (
|
|
302
|
+
f"(CRC {stored_crc:#04x} invalid - calculated {computed_crc:#04x})"
|
|
305
303
|
)
|
|
306
|
-
return "
|
|
304
|
+
return " ".join([util.hexify(raw_mac, ":"), valid_msg])
|
|
307
305
|
|
|
308
306
|
@staticmethod
|
|
309
307
|
def calc_crc(raw_mac):
|
|
@@ -356,7 +354,7 @@ class EfuseMacField(EfuseField):
|
|
|
356
354
|
|
|
357
355
|
bitarray_mac = self.convert_to_bitstring(new_value)
|
|
358
356
|
print_field(self, bitarray_mac)
|
|
359
|
-
super(
|
|
357
|
+
super().save(new_value)
|
|
360
358
|
|
|
361
359
|
crc_val = self.calc_crc(new_value)
|
|
362
360
|
crc_field = self.parent["CUSTOM_MAC_CRC"]
|
|
@@ -389,7 +387,7 @@ class EfuseWafer(EfuseField):
|
|
|
389
387
|
return revision
|
|
390
388
|
|
|
391
389
|
def save(self, new_value):
|
|
392
|
-
raise esptool.FatalError("Burning
|
|
390
|
+
raise esptool.FatalError(f"Burning {self.name} is not supported")
|
|
393
391
|
|
|
394
392
|
|
|
395
393
|
class EfusePkg(EfuseField):
|
|
@@ -107,7 +107,7 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
107
107
|
file_name = file_name + ".yaml"
|
|
108
108
|
dir_name, _ = os.path.split(dir_name)
|
|
109
109
|
efuse_file = os.path.join(dir_name, "efuse_defs", file_name)
|
|
110
|
-
with open(f"{efuse_file}"
|
|
110
|
+
with open(f"{efuse_file}") as r_file:
|
|
111
111
|
e_desc = yaml.safe_load(r_file)
|
|
112
112
|
super().__init__(e_desc, extend_efuse_table)
|
|
113
113
|
|
|
@@ -295,8 +295,9 @@ class ESP32Commands(BaseCommands):
|
|
|
295
295
|
if chip_revision < 300:
|
|
296
296
|
raise esptool.FatalError(
|
|
297
297
|
"Incorrect chip revision for Secure boot v2. "
|
|
298
|
-
"Detected: v
|
|
299
|
-
|
|
298
|
+
"Detected: v{}.{}. Expected: >= v3.0".format(
|
|
299
|
+
chip_revision // 100, chip_revision % 100
|
|
300
|
+
)
|
|
300
301
|
)
|
|
301
302
|
|
|
302
303
|
digest = espsecure._digest_sbv2_public_key(keyfile)
|
|
@@ -23,7 +23,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
|
|
|
23
23
|
self.Blocks = EfuseDefineBlocks
|
|
24
24
|
self.Fields = EfuseDefineFields(None)
|
|
25
25
|
self.REGS = EfuseDefineRegisters
|
|
26
|
-
super(
|
|
26
|
+
super().__init__(efuse_file, debug)
|
|
27
27
|
self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
|
|
28
28
|
|
|
29
29
|
""" esptool method start >>"""
|
|
@@ -29,7 +29,7 @@ class EfuseBlock(base_fields.EfuseBlockBase):
|
|
|
29
29
|
|
|
30
30
|
def __init__(self, parent, param, skip_read=False):
|
|
31
31
|
parent.read_coding_scheme()
|
|
32
|
-
super(
|
|
32
|
+
super().__init__(parent, param, skip_read=skip_read)
|
|
33
33
|
|
|
34
34
|
def apply_coding_scheme(self):
|
|
35
35
|
data = self.get_raw(from_read=False)[::-1]
|
|
@@ -72,8 +72,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
72
72
|
self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
|
|
73
73
|
if esp.CHIP_NAME != "ESP32-C2":
|
|
74
74
|
raise esptool.FatalError(
|
|
75
|
-
"Expected the 'esp' param for ESP32-C2 chip but got for '
|
|
76
|
-
% (esp.CHIP_NAME)
|
|
75
|
+
f"Expected the 'esp' param for ESP32-C2 chip but got for '{esp.CHIP_NAME}'."
|
|
77
76
|
)
|
|
78
77
|
if not skip_connect:
|
|
79
78
|
flags = self._esp.get_security_info()["flags"]
|
|
@@ -225,7 +224,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
225
224
|
xtal_freq = self.get_crystal_freq()
|
|
226
225
|
if xtal_freq not in [26, 40]:
|
|
227
226
|
raise esptool.FatalError(
|
|
228
|
-
"The eFuse supports only xtal=26M and 40M (xtal was
|
|
227
|
+
f"The eFuse supports only xtal=26M and 40M (xtal was {xtal_freq})"
|
|
229
228
|
)
|
|
230
229
|
|
|
231
230
|
self.update_reg(self.REGS.EFUSE_DAC_CONF_REG, self.REGS.EFUSE_DAC_NUM_M, 0xFF)
|
|
@@ -259,7 +258,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
259
258
|
]
|
|
260
259
|
block.err_bitarray.pos = 0
|
|
261
260
|
for word in reversed(words):
|
|
262
|
-
block.err_bitarray.overwrite(BitArray("uint:32
|
|
261
|
+
block.err_bitarray.overwrite(BitArray(f"uint:32={word}"))
|
|
263
262
|
block.num_errors = block.err_bitarray.count(True)
|
|
264
263
|
block.fail = block.num_errors != 0
|
|
265
264
|
else:
|
|
@@ -352,7 +351,7 @@ class EfuseMacField(EfuseField):
|
|
|
352
351
|
mac = self.get_raw(from_read)[::-1]
|
|
353
352
|
else:
|
|
354
353
|
mac = self.get_raw(from_read)
|
|
355
|
-
return
|
|
354
|
+
return " ".join([util.hexify(mac, ":"), self.check()])
|
|
356
355
|
|
|
357
356
|
def save(self, new_value):
|
|
358
357
|
def print_field(e, new_value):
|
|
@@ -363,7 +362,7 @@ class EfuseMacField(EfuseField):
|
|
|
363
362
|
if self.name == "CUSTOM_MAC":
|
|
364
363
|
bitarray_mac = self.convert_to_bitstring(new_value)
|
|
365
364
|
print_field(self, bitarray_mac)
|
|
366
|
-
super(
|
|
365
|
+
super().save(new_value)
|
|
367
366
|
else:
|
|
368
367
|
raise esptool.FatalError("Writing Factory MAC address is not supported.")
|
|
369
368
|
|
|
@@ -105,7 +105,7 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
105
105
|
file_name = file_name + ".yaml"
|
|
106
106
|
dir_name, _ = os.path.split(dir_name)
|
|
107
107
|
efuse_file = os.path.join(dir_name, "efuse_defs", file_name)
|
|
108
|
-
with open(f"{efuse_file}"
|
|
108
|
+
with open(f"{efuse_file}") as r_file:
|
|
109
109
|
e_desc = yaml.safe_load(r_file)
|
|
110
110
|
super().__init__(e_desc, extend_efuse_table)
|
|
111
111
|
|
|
@@ -152,9 +152,10 @@ class ESP32C2Commands(BaseCommands):
|
|
|
152
152
|
keypurpose_list
|
|
153
153
|
):
|
|
154
154
|
raise esptool.FatalError(
|
|
155
|
-
"The number of blocks (
|
|
156
|
-
"keypurpose (
|
|
157
|
-
|
|
155
|
+
"The number of blocks ({}), datafile ({}) and "
|
|
156
|
+
"keypurpose ({}) should be the same.".format(
|
|
157
|
+
len(block_name_list), len(datafile_list), len(keypurpose_list)
|
|
158
|
+
)
|
|
158
159
|
)
|
|
159
160
|
|
|
160
161
|
assert 1 <= len(block_name_list) <= 2, "Unexpected case"
|
|
@@ -277,9 +278,10 @@ class ESP32C2Commands(BaseCommands):
|
|
|
277
278
|
num_bytes = self.efuses["BLOCK_KEY0_HI_128"].bit_len // 8
|
|
278
279
|
if len(digest) != num_bytes:
|
|
279
280
|
raise esptool.FatalError(
|
|
280
|
-
"Incorrect digest size
|
|
281
|
-
"Digest must be
|
|
282
|
-
|
|
281
|
+
"Incorrect digest size {}. "
|
|
282
|
+
"Digest must be {} bytes ({} bits) of raw binary key data.".format(
|
|
283
|
+
len(digest), num_bytes, num_bytes * 8
|
|
284
|
+
)
|
|
283
285
|
)
|
|
284
286
|
self.burn_key(
|
|
285
287
|
["BLOCK_KEY0"],
|
|
@@ -21,7 +21,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
|
|
|
21
21
|
self.Blocks = EfuseDefineBlocks
|
|
22
22
|
self.Fields = EfuseDefineFields(None)
|
|
23
23
|
self.REGS = EfuseDefineRegisters
|
|
24
|
-
super(
|
|
24
|
+
super().__init__(efuse_file, debug)
|
|
25
25
|
self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
|
|
26
26
|
|
|
27
27
|
""" esptool method start >>"""
|
|
@@ -29,7 +29,7 @@ class EfuseBlock(base_fields.EfuseBlockBase):
|
|
|
29
29
|
|
|
30
30
|
def __init__(self, parent, param, skip_read=False):
|
|
31
31
|
parent.read_coding_scheme()
|
|
32
|
-
super(
|
|
32
|
+
super().__init__(parent, param, skip_read=skip_read)
|
|
33
33
|
|
|
34
34
|
def apply_coding_scheme(self):
|
|
35
35
|
data = self.get_raw(from_read=False)[::-1]
|
|
@@ -72,8 +72,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
72
72
|
self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
|
|
73
73
|
if esp.CHIP_NAME != "ESP32-C3":
|
|
74
74
|
raise esptool.FatalError(
|
|
75
|
-
"Expected the 'esp' param for ESP32-C3 chip but got for '
|
|
76
|
-
% (esp.CHIP_NAME)
|
|
75
|
+
f"Expected the 'esp' param for ESP32-C3 chip but got for '{esp.CHIP_NAME}'."
|
|
77
76
|
)
|
|
78
77
|
if not skip_connect:
|
|
79
78
|
flags = self._esp.get_security_info()["flags"]
|
|
@@ -368,7 +367,7 @@ class EfuseMacField(EfuseField):
|
|
|
368
367
|
mac = self.get_raw(from_read)[::-1]
|
|
369
368
|
else:
|
|
370
369
|
mac = self.get_raw(from_read)
|
|
371
|
-
return "
|
|
370
|
+
return " ".join([util.hexify(mac, ":"), self.check()])
|
|
372
371
|
|
|
373
372
|
def save(self, new_value):
|
|
374
373
|
def print_field(e, new_value):
|
|
@@ -379,7 +378,7 @@ class EfuseMacField(EfuseField):
|
|
|
379
378
|
if self.name == "CUSTOM_MAC":
|
|
380
379
|
bitarray_mac = self.convert_to_bitstring(new_value)
|
|
381
380
|
print_field(self, bitarray_mac)
|
|
382
|
-
super(
|
|
381
|
+
super().save(new_value)
|
|
383
382
|
else:
|
|
384
383
|
# Writing the BLOCK1 (MAC_SPI_8M_0) default MAC is not possible,
|
|
385
384
|
# as it's written in the factory.
|
|
@@ -446,4 +445,4 @@ class EfuseKeyPurposeField(EfuseField):
|
|
|
446
445
|
if self.name == "KEY_PURPOSE_5" and str_new_value.startswith("XTS_AES"):
|
|
447
446
|
# see SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK in esp-idf
|
|
448
447
|
raise esptool.FatalError(f"{self.name} can not have {str_new_value} key due to a hardware bug (please see TRM for more details)")
|
|
449
|
-
return super(
|
|
448
|
+
return super().save(raw_val)
|
|
@@ -139,7 +139,7 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
139
139
|
file_name = file_name + ".yaml"
|
|
140
140
|
dir_name, _ = os.path.split(dir_name)
|
|
141
141
|
efuse_file = os.path.join(dir_name, "efuse_defs", file_name)
|
|
142
|
-
with open(f"{efuse_file}"
|
|
142
|
+
with open(f"{efuse_file}") as r_file:
|
|
143
143
|
e_desc = yaml.safe_load(r_file)
|
|
144
144
|
super().__init__(e_desc, extend_efuse_table)
|
|
145
145
|
|
|
@@ -293,8 +293,10 @@ class ESP32C3Commands(BaseCommands):
|
|
|
293
293
|
digest = espsecure._digest_sbv2_public_key(datafile)
|
|
294
294
|
if len(digest) != num_bytes:
|
|
295
295
|
raise esptool.FatalError(
|
|
296
|
-
"Incorrect digest size
|
|
297
|
-
"of raw binary key data."
|
|
296
|
+
"Incorrect digest size {}. Digest must be {} bytes ({} bits) "
|
|
297
|
+
"of raw binary key data.".format(
|
|
298
|
+
len(digest), num_bytes, num_bytes * 8
|
|
299
|
+
)
|
|
298
300
|
)
|
|
299
301
|
digest_list.append(digest)
|
|
300
302
|
|