esptool 5.1.dev1__tar.gz → 5.2.0__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.0}/PKG-INFO +5 -3
- {esptool-5.1.dev1 → esptool-5.2.0}/README.md +1 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esp_rfc2217_server/__init__.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/esp_rfc2217_server/esp_port_manager.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.0}/esp_rfc2217_server/redirector.py +3 -4
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/__init__.py +7 -6
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/cli_util.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/base_fields.py +23 -18
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/base_operations.py +27 -22
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/csv_table_parser.py +3 -5
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/emulate_efuse_controller_base.py +97 -57
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32/emulate_efuse_controller.py +22 -16
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32/fields.py +9 -11
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32/mem_definition.py +25 -21
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32/operations.py +3 -2
- esptool-5.2.0/espefuse/efuse/esp32c2/emulate_efuse_controller.py +113 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c2/fields.py +6 -7
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c2/mem_definition.py +3 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c2/operations.py +8 -6
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c3/fields.py +5 -6
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c3/mem_definition.py +14 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c3/operations.py +5 -3
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c5/fields.py +8 -16
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c5/mem_definition.py +38 -30
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c6/fields.py +8 -9
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c6/mem_definition.py +14 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c61/fields.py +7 -8
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c61/mem_definition.py +3 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c61/operations.py +4 -2
- esptool-5.2.0/espefuse/efuse/esp32e22/__init__.py +5 -0
- esptool-5.2.0/espefuse/efuse/esp32e22/emulate_efuse_controller.py +97 -0
- esptool-5.2.0/espefuse/efuse/esp32e22/fields.py +437 -0
- {esptool-5.1.dev1/espefuse/efuse/esp32p4 → esptool-5.2.0/espefuse/efuse/esp32e22}/mem_definition.py +9 -18
- esptool-5.2.0/espefuse/efuse/esp32e22/operations.py +295 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h2/fields.py +10 -11
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h2/mem_definition.py +14 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h2/operations.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h21/fields.py +11 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h21/mem_definition.py +14 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1/espefuse/efuse/esp32p4 → esptool-5.2.0/espefuse/efuse/esp32h4}/fields.py +34 -31
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h4/mem_definition.py +14 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +18 -13
- esptool-5.2.0/espefuse/efuse/esp32p4/fields.py +549 -0
- esptool-5.2.0/espefuse/efuse/esp32p4/mem_definition.py +188 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +17 -12
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s2/fields.py +9 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s2/mem_definition.py +14 -10
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +16 -11
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s3/fields.py +10 -11
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s3/mem_definition.py +26 -20
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s3/operations.py +4 -2
- esptool-5.2.0/espefuse/efuse/esp32s31/__init__.py +5 -0
- esptool-5.2.0/espefuse/efuse/esp32s31/emulate_efuse_controller.py +97 -0
- {esptool-5.1.dev1/espefuse/efuse/esp32h4 → esptool-5.2.0/espefuse/efuse/esp32s31}/fields.py +16 -24
- esptool-5.2.0/espefuse/efuse/esp32s31/mem_definition.py +160 -0
- esptool-5.2.0/espefuse/efuse/esp32s31/operations.py +297 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/mem_definition_base.py +101 -51
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/util.py +3 -3
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32c2.yaml +5 -2
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32c5.yaml +46 -46
- esptool-5.2.0/espefuse/efuse_defs/esp32e22.yaml +78 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32h2.yaml +3 -2
- esptool-5.2.0/espefuse/efuse_defs/esp32p4_v3.0.yaml +174 -0
- esptool-5.2.0/espefuse/efuse_defs/esp32s31.yaml +122 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_interface.py +18 -9
- {esptool-5.1.dev1 → esptool-5.2.0}/espsecure/__init__.py +62 -23
- {esptool-5.1.dev1 → esptool-5.2.0}/espsecure/esp_hsm_sign/__init__.py +5 -3
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/__init__.py +60 -51
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/bin_image.py +53 -33
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/cli_util.py +212 -6
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/cmds.py +525 -188
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/loader.py +67 -69
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/logger.py +8 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/reset.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/__init__.py +4 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32.py +16 -8
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32c2.py +37 -27
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32c3.py +14 -3
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32c5.py +22 -5
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32c6.py +23 -6
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32c61.py +13 -4
- esptool-5.2.0/esptool/targets/esp32e22.py +260 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32h4.py +34 -13
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32p4.py +98 -7
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32s2.py +4 -2
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32s3.py +4 -2
- esptool-5.2.0/esptool/targets/esp32s31.py +220 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp8266.py +2 -2
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/stub_flasher/1/README.md +1 -1
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32c2.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32c3.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32c6.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32c61.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32h2.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32p4-rev1.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32s2.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp32s3.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/1/esp8266.json +8 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/stub_flasher/2/README.md +1 -1
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32c2.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32c3.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32c5.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32c6.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32c61.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32h2.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32h4.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32p4-rev1.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32p4.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32s2.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp32s3.json +8 -0
- esptool-5.2.0/esptool/targets/stub_flasher/2/esp8266.json +8 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/uf2_writer.py +1 -1
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/util.py +24 -21
- {esptool-5.1.dev1 → esptool-5.2.0/esptool.egg-info}/PKG-INFO +5 -3
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool.egg-info/SOURCES.txt +18 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool.egg-info/requires.txt +2 -2
- {esptool-5.1.dev1 → esptool-5.2.0}/pyproject.toml +9 -6
- esptool-5.1.dev1/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -139
- 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/targets/stub_flasher/2/esp32.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32c2.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32c3.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32c5.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32c6.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32c61.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32h2.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32p4.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32s2.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp32s3.json +0 -5
- esptool-5.1.dev1/esptool/targets/stub_flasher/2/esp8266.json +0 -5
- {esptool-5.1.dev1 → esptool-5.2.0}/LICENSE +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/MANIFEST.in +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esp_rfc2217_server/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esp_rfc2217_server.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c5/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c6/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c6/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32c61/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h21/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h21/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h4/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32h4/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32p4/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32p4/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s2/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s2/operations.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse/esp32s3/__init__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32c61.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32h21.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32h4.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32p4.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse/efuse_defs/esp32s3.yaml +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espefuse.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espsecure/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espsecure/esp_hsm_sign/exceptions.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/espsecure.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/__main__.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/config.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32h2.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/esp32h21.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool.egg-info/entry_points.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool.egg-info/top_level.txt +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/esptool.py +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/setup.cfg +0 -0
- {esptool-5.1.dev1 → esptool-5.2.0}/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.0
|
|
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+
|
|
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.11
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.12
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
26
|
Requires-Python: >=3.10
|
|
26
27
|
Description-Content-Type: text/markdown
|
|
27
28
|
License-File: LICENSE
|
|
@@ -31,7 +32,7 @@ Requires-Dist: pyserial>=3.3
|
|
|
31
32
|
Requires-Dist: reedsolo<1.8,>=1.5.3
|
|
32
33
|
Requires-Dist: PyYAML>=5.1
|
|
33
34
|
Requires-Dist: intelhex
|
|
34
|
-
Requires-Dist: rich_click
|
|
35
|
+
Requires-Dist: rich_click<2
|
|
35
36
|
Requires-Dist: click<9
|
|
36
37
|
Provides-Extra: dev
|
|
37
38
|
Requires-Dist: pyelftools; extra == "dev"
|
|
@@ -44,7 +45,7 @@ Requires-Dist: czespressif; extra == "dev"
|
|
|
44
45
|
Provides-Extra: hsm
|
|
45
46
|
Requires-Dist: python-pkcs11; extra == "hsm"
|
|
46
47
|
Provides-Extra: docs
|
|
47
|
-
Requires-Dist: esp-docs~=1
|
|
48
|
+
Requires-Dist: esp-docs~=2.1; extra == "docs"
|
|
48
49
|
Requires-Dist: sphinx-tabs; extra == "docs"
|
|
49
50
|
Dynamic: license-file
|
|
50
51
|
|
|
@@ -53,6 +54,7 @@ Dynamic: license-file
|
|
|
53
54
|
A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
|
|
54
55
|
|
|
55
56
|
[](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
|
|
57
|
+
[](https://results.pre-commit.ci/latest/github/espressif/esptool/master)
|
|
56
58
|
|
|
57
59
|
## Documentation
|
|
58
60
|
|
|
@@ -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,10 +85,10 @@ 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
|
-
write_disable_bit: int |
|
|
91
|
+
write_disable_bit: int | None
|
|
92
92
|
parent: "EspEfusesBase"
|
|
93
93
|
name: str
|
|
94
94
|
|
|
@@ -182,7 +182,7 @@ class EfuseBlockBase(EfuseProtectBase):
|
|
|
182
182
|
self.rd_addr: int = param.rd_addr
|
|
183
183
|
self.wr_addr: int = param.wr_addr
|
|
184
184
|
self.write_disable_bit: int | None = param.write_disable_bit
|
|
185
|
-
self.read_disable_bit: int | None = param.read_disable_bit
|
|
185
|
+
self.read_disable_bit: int | list[int] | None = param.read_disable_bit
|
|
186
186
|
self.len: int = param.len
|
|
187
187
|
self.key_purpose_name: str | None = param.key_purpose
|
|
188
188
|
bit_block_len: int = self.get_block_len() * 8
|
|
@@ -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,18 +996,18 @@ 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
|
-
for
|
|
997
|
-
block = self.efuses.Blocks.get(
|
|
1002
|
+
for block_tuple in self.efuses.Blocks.BLOCKS:
|
|
1003
|
+
block = self.efuses.Blocks.get(block_tuple)
|
|
998
1004
|
if block.name == efuse_name and block.key_purpose is not None:
|
|
999
1005
|
if not self.efuses[block.key_purpose].need_rd_protect(
|
|
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}")
|