esptool 4.9.dev8__tar.gz → 4.9.1__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.dev8/esptool.egg-info → esptool-4.9.1}/PKG-INFO +1 -1
- esptool-4.9.1/espefuse/efuse_defs/esp32c61.yaml +105 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/__init__.py +15 -5
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/bin_image.py +104 -39
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/cmds.py +78 -82
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/loader.py +204 -75
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32.py +1 -4
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c2.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c3.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c5.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c5beta3.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c6.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c61.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32h2.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32h21.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32h2beta1.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32h2beta2.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32h4.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32p4.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32s2.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32s3.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32s3beta2.py +0 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/1/README.md +1 -1
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c2.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c3.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c5beta3.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c6.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c61.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32c6beta.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32h2.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32h2beta1.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32h2beta2.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32s2.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32s3.json +8 -0
- esptool-4.9.1/esptool/targets/stub_flasher/1/esp32s3beta2.json +8 -0
- {esptool-4.9.dev8 → esptool-4.9.1/esptool.egg-info}/PKG-INFO +1 -1
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool.egg-info/top_level.txt +2 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/pyproject.toml +1 -1
- esptool-4.9.dev8/espefuse/efuse_defs/esp32c61.yaml +0 -95
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c2.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c3.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c5.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c6.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c61.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32h2.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32p4.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32s2.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32s3.json +0 -8
- esptool-4.9.dev8/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -8
- {esptool-4.9.dev8 → esptool-4.9.1}/LICENSE +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/MANIFEST.in +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/README.md +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esp_rfc2217_server/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esp_rfc2217_server/__main__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esp_rfc2217_server/esp_port_manager.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esp_rfc2217_server/redirector.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esp_rfc2217_server.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/__main__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/base_fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/base_operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/csv_table_parser.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c2/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c2/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c2/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c3/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c3/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c3/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5beta3/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5beta3/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5beta3/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c5beta3/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c6/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c6/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c6/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c6/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c61/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c61/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c61/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32c61/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h21/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h21/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h21/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h21/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2beta1/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2beta1/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h2beta1/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h4/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h4/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h4/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32h4/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32p4/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32p4/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32p4/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32p4/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s2/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s2/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s2/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s2/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3beta2/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3beta2/fields.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/esp32s3beta2/operations.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/mem_definition_base.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse/util.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32c2.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32c5.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32c5beta3.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32h2.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32h21.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32h4.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32p4.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse/efuse_defs/esp32s3.yaml +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espefuse.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espsecure/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espsecure/__main__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espsecure/esp_hsm_sign/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espsecure/esp_hsm_sign/exceptions.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/espsecure.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/__main__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/config.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/reset.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/__init__.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp32c6beta.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/esp8266.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/README.md +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/uf2_writer.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool/util.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool.egg-info/SOURCES.txt +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool.egg-info/requires.txt +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/esptool.py +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/setup.cfg +0 -0
- {esptool-4.9.dev8 → esptool-4.9.1}/setup.py +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
VER_NO: d435ade68d90ef96b0522478b2d8ba75
|
|
2
|
+
EFUSES:
|
|
3
|
+
WR_DIS : {show: y, blk : 0, word: 0, pos : 0, len : 32, start : 0, type : 'uint:32', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Disable programming of individual eFuses, rloc: EFUSE_RD_WR_DIS0_REG, bloc: 'B0,B1,B2,B3'}
|
|
4
|
+
RD_DIS : {show: y, blk : 0, word: 1, pos : 0, len : 7, start : 32, type : 'uint:7', wr_dis : 0, rd_dis: null, alt : '', dict : '', desc: Disable reading from BlOCK4-10, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[6:0]', bloc: 'B4[6:0]'}
|
|
5
|
+
DIS_ICACHE : {show: y, blk : 0, word: 1, pos : 7, len : 1, start : 39, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether cache is disabled. 1: Disabled 0: Enabled.', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[7]', bloc: 'B4[7]'}
|
|
6
|
+
DIS_USB_JTAG : {show: y, blk : 0, word: 1, pos : 8, len : 1, start : 40, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the function of usb switch to jtag is disabled or enabled. 1: disabled 0: enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[8]', bloc: 'B5[0]'}
|
|
7
|
+
DIS_USB_SERIAL_JTAG : {show: n, blk : 0, word: 1, pos : 9, len : 1, start : 41, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether USB-Serial-JTAG is disabled or enabled. 1: disabled 0: enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[9]', bloc: 'B5[1]'}
|
|
8
|
+
DIS_FORCE_DOWNLOAD : {show: y, blk : 0, word: 1, pos: 10, len : 1, start : 42, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the function that forces chip into download mode is disabled or enabled. 1: disabled 0: enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[10]', bloc: 'B5[2]'}
|
|
9
|
+
SPI_DOWNLOAD_MSPI_DIS : {show: y, blk : 0, word: 1, pos: 11, len : 1, start : 43, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether SPI0 controller during boot_mode_download is disabled or enabled. 1: disabled 0: enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[11]', bloc: 'B5[3]'}
|
|
10
|
+
JTAG_SEL_ENABLE : {show: y, blk : 0, word: 1, pos: 12, len : 1, start : 44, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the selection between usb_to_jtag and pad_to_jtag through strapping gpio15 when both EFUSE_DIS_PAD_JTAG and EFUSE_DIS_USB_JTAG are equal to 0 is enabled or disabled. 1: enabled 0: disabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[12]', bloc: 'B5[4]'}
|
|
11
|
+
DIS_PAD_JTAG : {show: y, blk : 0, word: 1, pos: 13, len : 1, start : 45, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether JTAG is disabled in the hard way(permanently). 1: disabled 0: enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[13]', bloc: 'B5[5]'}
|
|
12
|
+
DIS_DOWNLOAD_MANUAL_ENCRYPT : {show: y, blk : 0, word: 1, pos: 14, len : 1, start : 46, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether flash encrypt function is disabled or enabled(except in SPI boot mode). 1: disabled 0: enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[14]', bloc: 'B5[6]'}
|
|
13
|
+
USB_DREFH : {show: n, blk : 0, word: 1, pos: 15, len : 2, start : 47, type : 'uint:2', wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: Represents the single-end input threshold vrefh of USB_SERIAL_JTAG PHY; 1.76 V to 2 V with step of 80 mV, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[16:15]', bloc: 'B5[7],B6[0]'}
|
|
14
|
+
USB_DREFL : {show: n, blk : 0, word: 1, pos: 17, len : 2, start : 49, type : 'uint:2', wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: Represents the single-end input threshold vrefl of USB_SERIAL_JTAG PHY; 1.76 V to 2 V with step of 80 mV, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[18:17]', bloc: 'B6[2:1]'}
|
|
15
|
+
USB_EXCHG_PINS : {show: y, blk : 0, word: 1, pos: 19, len : 1, start : 51, type : bool, wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the D+ and D- pins of USB_SERIAL_JTAG PHY is exchanged. 1: exchanged 0: not exchanged', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[19]', bloc: 'B6[3]'}
|
|
16
|
+
VDD_SPI_AS_GPIO : {show: y, blk : 0, word: 1, pos: 20, len : 1, start : 52, type : bool, wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: 'Represents whether vdd spi pin is functioned as gpio. 1: functioned 0: not functioned', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[20]', bloc: 'B6[4]'}
|
|
17
|
+
WDT_DELAY_SEL : {show: y, blk : 0, word: 1, pos: 21, len : 2, start : 53, type : 'uint:2', wr_dis : 3, rd_dis: null, alt : '', dict : '', desc: lp wdt timeout threshold at startup = initial timeout value * (2 ^ (EFUSE_WDT_DELAY_SEL + 1)), rloc: 'EFUSE_RD_REPEAT_DATA0_REG[22:21]', bloc: 'B6[6:5]'}
|
|
18
|
+
SPI_BOOT_CRYPT_CNT : {show: y, blk : 0, word: 1, pos: 23, len : 3, start : 55, type : 'uint:3', wr_dis : 4, rd_dis: null, alt : '', dict: '{0: "Disable", 1: "Enable", 3: "Disable", 7: "Enable"}', desc: Enables flash encryption when 1 or 3 bits are set and disables otherwise, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[25:23]', bloc: 'B6[7],B7[1:0]'}
|
|
19
|
+
SECURE_BOOT_KEY_REVOKE0 : {show: y, blk : 0, word: 1, pos: 26, len : 1, start : 58, type : bool, wr_dis : 5, rd_dis: null, alt : '', dict : '', desc: Revoke 1st secure boot key, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[26]', bloc: 'B7[2]'}
|
|
20
|
+
SECURE_BOOT_KEY_REVOKE1 : {show: y, blk : 0, word: 1, pos: 27, len : 1, start : 59, type : bool, wr_dis : 6, rd_dis: null, alt : '', dict : '', desc: Revoke 2nd secure boot key, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[27]', bloc: 'B7[3]'}
|
|
21
|
+
SECURE_BOOT_KEY_REVOKE2 : {show: y, blk : 0, word: 1, pos: 28, len : 1, start : 60, type : bool, wr_dis : 7, rd_dis: null, alt : '', dict : '', desc: Revoke 3rd secure boot key, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[28]', bloc: 'B7[4]'}
|
|
22
|
+
RESERVE_0_61 : {show: n, blk : 0, word: 1, pos: 29, len : 3, start : 61, type : 'uint:3', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[31:29]', bloc: 'B7[7:5]'}
|
|
23
|
+
KEY_PURPOSE_0 : {show: y, blk : 0, word: 2, pos : 0, len : 4, start : 64, type : 'uint:4', wr_dis : 8, rd_dis: null, alt : KEY0_PURPOSE, dict : '', desc: Represents the purpose of Key0, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[3:0]', bloc: 'B8[3:0]'}
|
|
24
|
+
KEY_PURPOSE_1 : {show: y, blk : 0, word: 2, pos : 4, len : 4, start : 68, type : 'uint:4', wr_dis : 9, rd_dis: null, alt : KEY1_PURPOSE, dict : '', desc: Represents the purpose of Key1, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[7:4]', bloc: 'B8[7:4]'}
|
|
25
|
+
KEY_PURPOSE_2 : {show: y, blk : 0, word: 2, pos : 8, len : 4, start : 72, type : 'uint:4', wr_dis : 10, rd_dis: null, alt : KEY2_PURPOSE, dict : '', desc: Represents the purpose of Key2, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[11:8]', bloc: 'B9[3:0]'}
|
|
26
|
+
KEY_PURPOSE_3 : {show: y, blk : 0, word: 2, pos: 12, len : 4, start : 76, type : 'uint:4', wr_dis : 11, rd_dis: null, alt : KEY3_PURPOSE, dict : '', desc: Represents the purpose of Key3, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[15:12]', bloc: 'B9[7:4]'}
|
|
27
|
+
KEY_PURPOSE_4 : {show: y, blk : 0, word: 2, pos: 16, len : 4, start : 80, type : 'uint:4', wr_dis : 12, rd_dis: null, alt : KEY4_PURPOSE, dict : '', desc: Represents the purpose of Key4, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[19:16]', bloc: 'B10[3:0]'}
|
|
28
|
+
KEY_PURPOSE_5 : {show: y, blk : 0, word: 2, pos: 20, len : 4, start : 84, type : 'uint:4', wr_dis : 13, rd_dis: null, alt : KEY5_PURPOSE, dict : '', desc: Represents the purpose of Key5, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[23:20]', bloc: 'B10[7:4]'}
|
|
29
|
+
SEC_DPA_LEVEL : {show: y, blk : 0, word: 2, pos: 24, len : 2, start : 88, type : 'uint:2', wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: Represents the spa secure level by configuring the clock random divide mode, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[25:24]', bloc: 'B11[1:0]'}
|
|
30
|
+
SECURE_BOOT_EN : {show: y, blk : 0, word: 2, pos: 26, len : 1, start : 90, type : bool, wr_dis : 15, rd_dis: null, alt : '', dict : '', desc: 'Represents whether secure boot is enabled or disabled. 1. Enable 0: Disable', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[26]', bloc: 'B11[2]'}
|
|
31
|
+
SECURE_BOOT_AGGRESSIVE_REVOKE : {show: y, blk : 0, word: 2, pos: 27, len : 1, start : 91, type : bool, wr_dis : 16, rd_dis: null, alt : '', dict : '', desc: 'Represents whether revoking aggressive secure boot is enabled or disabled. 1. Enable 0: Disable', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[27]', bloc: 'B11[3]'}
|
|
32
|
+
FLASH_TPUW : {show: y, blk : 0, word: 2, pos: 28, len : 4, start : 92, type : 'uint:4', wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: Represents the flash waiting time after power-up; in unit of ms. When the value less than 15; the waiting time is programmed value. Otherwise; the waiting time is 2 times the programmed value, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[31:28]', bloc: 'B11[7:4]'}
|
|
33
|
+
DIS_DOWNLOAD_MODE : {show: y, blk : 0, word: 3, pos : 0, len : 1, start : 96, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether Download mode is disable or enable. 1. Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[0]', bloc: 'B12[0]'}
|
|
34
|
+
DIS_DIRECT_BOOT : {show: y, blk : 0, word: 3, pos : 1, len : 1, start : 97, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether direct boot mode is disabled or enabled. 1. Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[1]', bloc: 'B12[1]'}
|
|
35
|
+
DIS_USB_SERIAL_JTAG_ROM_PRINT : {show: y, blk : 0, word: 3, pos : 2, len : 1, start : 98, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether print from USB-Serial-JTAG is disabled or enabled. 1. Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[2]', bloc: 'B12[2]'}
|
|
36
|
+
DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE : {show: y, blk : 0, word: 3, pos : 3, len : 1, start : 99, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the USB-Serial-JTAG download function is disabled or enabled. 1: Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[3]', bloc: 'B12[3]'}
|
|
37
|
+
ENABLE_SECURITY_DOWNLOAD : {show: y, blk : 0, word: 3, pos : 4, len : 1, start: 100, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether security download is enabled or disabled. 1: Enable 0: Disable', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[4]', bloc: 'B12[4]'}
|
|
38
|
+
UART_PRINT_CONTROL : {show: y, blk : 0, word: 3, pos : 5, len : 2, start: 101, type : 'uint:2', wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: Represents the types of UART printing, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[6:5]', bloc: 'B12[6:5]'}
|
|
39
|
+
FORCE_SEND_RESUME : {show: y, blk : 0, word: 3, pos : 7, len : 1, start: 103, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: Represents whether ROM code is forced to send a resume command during SPI boot, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[7]', bloc: 'B12[7]'}
|
|
40
|
+
SECURE_VERSION : {show: y, blk : 0, word: 3, pos : 8, len : 16, start: 104, type : 'uint:16', wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: Represents the version used by ESP-IDF anti-rollback feature, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[23:8]', bloc: 'B13,B14'}
|
|
41
|
+
SECURE_BOOT_DISABLE_FAST_WAKE : {show: y, blk : 0, word: 3, pos: 24, len : 1, start: 120, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: Represents whether FAST_VERIFY_ON_WAKE is disable or enable when Secure Boot is enable, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[24]', bloc: 'B15[0]'}
|
|
42
|
+
HYS_EN_PAD : {show: y, blk : 0, word: 3, pos: 25, len : 1, start: 121, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: Set bits to enable hysteresis function of PAD0~27, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[25]', bloc: 'B15[1]'}
|
|
43
|
+
XTS_DPA_CLK_ENABLE : {show: y, blk : 0, word: 3, pos: 26, len : 1, start: 122, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents whether xts-aes anti-dpa attack clock is enabled. 1. Enable. 0: Disable.', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[26]', bloc: 'B15[2]'}
|
|
44
|
+
XTS_DPA_PSEUDO_LEVEL : {show: y, blk : 0, word: 3, pos: 27, len : 2, start: 123, type : 'uint:2', wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents the pseudo round level of xts-aes anti-dpa attack. 3: High. 2: Moderate 1. Low 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[28:27]', bloc: 'B15[4:3]'}
|
|
45
|
+
DIS_WIFI6 : {show: y, blk : 0, word: 3, pos: 29, len : 1, start: 125, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the WIFI6 feature is enable or disabled. 1: WIFI6 is disable; 0: WIFI6 is enabled', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[29]', bloc: 'B15[5]'}
|
|
46
|
+
ECDSA_DISABLE_P192 : {show: y, blk : 0, word: 3, pos: 30, len : 1, start: 126, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents whether to disable P192 curve in ECDSA. 1: Disabled. 0: Not disabled', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[30]', bloc: 'B15[6]'}
|
|
47
|
+
ECC_FORCE_CONST_TIME : {show: y, blk : 0, word: 3, pos: 31, len : 1, start: 127, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents whether to force ecc to use const-time calculation mode. 1: Enable. 0: Disable', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[31]', bloc: 'B15[7]'}
|
|
48
|
+
BOOTLOADER_ANTI_ROLLBACK_SECURE_VERSION: {show: y, blk : 0, word: 4, pos : 0, len : 4, start: 128, type : 'uint:4', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Represents the anti-rollback secure version of the 2nd stage bootloader used by the ROM bootloader, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[3:0]', bloc: 'B16[3:0]'}
|
|
49
|
+
BOOTLOADER_ANTI_ROLLBACK_EN : {show: y, blk : 0, word: 4, pos : 4, len : 1, start: 132, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the ani-rollback check for the 2nd stage bootloader is enabled.1: Enabled0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[4]', bloc: 'B16[4]'}
|
|
50
|
+
BOOTLOADER_ANTI_ROLLBACK_UPDATE_IN_ROM : {show: y, blk : 0, word: 4, pos : 5, len : 1, start: 133, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the ani-rollback SECURE_VERSION will be updated from the ROM bootloader.1: Enable0: Disable', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[5]', bloc: 'B16[5]'}
|
|
51
|
+
RECOVERY_BOOTLOADER_FLASH_SECTOR : {show: y, blk : 0, word: 4, pos : 6, len : 12, start: 134, type : 'uint:12', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Represents the starting flash sector (flash sector size is 0x1000) of the recovery bootloader used by the ROM bootloader If the primary bootloader fails. 0 and 0xFFF - this feature is disabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[17:6]', bloc: 'B16[7:6],B17,B18[1:0]'}
|
|
52
|
+
RESERVE_0_146 : {show: n, blk : 0, word: 4, pos: 18, len : 14, start: 146, type : 'uint:14', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[31:18]', bloc: 'B18[7:2],B19'}
|
|
53
|
+
REPEAT_DATA4 : {show: y, blk : 0, word: 5, pos : 0, len : 24, start: 160, type : 'uint:24', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved, rloc: 'EFUSE_RD_REPEAT_DATA4_REG[23:0]', bloc: 'B20,B21,B22'}
|
|
54
|
+
RESERVE_0_184 : {show: n, blk : 0, word: 5, pos: 24, len : 8, start: 184, type : 'uint:8', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA4_REG[31:24]', bloc: B23}
|
|
55
|
+
MAC : {show: y, blk : 1, word: 0, pos : 0, len : 48, start : 0, type : 'bytes:6', wr_dis : 20, rd_dis: null, alt : MAC_FACTORY, dict : '', desc: MAC address, rloc: EFUSE_RD_MAC_SYS0_REG, bloc: 'B0,B1,B2,B3,B4,B5'}
|
|
56
|
+
RESERVE_1_48 : {show: n, blk : 1, word: 1, pos: 16, len : 16, start : 48, type : 'uint:16', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_MAC_SYS1_REG[31:16]', bloc: 'B6,B7'}
|
|
57
|
+
WAFER_VERSION_MINOR : {show: y, blk : 1, word: 2, pos : 0, len : 4, start : 64, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Minor chip version, rloc: 'EFUSE_RD_MAC_SYS2_REG[3:0]', bloc: 'B8[3:0]'}
|
|
58
|
+
WAFER_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos : 4, len : 2, start : 68, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Major chip version, rloc: 'EFUSE_RD_MAC_SYS2_REG[5:4]', bloc: 'B8[5:4]'}
|
|
59
|
+
DISABLE_WAFER_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos : 6, len : 1, start : 70, type : bool, wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Disables check of wafer version major, rloc: 'EFUSE_RD_MAC_SYS2_REG[6]', bloc: 'B8[6]'}
|
|
60
|
+
DISABLE_BLK_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos : 7, len : 1, start : 71, type : bool, wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Disables check of blk version major, rloc: 'EFUSE_RD_MAC_SYS2_REG[7]', bloc: 'B8[7]'}
|
|
61
|
+
BLK_VERSION_MINOR : {show: y, blk : 1, word: 2, pos : 8, len : 3, start : 72, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: BLK_VERSION_MINOR of BLOCK2, rloc: 'EFUSE_RD_MAC_SYS2_REG[10:8]', bloc: 'B9[2:0]'}
|
|
62
|
+
BLK_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos: 11, len : 2, start : 75, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: BLK_VERSION_MAJOR of BLOCK2, rloc: 'EFUSE_RD_MAC_SYS2_REG[12:11]', bloc: 'B9[4:3]'}
|
|
63
|
+
FLASH_CAP : {show: y, blk : 1, word: 2, pos: 13, len : 3, start : 77, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Flash capacity, rloc: 'EFUSE_RD_MAC_SYS2_REG[15:13]', bloc: 'B9[7:5]'}
|
|
64
|
+
FLASH_VENDOR : {show: y, blk : 1, word: 2, pos: 16, len : 3, start : 80, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Flash vendor, rloc: 'EFUSE_RD_MAC_SYS2_REG[18:16]', bloc: 'B10[2:0]'}
|
|
65
|
+
PSRAM_CAP : {show: y, blk : 1, word: 2, pos: 19, len : 3, start : 83, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: PSRAM capacity, rloc: 'EFUSE_RD_MAC_SYS2_REG[21:19]', bloc: 'B10[5:3]'}
|
|
66
|
+
PSRAM_VENDOR : {show: y, blk : 1, word: 2, pos: 22, len : 2, start : 86, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: PSRAM vendor, rloc: 'EFUSE_RD_MAC_SYS2_REG[23:22]', bloc: 'B10[7:6]'}
|
|
67
|
+
TEMP : {show: y, blk : 1, word: 2, pos: 24, len : 2, start : 88, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Temperature, rloc: 'EFUSE_RD_MAC_SYS2_REG[25:24]', bloc: 'B11[1:0]'}
|
|
68
|
+
PKG_VERSION : {show: y, blk : 1, word: 2, pos: 26, len : 3, start : 90, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Package version, rloc: 'EFUSE_RD_MAC_SYS2_REG[28:26]', bloc: 'B11[4:2]'}
|
|
69
|
+
ACTIVE_HP_DBIAS : {show: y, blk : 1, word: 2, pos: 29, len : 4, start : 93, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Active HP DBIAS of fixed voltage, rloc: 'EFUSE_RD_MAC_SYS2_REG[31:29]', bloc: 'B11[7:5],B12[0]'}
|
|
70
|
+
ACTIVE_LP_DBIAS : {show: y, blk : 1, word: 3, pos : 1, len : 4, start : 97, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Active LP DBIAS of fixed voltage, rloc: 'EFUSE_RD_MAC_SYS3_REG[4:1]', bloc: 'B12[4:1]'}
|
|
71
|
+
LSLP_HP_DBG : {show: y, blk : 1, word: 3, pos : 5, len : 2, start: 101, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: LSLP HP DBG of fixed voltage, rloc: 'EFUSE_RD_MAC_SYS3_REG[6:5]', bloc: 'B12[6:5]'}
|
|
72
|
+
LSLP_HP_DBIAS : {show: y, blk : 1, word: 3, pos : 7, len : 4, start: 103, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: LSLP HP DBIAS of fixed voltage, rloc: 'EFUSE_RD_MAC_SYS3_REG[10:7]', bloc: 'B12[7],B13[2:0]'}
|
|
73
|
+
DSLP_LP_DBG : {show: y, blk : 1, word: 3, pos: 11, len : 4, start: 107, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: DSLP LP DBG of fixed voltage, rloc: 'EFUSE_RD_MAC_SYS3_REG[14:11]', bloc: 'B13[6:3]'}
|
|
74
|
+
DSLP_LP_DBIAS : {show: y, blk : 1, word: 3, pos: 15, len : 5, start: 111, type : 'uint:5', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: DSLP LP DBIAS of fixed voltage, rloc: 'EFUSE_RD_MAC_SYS3_REG[19:15]', bloc: 'B13[7],B14[3:0]'}
|
|
75
|
+
LP_HP_DBIAS_VOL_GAP : {show: y, blk : 1, word: 3, pos: 20, len : 5, start: 116, type : 'uint:5', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: DBIAS gap between LP and HP, rloc: 'EFUSE_RD_MAC_SYS3_REG[24:20]', bloc: 'B14[7:4],B15[0]'}
|
|
76
|
+
RESERVED_1_121 : {show: n, blk : 1, word: 3, pos: 25, len : 7, start: 121, type : 'uint:7', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: reserved, rloc: 'EFUSE_RD_MAC_SYS3_REG[31:25]', bloc: 'B15[7:1]'}
|
|
77
|
+
SYS_DATA_PART0_1 : {show: n, blk : 1, word: 4, pos : 0, len : 32, start: 128, type : 'uint:32', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Represents the first 14-bit of zeroth part of system data, rloc: EFUSE_RD_MAC_SYS4_REG, bloc: 'B16,B17,B18,B19'}
|
|
78
|
+
SYS_DATA_PART0_2 : {show: n, blk : 1, word: 5, pos : 0, len : 32, start: 160, type : 'uint:32', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Represents the second 32-bit of zeroth part of system data, rloc: EFUSE_RD_MAC_SYS5_REG, bloc: 'B20,B21,B22,B23'}
|
|
79
|
+
OPTIONAL_UNIQUE_ID : {show: y, blk : 2, word: 0, pos : 0, len: 128, start : 0, type: 'bytes:16', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Optional unique 128-bit ID, rloc: EFUSE_RD_SYS_PART1_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15'}
|
|
80
|
+
TEMPERATURE_SENSOR : {show: y, blk : 2, word: 4, pos : 0, len : 9, start: 128, type : 'uint:9', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Temperature calibration data, rloc: 'EFUSE_RD_SYS_PART1_DATA4_REG[8:0]', bloc: 'B16,B17[0]'}
|
|
81
|
+
OCODE : {show: y, blk : 2, word: 4, pos : 9, len : 8, start: 137, type : 'uint:8', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: ADC OCode calibration, rloc: 'EFUSE_RD_SYS_PART1_DATA4_REG[16:9]', bloc: 'B17[7:1],B18[0]'}
|
|
82
|
+
ADC1_AVE_INIT_CODE_ATTEN0 : {show: y, blk : 2, word: 4, pos: 17, len : 10, start: 145, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Average initcode of ADC1 atten0, rloc: 'EFUSE_RD_SYS_PART1_DATA4_REG[26:17]', bloc: 'B18[7:1],B19[2:0]'}
|
|
83
|
+
ADC1_AVE_INIT_CODE_ATTEN1 : {show: y, blk : 2, word: 4, pos: 27, len : 10, start: 155, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Average initcode of ADC1 atten1, rloc: 'EFUSE_RD_SYS_PART1_DATA4_REG[31:27]', bloc: 'B19[7:3],B20[4:0]'}
|
|
84
|
+
ADC1_AVE_INIT_CODE_ATTEN2 : {show: y, blk : 2, word: 5, pos : 5, len : 10, start: 165, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Average initcode of ADC1 atten2, rloc: 'EFUSE_RD_SYS_PART1_DATA5_REG[14:5]', bloc: 'B20[7:5],B21[6:0]'}
|
|
85
|
+
ADC1_AVE_INIT_CODE_ATTEN3 : {show: y, blk : 2, word: 5, pos: 15, len : 10, start: 175, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Average initcode of ADC1 atten3, rloc: 'EFUSE_RD_SYS_PART1_DATA5_REG[24:15]', bloc: 'B21[7],B22,B23[0]'}
|
|
86
|
+
ADC1_HI_DOUT_ATTEN0 : {show: y, blk : 2, word: 5, pos: 25, len : 10, start: 185, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: HI_DOUT of ADC1 atten0, rloc: 'EFUSE_RD_SYS_PART1_DATA5_REG[31:25]', bloc: 'B23[7:1],B24[2:0]'}
|
|
87
|
+
ADC1_HI_DOUT_ATTEN1 : {show: y, blk : 2, word: 6, pos : 3, len : 10, start: 195, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: HI_DOUT of ADC1 atten1, rloc: 'EFUSE_RD_SYS_PART1_DATA6_REG[12:3]', bloc: 'B24[7:3],B25[4:0]'}
|
|
88
|
+
ADC1_HI_DOUT_ATTEN2 : {show: y, blk : 2, word: 6, pos: 13, len : 10, start: 205, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: HI_DOUT of ADC1 atten2, rloc: 'EFUSE_RD_SYS_PART1_DATA6_REG[22:13]', bloc: 'B25[7:5],B26[6:0]'}
|
|
89
|
+
ADC1_HI_DOUT_ATTEN3 : {show: y, blk : 2, word: 6, pos: 23, len : 10, start: 215, type : 'uint:10', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: HI_DOUT of ADC1 atten3, rloc: 'EFUSE_RD_SYS_PART1_DATA6_REG[31:23]', bloc: 'B26[7],B27,B28[0]'}
|
|
90
|
+
ADC1_CH0_ATTEN0_INITCODE_DIFF : {show: y, blk : 2, word: 7, pos : 1, len : 4, start: 225, type : 'uint:4', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Gap between ADC1 CH0 and average initcode, rloc: 'EFUSE_RD_SYS_PART1_DATA7_REG[4:1]', bloc: 'B28[4:1]'}
|
|
91
|
+
ADC1_CH1_ATTEN0_INITCODE_DIFF : {show: y, blk : 2, word: 7, pos : 5, len : 4, start: 229, type : 'uint:4', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Gap between ADC1 CH1 and average initcode, rloc: 'EFUSE_RD_SYS_PART1_DATA7_REG[8:5]', bloc: 'B28[7:5],B29[0]'}
|
|
92
|
+
ADC1_CH2_ATTEN0_INITCODE_DIFF : {show: y, blk : 2, word: 7, pos : 9, len : 4, start: 233, type : 'uint:4', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Gap between ADC1 CH2 and average initcode, rloc: 'EFUSE_RD_SYS_PART1_DATA7_REG[12:9]', bloc: 'B29[4:1]'}
|
|
93
|
+
ADC1_CH3_ATTEN0_INITCODE_DIFF : {show: y, blk : 2, word: 7, pos: 13, len : 4, start: 237, type : 'uint:4', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: Gap between ADC1 CH3 and average initcode, rloc: 'EFUSE_RD_SYS_PART1_DATA7_REG[16:13]', bloc: 'B29[7:5],B30[0]'}
|
|
94
|
+
RESERVED_2_241 : {show: n, blk : 2, word: 7, pos: 17, len : 15, start: 241, type : 'uint:15', wr_dis : 21, rd_dis: null, alt : '', dict : '', desc: reserved, rloc: 'EFUSE_RD_SYS_PART1_DATA7_REG[31:17]', bloc: 'B30[7:1],B31'}
|
|
95
|
+
BLOCK_USR_DATA : {show: y, blk : 3, word: 0, pos : 0, len: 192, start : 0, type: 'bytes:24', wr_dis : 22, rd_dis: null, alt : USER_DATA, dict : '', desc: User data, rloc: EFUSE_RD_USR_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23'}
|
|
96
|
+
RESERVED_3_192 : {show: n, blk : 3, word: 6, pos : 0, len : 8, start: 192, type : 'uint:8', wr_dis : 22, rd_dis: null, alt : '', dict : '', desc: reserved, rloc: 'EFUSE_RD_USR_DATA6_REG[7:0]', bloc: B24}
|
|
97
|
+
CUSTOM_MAC : {show: y, blk : 3, word: 6, pos : 8, len : 48, start: 200, type : 'bytes:6', wr_dis : 22, rd_dis: null, alt: MAC_CUSTOM USER_DATA_MAC_CUSTOM, dict : '', desc: Custom MAC, rloc: 'EFUSE_RD_USR_DATA6_REG[31:8]', bloc: 'B25,B26,B27,B28,B29,B30'}
|
|
98
|
+
RESERVED_3_248 : {show: n, blk : 3, word: 7, pos: 24, len : 8, start: 248, type : 'uint:8', wr_dis : 22, rd_dis: null, alt : '', dict : '', desc: reserved, rloc: 'EFUSE_RD_USR_DATA7_REG[31:24]', bloc: B31}
|
|
99
|
+
BLOCK_KEY0 : {show: y, blk : 4, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 23, rd_dis : 0, alt : KEY0, dict : '', desc: Key0 or user data, rloc: EFUSE_RD_KEY0_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
100
|
+
BLOCK_KEY1 : {show: y, blk : 5, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 24, rd_dis : 1, alt : KEY1, dict : '', desc: Key1 or user data, rloc: EFUSE_RD_KEY1_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
101
|
+
BLOCK_KEY2 : {show: y, blk : 6, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 25, rd_dis : 2, alt : KEY2, dict : '', desc: Key2 or user data, rloc: EFUSE_RD_KEY2_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
102
|
+
BLOCK_KEY3 : {show: y, blk : 7, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 26, rd_dis : 3, alt : KEY3, dict : '', desc: Key3 or user data, rloc: EFUSE_RD_KEY3_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
103
|
+
BLOCK_KEY4 : {show: y, blk : 8, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 27, rd_dis : 4, alt : KEY4, dict : '', desc: Key4 or user data, rloc: EFUSE_RD_KEY4_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
104
|
+
BLOCK_KEY5 : {show: y, blk : 9, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 28, rd_dis : 5, alt : KEY5, dict : '', desc: Key5 or user data, rloc: EFUSE_RD_KEY5_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
105
|
+
BLOCK_SYS_DATA2 : {show: y, blk: 10, word: 0, pos : 0, len: 256, start : 0, type: 'bytes:32', wr_dis : 29, rd_dis : 6, alt : SYS_DATA_PART2, dict : '', desc: System data part 2 (reserved), rloc: EFUSE_RD_SYS_PART2_DATA0_REG, bloc: 'B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31'}
|
|
@@ -29,7 +29,7 @@ __all__ = [
|
|
|
29
29
|
"write_mem",
|
|
30
30
|
]
|
|
31
31
|
|
|
32
|
-
__version__ = "4.9.
|
|
32
|
+
__version__ = "4.9.1"
|
|
33
33
|
|
|
34
34
|
import argparse
|
|
35
35
|
import inspect
|
|
@@ -846,6 +846,12 @@ def main(argv=None, esp=None):
|
|
|
846
846
|
"setting --no-stub"
|
|
847
847
|
)
|
|
848
848
|
args.no_stub = True
|
|
849
|
+
elif esp.CHIP_NAME == "ESP32-C3" and esp.get_secure_boot_enabled():
|
|
850
|
+
print(
|
|
851
|
+
"WARNING: Stub flasher is not supported on ESP32-C3 "
|
|
852
|
+
"with Secure Boot, setting --no-stub"
|
|
853
|
+
)
|
|
854
|
+
args.no_stub = True
|
|
849
855
|
elif not esp.IS_STUB and esp.stub_is_disabled:
|
|
850
856
|
print(
|
|
851
857
|
"WARNING: Stub loader has been disabled for compatibility, "
|
|
@@ -980,7 +986,7 @@ def main(argv=None, esp=None):
|
|
|
980
986
|
if not esp.secure_download_mode:
|
|
981
987
|
try:
|
|
982
988
|
flash_id = esp.flash_id()
|
|
983
|
-
if flash_id in (0xFFFFFF, 0x000000):
|
|
989
|
+
if flash_id in (0xFFFFFF, 0x000000, 0xFFFF3F):
|
|
984
990
|
print(
|
|
985
991
|
"WARNING: Failed to communicate with the flash chip, "
|
|
986
992
|
"read/write operations will fail. "
|
|
@@ -1291,7 +1297,12 @@ class AutoHex2BinAction(argparse.Action):
|
|
|
1291
1297
|
with open(value, "rb") as f:
|
|
1292
1298
|
# if hex file was detected replace hex file with converted temp bin
|
|
1293
1299
|
# otherwise keep the original file
|
|
1294
|
-
|
|
1300
|
+
converted = intel_hex_to_bin(f)
|
|
1301
|
+
if len(converted) != 1:
|
|
1302
|
+
print(
|
|
1303
|
+
"Note: Detected merged IntelHex file, processing only first file"
|
|
1304
|
+
)
|
|
1305
|
+
value = converted[0][1].name
|
|
1295
1306
|
except IOError as e:
|
|
1296
1307
|
raise argparse.ArgumentError(self, e)
|
|
1297
1308
|
setattr(namespace, self.dest, value)
|
|
@@ -1326,8 +1337,7 @@ class AddrFilenamePairAction(argparse.Action):
|
|
|
1326
1337
|
"and the binary filename to write there",
|
|
1327
1338
|
)
|
|
1328
1339
|
# check for intel hex files and convert them to bin
|
|
1329
|
-
|
|
1330
|
-
pairs.append((address, argfile))
|
|
1340
|
+
pairs.extend(intel_hex_to_bin(argfile, address))
|
|
1331
1341
|
|
|
1332
1342
|
# Sort the addresses and check for overlapping
|
|
1333
1343
|
end = 0
|
|
@@ -11,7 +11,7 @@ import os
|
|
|
11
11
|
import re
|
|
12
12
|
import struct
|
|
13
13
|
import tempfile
|
|
14
|
-
from typing import IO, Optional, Tuple
|
|
14
|
+
from typing import IO, List, Optional, Tuple, Type
|
|
15
15
|
|
|
16
16
|
from intelhex import HexRecordError, IntelHex
|
|
17
17
|
|
|
@@ -45,9 +45,46 @@ def align_file_position(f, size):
|
|
|
45
45
|
f.seek(align, 1)
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
def
|
|
49
|
-
"""
|
|
50
|
-
|
|
48
|
+
def _find_subsequences(addresses: List[int]) -> List[Tuple[int, int]]:
|
|
49
|
+
"""Find continuous subsequences in a list of addresses"""
|
|
50
|
+
if not addresses:
|
|
51
|
+
return []
|
|
52
|
+
|
|
53
|
+
sorted_seq = sorted(addresses)
|
|
54
|
+
|
|
55
|
+
subsequences = []
|
|
56
|
+
start = sorted_seq[0]
|
|
57
|
+
|
|
58
|
+
for prev, num in zip(sorted_seq, sorted_seq[1:]):
|
|
59
|
+
if num != prev + 1:
|
|
60
|
+
# Found a gap, save the current subsequence
|
|
61
|
+
subsequences.append((start, prev))
|
|
62
|
+
start = num
|
|
63
|
+
|
|
64
|
+
# Add the last subsequence
|
|
65
|
+
subsequences.append((start, sorted_seq[-1]))
|
|
66
|
+
|
|
67
|
+
return subsequences
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _split_intel_hex_file(ih: IntelHex) -> List[Tuple[int, IO[bytes]]]:
|
|
71
|
+
"""Split an IntelHex file into multiple temporary binary files based on the gaps
|
|
72
|
+
in the addresses"""
|
|
73
|
+
subsequences = _find_subsequences(ih.addresses())
|
|
74
|
+
bins: List[Tuple[int, IO[bytes]]] = []
|
|
75
|
+
for start, end in subsequences:
|
|
76
|
+
bin = tempfile.NamedTemporaryFile(suffix=".bin", delete=False)
|
|
77
|
+
ih.tobinfile(bin, start=start, end=end)
|
|
78
|
+
bin.seek(0) # make sure the file is at the beginning
|
|
79
|
+
bins.append((start, bin))
|
|
80
|
+
return bins
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def intel_hex_to_bin(
|
|
84
|
+
file: IO[bytes], start_addr: Optional[int] = None
|
|
85
|
+
) -> List[Tuple[Optional[int], IO[bytes]]]:
|
|
86
|
+
"""Convert IntelHex file to list of temp binary files
|
|
87
|
+
If not hex file return input file otherwise"""
|
|
51
88
|
INTEL_HEX_MAGIC = b":"
|
|
52
89
|
magic = file.read(1)
|
|
53
90
|
file.seek(0)
|
|
@@ -56,14 +93,12 @@ def intel_hex_to_bin(file: IO[bytes], start_addr: Optional[int] = None) -> IO[by
|
|
|
56
93
|
ih = IntelHex()
|
|
57
94
|
ih.loadhex(file.name)
|
|
58
95
|
file.close()
|
|
59
|
-
|
|
60
|
-
ih.tobinfile(bin, start=start_addr)
|
|
61
|
-
return bin
|
|
96
|
+
return _split_intel_hex_file(ih) # type: ignore
|
|
62
97
|
else:
|
|
63
|
-
return file
|
|
98
|
+
return [(start_addr, file)]
|
|
64
99
|
except (HexRecordError, UnicodeDecodeError):
|
|
65
100
|
# file started with HEX magic but the rest was not according to the standard
|
|
66
|
-
return file
|
|
101
|
+
return [(start_addr, file)]
|
|
67
102
|
|
|
68
103
|
|
|
69
104
|
def LoadFirmwareImage(chip, image_file):
|
|
@@ -622,7 +657,7 @@ class ESP32FirmwareImage(BaseFirmwareImage):
|
|
|
622
657
|
can be placed in the normal image (just @ MMU page size padded offsets).
|
|
623
658
|
"""
|
|
624
659
|
|
|
625
|
-
ROM_LOADER = ESP32ROM
|
|
660
|
+
ROM_LOADER: Type[ESPLoader] = ESP32ROM
|
|
626
661
|
|
|
627
662
|
# ROM bootloader will read the wp_pin field if SPI flash
|
|
628
663
|
# pins are remapped via flash. IDF actually enables QIO only
|
|
@@ -1150,7 +1185,7 @@ ESP32C2ROM.BOOTLOADER_IMAGE = ESP32C2FirmwareImage
|
|
|
1150
1185
|
class ESP32C6FirmwareImage(ESP32FirmwareImage):
|
|
1151
1186
|
"""ESP32C6 Firmware Image almost exactly the same as ESP32FirmwareImage"""
|
|
1152
1187
|
|
|
1153
|
-
ROM_LOADER = ESP32C6ROM
|
|
1188
|
+
ROM_LOADER: Type[ESPLoader] = ESP32C6ROM
|
|
1154
1189
|
MMU_PAGE_SIZE_CONF = (8192, 16384, 32768, 65536)
|
|
1155
1190
|
|
|
1156
1191
|
|
|
@@ -1184,7 +1219,7 @@ class ESP32C5BETA3FirmwareImage(ESP32C6FirmwareImage):
|
|
|
1184
1219
|
ESP32C5BETA3ROM.BOOTLOADER_IMAGE = ESP32C5BETA3FirmwareImage
|
|
1185
1220
|
|
|
1186
1221
|
|
|
1187
|
-
class ESP32H4FirmwareImage(
|
|
1222
|
+
class ESP32H4FirmwareImage(ESP32C6FirmwareImage):
|
|
1188
1223
|
"""ESP32H4 Firmware Image almost exactly the same as ESP32FirmwareImage"""
|
|
1189
1224
|
|
|
1190
1225
|
ROM_LOADER = ESP32H4ROM
|
|
@@ -1221,14 +1256,6 @@ ESP32H21ROM.BOOTLOADER_IMAGE = ESP32H21FirmwareImage
|
|
|
1221
1256
|
|
|
1222
1257
|
|
|
1223
1258
|
class ELFFile(object):
|
|
1224
|
-
SEC_TYPE_PROGBITS = 0x01
|
|
1225
|
-
SEC_TYPE_STRTAB = 0x03
|
|
1226
|
-
SEC_TYPE_NOBITS = 0x08 # e.g. .bss section
|
|
1227
|
-
SEC_TYPE_INITARRAY = 0x0E
|
|
1228
|
-
SEC_TYPE_FINIARRAY = 0x0F
|
|
1229
|
-
|
|
1230
|
-
PROG_SEC_TYPES = (SEC_TYPE_PROGBITS, SEC_TYPE_INITARRAY, SEC_TYPE_FINIARRAY)
|
|
1231
|
-
|
|
1232
1259
|
LEN_SEC_HEADER = 0x28
|
|
1233
1260
|
|
|
1234
1261
|
SEG_TYPE_LOAD = 0x01
|
|
@@ -1289,6 +1316,22 @@ class ELFFile(object):
|
|
|
1289
1316
|
self._read_segments(f, _phoff, _phnum, shstrndx)
|
|
1290
1317
|
|
|
1291
1318
|
def _read_sections(self, f, section_header_offs, section_header_count, shstrndx):
|
|
1319
|
+
SEC_TYPE_PROGBITS = 0x01
|
|
1320
|
+
SEC_TYPE_STRTAB = 0x03
|
|
1321
|
+
SEC_TYPE_NOBITS = 0x08 # e.g. .bss section
|
|
1322
|
+
SEC_TYPE_INITARRAY = 0x0E
|
|
1323
|
+
SEC_TYPE_FINIARRAY = 0x0F
|
|
1324
|
+
SEC_TYPE_PREINITARRAY = 0x10
|
|
1325
|
+
|
|
1326
|
+
PROG_SEC_TYPES = (
|
|
1327
|
+
SEC_TYPE_PROGBITS,
|
|
1328
|
+
SEC_TYPE_INITARRAY,
|
|
1329
|
+
SEC_TYPE_FINIARRAY,
|
|
1330
|
+
SEC_TYPE_PREINITARRAY,
|
|
1331
|
+
)
|
|
1332
|
+
|
|
1333
|
+
KNOWN_SEC_TYPES = PROG_SEC_TYPES + (SEC_TYPE_NOBITS, SEC_TYPE_STRTAB)
|
|
1334
|
+
|
|
1292
1335
|
f.seek(section_header_offs)
|
|
1293
1336
|
len_bytes = section_header_count * self.LEN_SEC_HEADER
|
|
1294
1337
|
section_header = f.read(len_bytes)
|
|
@@ -1307,22 +1350,23 @@ class ELFFile(object):
|
|
|
1307
1350
|
section_header_offsets = range(0, len(section_header), self.LEN_SEC_HEADER)
|
|
1308
1351
|
|
|
1309
1352
|
def read_section_header(offs):
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1353
|
+
(
|
|
1354
|
+
name_offs,
|
|
1355
|
+
sec_type,
|
|
1356
|
+
_flags,
|
|
1357
|
+
lma,
|
|
1358
|
+
sec_offs,
|
|
1359
|
+
size,
|
|
1360
|
+
) = struct.unpack_from("<LLLLLL", section_header[offs:])
|
|
1313
1361
|
return (name_offs, sec_type, lma, size, sec_offs)
|
|
1314
1362
|
|
|
1315
|
-
all_sections = [read_section_header(offs) for offs in section_header_offsets]
|
|
1316
|
-
prog_sections = [s for s in all_sections if s[1] in ELFFile.PROG_SEC_TYPES]
|
|
1317
|
-
nobits_secitons = [s for s in all_sections if s[1] == ELFFile.SEC_TYPE_NOBITS]
|
|
1318
|
-
|
|
1319
1363
|
# search for the string table section
|
|
1320
1364
|
if (shstrndx * self.LEN_SEC_HEADER) not in section_header_offsets:
|
|
1321
1365
|
raise FatalError("ELF file has no STRTAB section at shstrndx %d" % shstrndx)
|
|
1322
1366
|
_, sec_type, _, sec_size, sec_offs = read_section_header(
|
|
1323
1367
|
shstrndx * self.LEN_SEC_HEADER
|
|
1324
1368
|
)
|
|
1325
|
-
if sec_type !=
|
|
1369
|
+
if sec_type != SEC_TYPE_STRTAB:
|
|
1326
1370
|
print(
|
|
1327
1371
|
"WARNING: ELF file has incorrect STRTAB section type 0x%02x" % sec_type
|
|
1328
1372
|
)
|
|
@@ -1340,17 +1384,38 @@ class ELFFile(object):
|
|
|
1340
1384
|
f.seek(offs)
|
|
1341
1385
|
return f.read(size)
|
|
1342
1386
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
if lma
|
|
1353
|
-
|
|
1387
|
+
all_sections = [read_section_header(offs) for offs in section_header_offsets]
|
|
1388
|
+
|
|
1389
|
+
self.sections = []
|
|
1390
|
+
self.nobits_sections = []
|
|
1391
|
+
# Process all sections and raise an error if an unknown section type is found
|
|
1392
|
+
for section in all_sections:
|
|
1393
|
+
n_offs, sec_type, lma, size, offs = section
|
|
1394
|
+
|
|
1395
|
+
# Skip sections with lma == 0 or size == 0
|
|
1396
|
+
if lma == 0 or size == 0:
|
|
1397
|
+
continue
|
|
1398
|
+
|
|
1399
|
+
if sec_type not in KNOWN_SEC_TYPES:
|
|
1400
|
+
print(f"WARNING: Unknown section type {sec_type:#04x} in ELF file")
|
|
1401
|
+
continue
|
|
1402
|
+
|
|
1403
|
+
if sec_type in PROG_SEC_TYPES:
|
|
1404
|
+
self.sections.append(
|
|
1405
|
+
ELFSection(
|
|
1406
|
+
lookup_string(n_offs),
|
|
1407
|
+
lma,
|
|
1408
|
+
read_data(offs, size),
|
|
1409
|
+
)
|
|
1410
|
+
)
|
|
1411
|
+
elif sec_type == SEC_TYPE_NOBITS:
|
|
1412
|
+
self.nobits_sections.append(
|
|
1413
|
+
ELFSection(
|
|
1414
|
+
lookup_string(n_offs),
|
|
1415
|
+
lma,
|
|
1416
|
+
b"",
|
|
1417
|
+
)
|
|
1418
|
+
)
|
|
1354
1419
|
|
|
1355
1420
|
def _read_segments(self, f, segment_header_offs, segment_header_count, shstrndx):
|
|
1356
1421
|
f.seek(segment_header_offs)
|