esptool 4.9.dev6__tar.gz → 5.0.dev0__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-4.9.dev6/esptool.egg-info → esptool-5.0.dev0}/PKG-INFO +10 -9
- {esptool-4.9.dev6 → esptool-5.0.dev0}/README.md +1 -1
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/__init__.py +5 -2
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server.py +1 -1
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/__init__.py +13 -20
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/base_fields.py +11 -9
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/base_operations.py +7 -4
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/csv_table_parser.py +5 -2
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/operations.py +5 -1
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/mem_definition.py +1 -2
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/mem_definition.py +1 -2
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/operations.py +1 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/mem_definition_base.py +4 -5
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/__init__.py +662 -660
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/esp_hsm_sign/__init__.py +18 -11
- esptool-5.0.dev0/esptool/__init__.py +1152 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/bin_image.py +169 -187
- esptool-5.0.dev0/esptool/cli_util.py +403 -0
- esptool-5.0.dev0/esptool/cmds.py +2290 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/config.py +6 -4
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/loader.py +297 -193
- esptool-5.0.dev0/esptool/logger.py +242 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/reset.py +7 -6
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/__init__.py +0 -10
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32.py +28 -46
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c2.py +15 -24
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c3.py +15 -31
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c5.py +30 -29
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c6.py +18 -32
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c61.py +9 -22
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32h2.py +11 -26
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32h21.py +10 -21
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32h4.py +9 -21
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32p4.py +15 -31
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32s2.py +17 -36
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32s3.py +19 -33
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp8266.py +6 -29
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/uf2_writer.py +4 -6
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/util.py +55 -25
- {esptool-4.9.dev6 → esptool-5.0.dev0/esptool.egg-info}/PKG-INFO +10 -9
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/SOURCES.txt +2 -26
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/requires.txt +5 -3
- {esptool-4.9.dev6 → esptool-5.0.dev0}/pyproject.toml +11 -14
- esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -92
- esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/fields.py +0 -464
- esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/mem_definition.py +0 -165
- esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/operations.py +0 -395
- esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -92
- esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/fields.py +0 -465
- esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -152
- esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/operations.py +0 -405
- esptool-4.9.dev6/espefuse/efuse/esp32s2/__init__.py +0 -3
- esptool-4.9.dev6/espefuse/efuse/esp32s3/__init__.py +0 -3
- esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/__init__.py +0 -3
- esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -92
- esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/fields.py +0 -489
- esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -167
- esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/operations.py +0 -519
- esptool-4.9.dev6/espefuse/efuse_defs/esp32c5beta3.yaml +0 -104
- esptool-4.9.dev6/esptool/__init__.py +0 -1375
- esptool-4.9.dev6/esptool/cmds.py +0 -1569
- esptool-4.9.dev6/esptool/targets/esp32c5beta3.py +0 -126
- esptool-4.9.dev6/esptool/targets/esp32c6beta.py +0 -25
- esptool-4.9.dev6/esptool/targets/esp32h2beta1.py +0 -184
- esptool-4.9.dev6/esptool/targets/esp32h2beta2.py +0 -41
- esptool-4.9.dev6/esptool/targets/esp32s3beta2.py +0 -35
- esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -8
- esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -8
- esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -8
- esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -8
- esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -8
- {esptool-4.9.dev6 → esptool-5.0.dev0}/LICENSE +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/MANIFEST.in +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/__main__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/esp_port_manager.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/redirector.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/__main__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/mem_definition.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/mem_definition.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/mem_definition.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/mem_definition.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32c5beta3 → esptool-5.0.dev0/espefuse/efuse/esp32c6}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/mem_definition.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32c6 → esptool-5.0.dev0/espefuse/efuse/esp32c61}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/fields.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32c61 → esptool-5.0.dev0/espefuse/efuse/esp32h2}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/mem_definition.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32h2 → esptool-5.0.dev0/espefuse/efuse/esp32h21}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/mem_definition.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32h21 → esptool-5.0.dev0/espefuse/efuse/esp32h4}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/mem_definition.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32h2beta1 → esptool-5.0.dev0/espefuse/efuse/esp32p4}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/fields.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32h4 → esptool-5.0.dev0/espefuse/efuse/esp32s2}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/mem_definition.py +0 -0
- {esptool-4.9.dev6/espefuse/efuse/esp32p4 → esptool-5.0.dev0/espefuse/efuse/esp32s3}/__init__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/fields.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/mem_definition.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/util.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c2.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c5.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c61.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h2.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h21.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h4.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32p4.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32s3.yaml +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/__main__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/esp_hsm_sign/exceptions.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/__main__.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/README.md +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c5.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c61.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32p4.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/README.md +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/top_level.txt +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.py +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/setup.cfg +0 -0
- {esptool-4.9.dev6 → esptool-5.0.dev0}/setup.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: esptool
|
|
3
|
-
Version:
|
|
4
|
-
Summary: A serial utility
|
|
3
|
+
Version: 5.0.dev0
|
|
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+
|
|
7
7
|
Project-URL: Homepage, https://github.com/espressif/esptool/
|
|
@@ -18,14 +18,11 @@ Classifier: Operating System :: MacOS :: MacOS X
|
|
|
18
18
|
Classifier: Topic :: Software Development :: Embedded Systems
|
|
19
19
|
Classifier: Environment :: Console
|
|
20
20
|
Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
24
21
|
Classifier: Programming Language :: Python :: 3.10
|
|
25
22
|
Classifier: Programming Language :: Python :: 3.11
|
|
26
23
|
Classifier: Programming Language :: Python :: 3.12
|
|
27
24
|
Classifier: Programming Language :: Python :: 3.13
|
|
28
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.10
|
|
29
26
|
Description-Content-Type: text/markdown
|
|
30
27
|
License-File: LICENSE
|
|
31
28
|
Requires-Dist: bitstring!=4.2.0,>=3.1.6
|
|
@@ -35,7 +32,7 @@ Requires-Dist: pyserial>=3.3
|
|
|
35
32
|
Requires-Dist: reedsolo<1.8,>=1.5.3
|
|
36
33
|
Requires-Dist: PyYAML>=5.1
|
|
37
34
|
Requires-Dist: intelhex
|
|
38
|
-
Requires-Dist:
|
|
35
|
+
Requires-Dist: rich_click
|
|
39
36
|
Provides-Extra: dev
|
|
40
37
|
Requires-Dist: pyelftools; extra == "dev"
|
|
41
38
|
Requires-Dist: coverage~=6.0; extra == "dev"
|
|
@@ -46,10 +43,14 @@ Requires-Dist: requests; extra == "dev"
|
|
|
46
43
|
Requires-Dist: commitizen; extra == "dev"
|
|
47
44
|
Provides-Extra: hsm
|
|
48
45
|
Requires-Dist: python-pkcs11; extra == "hsm"
|
|
46
|
+
Provides-Extra: docs
|
|
47
|
+
Requires-Dist: esp-docs~=1.10; extra == "docs"
|
|
48
|
+
Requires-Dist: sphinx-tabs; extra == "docs"
|
|
49
|
+
Dynamic: license-file
|
|
49
50
|
|
|
50
51
|
# esptool.py
|
|
51
52
|
|
|
52
|
-
A Python-based, open-source, platform-independent utility
|
|
53
|
+
A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
|
|
53
54
|
|
|
54
55
|
[](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
|
|
55
56
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# esptool.py
|
|
2
2
|
|
|
3
|
-
A Python-based, open-source, platform-independent utility
|
|
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
6
|
|
|
@@ -92,7 +92,10 @@ def main():
|
|
|
92
92
|
logging.info(f"TCP/IP port: {args.localport}")
|
|
93
93
|
|
|
94
94
|
host_ip = socket.gethostbyname(socket.gethostname())
|
|
95
|
-
wait_msg =
|
|
95
|
+
wait_msg = (
|
|
96
|
+
"Waiting for connection ... use the 'rfc2217://"
|
|
97
|
+
f"{host_ip}:{args.localport}?ign_set_control' as a PORT"
|
|
98
|
+
)
|
|
96
99
|
logging.info(wait_msg)
|
|
97
100
|
|
|
98
101
|
while True:
|
|
@@ -127,7 +130,7 @@ def main():
|
|
|
127
130
|
# capable client)
|
|
128
131
|
ser.apply_settings(settings)
|
|
129
132
|
except KeyboardInterrupt:
|
|
130
|
-
|
|
133
|
+
print(flush=True)
|
|
131
134
|
break
|
|
132
135
|
except socket.error as msg:
|
|
133
136
|
logging.error(str(msg))
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
# Esptool can connect to the ESP device through that server as it is
|
|
27
27
|
# demonstrated in the following example:
|
|
28
28
|
#
|
|
29
|
-
# esptool.py --port rfc2217://localhost:4000?ign_set_control
|
|
29
|
+
# esptool.py --port rfc2217://localhost:4000?ign_set_control flash-id
|
|
30
30
|
#
|
|
31
31
|
|
|
32
32
|
import contextlib
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2016-
|
|
1
|
+
# SPDX-FileCopyrightText: 2016-2025 Espressif Systems (Shanghai) CO LTD
|
|
2
2
|
#
|
|
3
3
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
4
4
|
# PYTHON_ARGCOMPLETE_OK
|
|
@@ -13,19 +13,18 @@ import espefuse.efuse.esp32 as esp32_efuse
|
|
|
13
13
|
import espefuse.efuse.esp32c2 as esp32c2_efuse
|
|
14
14
|
import espefuse.efuse.esp32c3 as esp32c3_efuse
|
|
15
15
|
import espefuse.efuse.esp32c5 as esp32c5_efuse
|
|
16
|
-
import espefuse.efuse.esp32c5beta3 as esp32c5beta3_efuse
|
|
17
16
|
import espefuse.efuse.esp32c6 as esp32c6_efuse
|
|
18
17
|
import espefuse.efuse.esp32c61 as esp32c61_efuse
|
|
19
18
|
import espefuse.efuse.esp32h2 as esp32h2_efuse
|
|
20
19
|
import espefuse.efuse.esp32h21 as esp32h21_efuse
|
|
21
|
-
import espefuse.efuse.esp32h2beta1 as esp32h2beta1_efuse
|
|
22
20
|
import espefuse.efuse.esp32h4 as esp32h4_efuse
|
|
23
21
|
import espefuse.efuse.esp32p4 as esp32p4_efuse
|
|
24
22
|
import espefuse.efuse.esp32s2 as esp32s2_efuse
|
|
25
23
|
import espefuse.efuse.esp32s3 as esp32s3_efuse
|
|
26
|
-
import espefuse.efuse.esp32s3beta2 as esp32s3beta2_efuse
|
|
27
24
|
|
|
28
25
|
import esptool
|
|
26
|
+
import esptool.cli_util
|
|
27
|
+
from esptool.logger import log
|
|
29
28
|
|
|
30
29
|
DefChip = namedtuple("DefChip", ["chip_name", "efuse_lib", "chip_class"])
|
|
31
30
|
|
|
@@ -59,21 +58,12 @@ SUPPORTED_CHIPS = {
|
|
|
59
58
|
"esp32c6": DefChip("ESP32-C6", esp32c6_efuse, esptool.targets.ESP32C6ROM),
|
|
60
59
|
"esp32c61": DefChip("ESP32-C61", esp32c61_efuse, esptool.targets.ESP32C61ROM),
|
|
61
60
|
"esp32c5": DefChip("ESP32-C5", esp32c5_efuse, esptool.targets.ESP32C5ROM),
|
|
62
|
-
"esp32c5beta3": DefChip(
|
|
63
|
-
"ESP32-C5(beta3)", esp32c5beta3_efuse, esptool.targets.ESP32C5BETA3ROM
|
|
64
|
-
),
|
|
65
61
|
"esp32h2": DefChip("ESP32-H2", esp32h2_efuse, esptool.targets.ESP32H2ROM),
|
|
66
62
|
"esp32h21": DefChip("ESP32-H21", esp32h21_efuse, esptool.targets.ESP32H21ROM),
|
|
67
63
|
"esp32h4": DefChip("ESP32-H4", esp32h4_efuse, esptool.targets.ESP32H4ROM),
|
|
68
64
|
"esp32p4": DefChip("ESP32-P4", esp32p4_efuse, esptool.targets.ESP32P4ROM),
|
|
69
|
-
"esp32h2beta1": DefChip(
|
|
70
|
-
"ESP32-H2(beta1)", esp32h2beta1_efuse, esptool.targets.ESP32H2BETA1ROM
|
|
71
|
-
),
|
|
72
65
|
"esp32s2": DefChip("ESP32-S2", esp32s2_efuse, esptool.targets.ESP32S2ROM),
|
|
73
66
|
"esp32s3": DefChip("ESP32-S3", esp32s3_efuse, esptool.targets.ESP32S3ROM),
|
|
74
|
-
"esp32s3beta2": DefChip(
|
|
75
|
-
"ESP32-S3(beta2)", esp32s3beta2_efuse, esptool.targets.ESP32S3BETA2ROM
|
|
76
|
-
),
|
|
77
67
|
}
|
|
78
68
|
|
|
79
69
|
|
|
@@ -193,7 +183,7 @@ def main(custom_commandline=None, esp=None):
|
|
|
193
183
|
"--baud",
|
|
194
184
|
"-b",
|
|
195
185
|
help="Serial port baud rate used when flashing/reading",
|
|
196
|
-
type=esptool.arg_auto_int,
|
|
186
|
+
type=esptool.cli_util.arg_auto_int,
|
|
197
187
|
default=os.environ.get("ESPTOOL_BAUD", esptool.loader.ESPLoader.ESP_ROM_BAUD),
|
|
198
188
|
)
|
|
199
189
|
|
|
@@ -207,8 +197,8 @@ def main(custom_commandline=None, esp=None):
|
|
|
207
197
|
init_parser.add_argument(
|
|
208
198
|
"--before",
|
|
209
199
|
help="What to do before connecting to the chip",
|
|
210
|
-
choices=["
|
|
211
|
-
default="
|
|
200
|
+
choices=["default-reset", "usb-reset", "no-reset", "no-reset-no-sync"],
|
|
201
|
+
default="default-reset",
|
|
212
202
|
)
|
|
213
203
|
|
|
214
204
|
init_parser.add_argument(
|
|
@@ -317,9 +307,9 @@ def main(custom_commandline=None, esp=None):
|
|
|
317
307
|
if args.operation is None:
|
|
318
308
|
parser.print_help()
|
|
319
309
|
parser.exit(1)
|
|
320
|
-
assert (
|
|
321
|
-
|
|
322
|
-
)
|
|
310
|
+
assert len(unused_args) == 0, (
|
|
311
|
+
'Not all commands were recognized "{}"'.format(unused_args)
|
|
312
|
+
)
|
|
323
313
|
|
|
324
314
|
operation_func = vars(efuse_operations)[args.operation]
|
|
325
315
|
# each 'operation' is a module-level function of the same name
|
|
@@ -363,7 +353,10 @@ def _main():
|
|
|
363
353
|
try:
|
|
364
354
|
main()
|
|
365
355
|
except esptool.FatalError as e:
|
|
366
|
-
|
|
356
|
+
log.error(f"\nA fatal error occurred: {e}")
|
|
357
|
+
sys.exit(2)
|
|
358
|
+
except KeyboardInterrupt:
|
|
359
|
+
log.error("KeyboardInterrupt: Run cancelled by user.")
|
|
367
360
|
sys.exit(2)
|
|
368
361
|
|
|
369
362
|
|
|
@@ -12,7 +12,6 @@ from bitstring import BitArray, BitStream, CreationError
|
|
|
12
12
|
import esptool
|
|
13
13
|
|
|
14
14
|
from . import util
|
|
15
|
-
from typing import List
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
class CheckArgValue(object):
|
|
@@ -392,12 +391,14 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
392
391
|
# if the required bits are not set then we need to re-burn it again.
|
|
393
392
|
if burns < 2:
|
|
394
393
|
print(
|
|
395
|
-
f"\nRepeat burning BLOCK{self.id} (#{burns + 2})
|
|
394
|
+
f"\nRepeat burning BLOCK{self.id} (#{burns + 2}) "
|
|
395
|
+
"because not all bits were set"
|
|
396
396
|
)
|
|
397
397
|
continue
|
|
398
398
|
else:
|
|
399
399
|
print(
|
|
400
|
-
f"\nAfter {burns + 1} attempts, the required data was not
|
|
400
|
+
f"\nAfter {burns + 1} attempts, the required data was not "
|
|
401
|
+
f"set to BLOCK{self.id}"
|
|
401
402
|
)
|
|
402
403
|
break
|
|
403
404
|
|
|
@@ -455,8 +456,8 @@ class EspEfusesBase(object):
|
|
|
455
456
|
"""
|
|
456
457
|
|
|
457
458
|
_esp = None
|
|
458
|
-
blocks:
|
|
459
|
-
efuses:
|
|
459
|
+
blocks: list[EfuseBlockBase] = []
|
|
460
|
+
efuses: list = []
|
|
460
461
|
coding_scheme = None
|
|
461
462
|
force_write_always = None
|
|
462
463
|
batch_mode_cnt = 0
|
|
@@ -628,9 +629,9 @@ class EspEfusesBase(object):
|
|
|
628
629
|
% (action, "" if action.endswith("\n") else ". ")
|
|
629
630
|
)
|
|
630
631
|
if not do_not_confirm:
|
|
631
|
-
print("Type 'BURN' (all capitals) to continue.")
|
|
632
|
-
# required for Pythons which disable line buffering,
|
|
633
|
-
|
|
632
|
+
print("Type 'BURN' (all capitals) to continue.", flush=True)
|
|
633
|
+
# Flush required for Pythons which disable line buffering,
|
|
634
|
+
# ie mingw in mintty
|
|
634
635
|
yes = input()
|
|
635
636
|
if yes != "BURN":
|
|
636
637
|
print("Aborting.")
|
|
@@ -650,7 +651,8 @@ class EspEfusesBase(object):
|
|
|
650
651
|
return self.blocks[block_num].num_errors, self.blocks[block_num].fail
|
|
651
652
|
|
|
652
653
|
def is_efuses_incompatible_for_burn(self):
|
|
653
|
-
# Overwrite this function for a specific target if you want to check if a
|
|
654
|
+
# Overwrite this function for a specific target if you want to check if a
|
|
655
|
+
# certain eFuse(s) can be burned.
|
|
654
656
|
return False
|
|
655
657
|
|
|
656
658
|
def get_major_chip_version(self):
|
|
@@ -180,15 +180,17 @@ def add_common_commands(subparsers, efuses):
|
|
|
180
180
|
help="Select the dump format: "
|
|
181
181
|
"default - usual console eFuse dump; "
|
|
182
182
|
"joint - all eFuse blocks are stored in one file; "
|
|
183
|
-
"split - each eFuse block is placed into its own file. The tool will create
|
|
184
|
-
"the given --file_name (/path/blk.bin):
|
|
183
|
+
"split - each eFuse block is placed into its own file. The tool will create "
|
|
184
|
+
"multiple files based on the given --file_name (/path/blk.bin): "
|
|
185
|
+
"blk0.bin, blk1.bin ... blkN.bin. Use the burn_block_data cmd "
|
|
185
186
|
"to write it back to another chip.",
|
|
186
187
|
choices=["default", "split", "joint"],
|
|
187
188
|
default="default",
|
|
188
189
|
)
|
|
189
190
|
dump_cmd.add_argument(
|
|
190
191
|
"--file_name",
|
|
191
|
-
help="The path to the file in which to save the dump, if not specified,
|
|
192
|
+
help="The path to the file in which to save the dump, if not specified, "
|
|
193
|
+
"output to the console.",
|
|
192
194
|
default=sys.stdout,
|
|
193
195
|
)
|
|
194
196
|
|
|
@@ -526,7 +528,8 @@ def burn_efuse(esp, efuses, args):
|
|
|
526
528
|
print("Ignore incompatible eFuse settings.")
|
|
527
529
|
else:
|
|
528
530
|
raise esptool.FatalError(
|
|
529
|
-
"Incompatible eFuse settings detected, abort.
|
|
531
|
+
"Incompatible eFuse settings detected, abort. "
|
|
532
|
+
"(use --force flag to skip it)."
|
|
530
533
|
)
|
|
531
534
|
|
|
532
535
|
if not efuses.burn_all(check_batch_mode=True):
|
|
@@ -137,7 +137,9 @@ class CSVFuseTable(list):
|
|
|
137
137
|
|
|
138
138
|
def print_error(p, n, state):
|
|
139
139
|
raise InputError(
|
|
140
|
-
f"Field at {p.field_name}, {p.efuse_block}, {p.bit_start},
|
|
140
|
+
f"Field at {p.field_name}, {p.efuse_block}, {p.bit_start}, "
|
|
141
|
+
f"{p.bit_count} {state} {n.field_name}, {n.efuse_block}, "
|
|
142
|
+
f"{n.bit_start}, {n.bit_count}"
|
|
141
143
|
)
|
|
142
144
|
|
|
143
145
|
for p in self:
|
|
@@ -238,7 +240,8 @@ class FuseDefinition(object):
|
|
|
238
240
|
if self.bit_start + self.bit_count > max_bits:
|
|
239
241
|
raise ValidationError(
|
|
240
242
|
self,
|
|
241
|
-
f"The field is outside the boundaries(max_bits = {max_bits})
|
|
243
|
+
f"The field is outside the boundaries (max_bits = {max_bits}) "
|
|
244
|
+
f"of the {self.efuse_block} block",
|
|
242
245
|
)
|
|
243
246
|
|
|
244
247
|
def get_bit_count(self, check_define=True):
|
|
@@ -229,6 +229,7 @@ def burn_key(esp, efuses, args):
|
|
|
229
229
|
raise esptool.FatalError("Unknown block name - %s" % (block_name))
|
|
230
230
|
num_bytes = efuse.bit_len // 8
|
|
231
231
|
data = datafile.read()
|
|
232
|
+
datafile.close()
|
|
232
233
|
revers_msg = None
|
|
233
234
|
if block_name in ("flash_encryption", "secure_boot_v1"):
|
|
234
235
|
revers_msg = "\tReversing the byte order"
|
|
@@ -207,7 +207,11 @@ def burn_key(esp, efuses, args, digest=None):
|
|
|
207
207
|
|
|
208
208
|
print("Burn keys to blocks:")
|
|
209
209
|
for datafile, keypurpose in zip(datafile_list, keypurpose_list):
|
|
210
|
-
|
|
210
|
+
if isinstance(datafile, bytes):
|
|
211
|
+
data = datafile
|
|
212
|
+
else:
|
|
213
|
+
data = datafile.read()
|
|
214
|
+
datafile.close()
|
|
211
215
|
|
|
212
216
|
if keypurpose == "XTS_AES_128_KEY_DERIVED_FROM_128_EFUSE_BITS":
|
|
213
217
|
efuse = efuses["BLOCK_KEY0_LOW_128"]
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
6
6
|
|
|
7
7
|
import os
|
|
8
|
-
from typing import List
|
|
9
8
|
|
|
10
9
|
import yaml
|
|
11
10
|
|
|
@@ -116,7 +115,7 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
116
115
|
self.EFUSES = []
|
|
117
116
|
self.KEYBLOCKS = []
|
|
118
117
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
119
|
-
self.CALC:
|
|
118
|
+
self.CALC: list = []
|
|
120
119
|
|
|
121
120
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
122
121
|
dir_name, file_name = os.path.split(dir_name)
|
|
@@ -13,7 +13,6 @@ from ..mem_definition_base import (
|
|
|
13
13
|
EfuseFieldsBase,
|
|
14
14
|
EfuseRegistersBase,
|
|
15
15
|
)
|
|
16
|
-
from typing import List
|
|
17
16
|
|
|
18
17
|
|
|
19
18
|
class EfuseDefineRegisters(EfuseRegistersBase):
|
|
@@ -116,7 +115,7 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
116
115
|
self.EFUSES = []
|
|
117
116
|
self.KEYBLOCKS = []
|
|
118
117
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
119
|
-
self.CALC:
|
|
118
|
+
self.CALC: list = []
|
|
120
119
|
|
|
121
120
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
122
121
|
dir_name, file_name = os.path.split(dir_name)
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
from collections import Counter, namedtuple
|
|
8
8
|
import esptool
|
|
9
|
-
from typing import Optional, List
|
|
10
9
|
|
|
11
10
|
from .csv_table_parser import CSVFuseTable
|
|
12
11
|
|
|
@@ -23,7 +22,7 @@ class EfuseRegistersBase(object):
|
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
class EfuseBlocksBase(object):
|
|
26
|
-
BLOCKS:
|
|
25
|
+
BLOCKS: list | None = None
|
|
27
26
|
NamedtupleBlock = namedtuple(
|
|
28
27
|
"NamedtupleBlock",
|
|
29
28
|
"name alias id rd_addr wr_addr write_disable_bit "
|
|
@@ -53,10 +52,10 @@ class Field:
|
|
|
53
52
|
word = None
|
|
54
53
|
pos = None
|
|
55
54
|
bit_len = 0
|
|
56
|
-
alt_names:
|
|
55
|
+
alt_names: list[str] = []
|
|
57
56
|
type = ""
|
|
58
57
|
write_disable_bit = None
|
|
59
|
-
read_disable_bit = None
|
|
58
|
+
read_disable_bit: list[int] | None = None
|
|
60
59
|
category = "config"
|
|
61
60
|
class_type = ""
|
|
62
61
|
description = ""
|
|
@@ -65,7 +64,7 @@ class Field:
|
|
|
65
64
|
|
|
66
65
|
class EfuseFieldsBase(object):
|
|
67
66
|
def __init__(self, e_desc, extend_efuse_table_file) -> None:
|
|
68
|
-
self.ALL_EFUSES:
|
|
67
|
+
self.ALL_EFUSES: list = []
|
|
69
68
|
|
|
70
69
|
def set_category_and_class_type(efuse, name):
|
|
71
70
|
def includes(name, names):
|