esptool 5.1.dev1__tar.gz → 5.2.dev2__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.dev2}/PKG-INFO +4 -3
- {esptool-5.1.dev1 → esptool-5.2.dev2}/README.md +1 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/__init__.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/esp_port_manager.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/redirector.py +3 -4
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/__init__.py +7 -6
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/cli_util.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/base_fields.py +21 -16
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/base_operations.py +25 -20
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/csv_table_parser.py +3 -5
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/emulate_efuse_controller_base.py +5 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/emulate_efuse_controller.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/fields.py +9 -11
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/operations.py +3 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/fields.py +6 -7
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/operations.py +8 -6
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/fields.py +5 -6
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/fields.py +8 -16
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/fields.py +8 -9
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/fields.py +7 -8
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/fields.py +10 -11
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/fields.py +11 -12
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/fields.py +11 -15
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/fields.py +104 -13
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/mem_definition.py +19 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/fields.py +9 -10
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/fields.py +10 -11
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/mem_definition.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/operations.py +4 -2
- esptool-5.2.dev2/espefuse/efuse/esp32s31/__init__.py +5 -0
- esptool-5.2.dev2/espefuse/efuse/esp32s31/emulate_efuse_controller.py +92 -0
- esptool-5.2.dev2/espefuse/efuse/esp32s31/fields.py +443 -0
- esptool-5.2.dev2/espefuse/efuse/esp32s31/mem_definition.py +158 -0
- esptool-5.2.dev2/espefuse/efuse/esp32s31/operations.py +297 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/mem_definition_base.py +3 -3
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/util.py +3 -3
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c2.yaml +5 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c5.yaml +46 -46
- esptool-5.2.dev2/espefuse/efuse_defs/esp32p4_v3.0.yaml +174 -0
- esptool-5.2.dev2/espefuse/efuse_defs/esp32s31.yaml +122 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_interface.py +16 -9
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/__init__.py +20 -15
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/esp_hsm_sign/__init__.py +5 -3
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/__init__.py +10 -48
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/bin_image.py +41 -32
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/cli_util.py +153 -6
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/cmds.py +54 -40
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/loader.py +56 -64
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/logger.py +3 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/reset.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/__init__.py +2 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32.py +8 -7
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c2.py +37 -27
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c3.py +10 -3
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c5.py +22 -5
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c6.py +23 -6
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c61.py +13 -4
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32h4.py +0 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32p4.py +92 -7
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32s2.py +0 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32s3.py +0 -2
- esptool-5.2.dev2/esptool/targets/esp32s31.py +221 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp8266.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/1/README.md +1 -1
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c2.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c3.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c6.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c61.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32h2.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32p4rc1.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32s2.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32s3.json +8 -0
- esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp8266.json +8 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/uf2_writer.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/util.py +24 -21
- {esptool-5.1.dev1 → esptool-5.2.dev2/esptool.egg-info}/PKG-INFO +4 -3
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/SOURCES.txt +9 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/requires.txt +2 -2
- {esptool-5.1.dev1 → esptool-5.2.dev2}/pyproject.toml +8 -6
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c2.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c3.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c5.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c6.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c61.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32h2.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32p4.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32s2.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32s3.json +0 -8
- esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp8266.json +0 -8
- {esptool-5.1.dev1 → esptool-5.2.dev2}/LICENSE +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/MANIFEST.in +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c61.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h2.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h21.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h4.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32p4.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32s3.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/esp_hsm_sign/exceptions.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/config.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32h2.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32h21.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/README.md +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c5.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c61.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32p4.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp8266.json +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/entry_points.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/top_level.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/setup.cfg +0 -0
- {esptool-5.1.dev1 → esptool-5.2.dev2}/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.dev2
|
|
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<2
|
|
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
|
|
@@ -7,7 +7,7 @@ import sys
|
|
|
7
7
|
import rich_click as click
|
|
8
8
|
|
|
9
9
|
import esptool
|
|
10
|
-
from esptool.cli_util import ChipType, ResetModeType
|
|
10
|
+
from esptool.cli_util import BaudRateType, ChipType, ResetModeType, SerialPortType
|
|
11
11
|
from esptool.logger import log
|
|
12
12
|
|
|
13
13
|
from espefuse.cli_util import Group
|
|
@@ -53,7 +53,7 @@ __all__ = [
|
|
|
53
53
|
@click.option(
|
|
54
54
|
"--baud",
|
|
55
55
|
"-b",
|
|
56
|
-
type=
|
|
56
|
+
type=BaudRateType(),
|
|
57
57
|
default=esptool.ESPLoader.ESP_ROM_BAUD,
|
|
58
58
|
envvar="ESPTOOL_BAUD",
|
|
59
59
|
help="Serial port baud rate used when flashing/reading.",
|
|
@@ -62,7 +62,7 @@ __all__ = [
|
|
|
62
62
|
"--port",
|
|
63
63
|
"-p",
|
|
64
64
|
envvar="ESPTOOL_PORT",
|
|
65
|
-
type=
|
|
65
|
+
type=SerialPortType(),
|
|
66
66
|
help="Serial port device.",
|
|
67
67
|
)
|
|
68
68
|
@click.option(
|
|
@@ -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
|
|
@@ -222,16 +223,21 @@ class BaseCommands:
|
|
|
222
223
|
f"({self.CHIP_NAME} != {self.esp.CHIP_NAME})"
|
|
223
224
|
)
|
|
224
225
|
|
|
226
|
+
@classmethod
|
|
227
|
+
def _close_port(
|
|
228
|
+
cls,
|
|
229
|
+
esp: esptool.ESPLoader | EmulateEfuseControllerBase | None,
|
|
230
|
+
external_esp: bool = False,
|
|
231
|
+
) -> None:
|
|
232
|
+
"""Close the serial port if it was opened internally."""
|
|
233
|
+
if esp is not None and not external_esp and isinstance(esp, esptool.ESPLoader):
|
|
234
|
+
esp._port.close()
|
|
235
|
+
|
|
225
236
|
def __enter__(self):
|
|
226
237
|
return self
|
|
227
238
|
|
|
228
239
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
229
|
-
|
|
230
|
-
self.esp is not None
|
|
231
|
-
and not self.external_esp
|
|
232
|
-
and isinstance(self.esp, esptool.ESPLoader)
|
|
233
|
-
):
|
|
234
|
-
self.esp._port.close()
|
|
240
|
+
self._close_port(self.esp, self.external_esp)
|
|
235
241
|
|
|
236
242
|
################################# CLI definitions #################################
|
|
237
243
|
|
|
@@ -850,9 +856,9 @@ class BaseCommands:
|
|
|
850
856
|
for block in self.efuses.blocks:
|
|
851
857
|
burn_list_a_block = [e for e in burn_efuses_list if e.block == block.id]
|
|
852
858
|
if len(burn_list_a_block):
|
|
853
|
-
log.print(" from BLOCK
|
|
859
|
+
log.print(f" from BLOCK{block.id}")
|
|
854
860
|
for field in burn_list_a_block:
|
|
855
|
-
log.print(" -
|
|
861
|
+
log.print(f" - {field.name}")
|
|
856
862
|
if (
|
|
857
863
|
self.efuses.blocks[field.block].get_coding_scheme()
|
|
858
864
|
!= self.efuses.REGS.CODING_SCHEME_NONE
|
|
@@ -990,7 +996,7 @@ class BaseCommands:
|
|
|
990
996
|
]
|
|
991
997
|
if error:
|
|
992
998
|
raise esptool.FatalError(
|
|
993
|
-
"
|
|
999
|
+
f"{efuse_name} must be readable, stop this operation!"
|
|
994
1000
|
)
|
|
995
1001
|
else:
|
|
996
1002
|
for block in self.efuses.Blocks.BLOCKS:
|
|
@@ -1000,8 +1006,8 @@ class BaseCommands:
|
|
|
1000
1006
|
self.efuses[block.key_purpose].get()
|
|
1001
1007
|
):
|
|
1002
1008
|
raise esptool.FatalError(
|
|
1003
|
-
"
|
|
1004
|
-
|
|
1009
|
+
f"{efuse_name} must be readable, "
|
|
1010
|
+
f"stop this operation!"
|
|
1005
1011
|
)
|
|
1006
1012
|
break
|
|
1007
1013
|
# make full list of which efuses will be disabled
|
|
@@ -1013,8 +1019,8 @@ class BaseCommands:
|
|
|
1013
1019
|
]
|
|
1014
1020
|
names = ", ".join(e.name for e in all_disabling)
|
|
1015
1021
|
log.print(
|
|
1016
|
-
"Permanently read-disabling eFuse
|
|
1017
|
-
|
|
1022
|
+
f"Permanently read-disabling eFuse"
|
|
1023
|
+
f"{'s' if len(all_disabling) > 1 else ''} {names}"
|
|
1018
1024
|
)
|
|
1019
1025
|
efuse.disable_read()
|
|
1020
1026
|
|
|
@@ -1055,8 +1061,8 @@ class BaseCommands:
|
|
|
1055
1061
|
]
|
|
1056
1062
|
names = ", ".join(e.name for e in all_disabling)
|
|
1057
1063
|
log.print(
|
|
1058
|
-
"Permanently write-disabling eFuse
|
|
1059
|
-
|
|
1064
|
+
f"Permanently write-disabling eFuse"
|
|
1065
|
+
f"{'s' if len(all_disabling) > 1 else ''} {names}"
|
|
1060
1066
|
)
|
|
1061
1067
|
efuse.disable_write()
|
|
1062
1068
|
|
|
@@ -1166,11 +1172,10 @@ class BaseCommands:
|
|
|
1166
1172
|
)
|
|
1167
1173
|
data_block.reverse()
|
|
1168
1174
|
log.print(
|
|
1169
|
-
"bit_number: "
|
|
1170
|
-
"
|
|
1171
|
-
% (data_block.len - 1)
|
|
1175
|
+
f"bit_number: [{data_block.len - 1:03d}]"
|
|
1176
|
+
f"........................................................[0]"
|
|
1172
1177
|
)
|
|
1173
|
-
log.print("BLOCK
|
|
1178
|
+
log.print(f"BLOCK{block_obj.id:>2d} :", data_block)
|
|
1174
1179
|
block_obj.print_block(data_block, "regs_to_write", debug=True)
|
|
1175
1180
|
block_obj.save(data_block.bytes[::-1])
|
|
1176
1181
|
|
|
@@ -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 >>"""
|