esptool 4.8.dev5__tar.gz → 4.9.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {esptool-4.8.dev5/esptool.egg-info → esptool-4.9.dev1}/PKG-INFO +19 -2
- esptool-4.9.dev1/esp_rfc2217_server/__init__.py +124 -0
- esptool-4.9.dev1/esp_rfc2217_server/__main__.py +9 -0
- esptool-4.9.dev1/esp_rfc2217_server/esp_port_manager.py +101 -0
- esptool-4.9.dev1/esp_rfc2217_server/redirector.py +89 -0
- esptool-4.9.dev1/esp_rfc2217_server.py +56 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/base_fields.py +36 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c2/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c2/mem_definition.py +0 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c2/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c3/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c3/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c3/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5/fields.py +5 -5
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5/operations.py +5 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5beta3/fields.py +5 -5
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5beta3/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c6/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c6/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c6/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c61/fields.py +5 -5
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c61/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c61/operations.py +5 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2beta1/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2beta1/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32p4/fields.py +5 -6
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32p4/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32p4/operations.py +5 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s2/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s2/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s2/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3/fields.py +14 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3/mem_definition.py +10 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3/operations.py +2 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3beta2/fields.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3beta2/operations.py +2 -4
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/mem_definition_base.py +14 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32c5.yaml +59 -24
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32c5beta3.yaml +41 -22
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32c61.yaml +38 -12
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32p4.yaml +112 -69
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32s3.yaml +5 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/__init__.py +100 -5
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/cmds.py +73 -23
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/config.py +2 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/loader.py +25 -9
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/reset.py +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32.py +3 -7
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c2.py +12 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c3.py +19 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c5.py +13 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c5beta3.py +12 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c6.py +2 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c61.py +39 -2
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32h2.py +6 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32p4.py +70 -6
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32s2.py +29 -32
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32s3.py +34 -36
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/README.md +1 -1
- esptool-4.9.dev1/esptool/targets/stub_flasher/1/esp32c61.json +8 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1/esptool.egg-info}/PKG-INFO +19 -2
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool.egg-info/SOURCES.txt +5 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool.egg-info/requires.txt +1 -1
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool.egg-info/top_level.txt +2 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/pyproject.toml +4 -3
- {esptool-4.8.dev5 → esptool-4.9.dev1}/setup.py +1 -1
- esptool-4.8.dev5/esp_rfc2217_server.py +0 -311
- {esptool-4.8.dev5 → esptool-4.9.dev1}/LICENSE +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/MANIFEST.in +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/README.md +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/__main__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/base_operations.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/csv_table_parser.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32/fields.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32/mem_definition.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32/operations.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5beta3/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c5beta3/operations.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c6/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c61/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2beta1/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32p4/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s2/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3beta2/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse/util.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32c2.yaml +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32h2.yaml +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espefuse.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espsecure/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espsecure/__main__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espsecure/esp_hsm_sign/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espsecure/esp_hsm_sign/exceptions.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/espsecure.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/__main__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/bin_image.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/__init__.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32c6beta.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32h2beta1.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32h2beta2.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp32s3beta2.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/esp8266.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32c5.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32p4.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/README.md +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/uf2_writer.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool/util.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/esptool.py +0 -0
- {esptool-4.8.dev5 → esptool-4.9.dev1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: esptool
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.9.dev1
|
|
4
4
|
Summary: A serial utility to communicate & flash code to Espressif chips.
|
|
5
5
|
Author: Fredrik Ahlberg (themadinventor), Angus Gratton (projectgus), Espressif Systems
|
|
6
6
|
License: GPLv2+
|
|
@@ -24,11 +24,28 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.10
|
|
25
25
|
Classifier: Programming Language :: Python :: 3.11
|
|
26
26
|
Classifier: Programming Language :: Python :: 3.12
|
|
27
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
28
|
Requires-Python: >=3.7
|
|
28
29
|
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: bitstring!=4.2.0,>=3.1.6
|
|
32
|
+
Requires-Dist: cryptography>=2.1.4
|
|
33
|
+
Requires-Dist: ecdsa>=0.16.0
|
|
34
|
+
Requires-Dist: pyserial>=3.3
|
|
35
|
+
Requires-Dist: reedsolo<1.8,>=1.5.3
|
|
36
|
+
Requires-Dist: PyYAML>=5.1
|
|
37
|
+
Requires-Dist: intelhex
|
|
38
|
+
Requires-Dist: argcomplete>=3; sys_platform != "win32"
|
|
29
39
|
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: pyelftools; extra == "dev"
|
|
41
|
+
Requires-Dist: coverage~=6.0; extra == "dev"
|
|
42
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest; extra == "dev"
|
|
44
|
+
Requires-Dist: pytest-rerunfailures; extra == "dev"
|
|
45
|
+
Requires-Dist: requests; extra == "dev"
|
|
46
|
+
Requires-Dist: commitizen; extra == "dev"
|
|
30
47
|
Provides-Extra: hsm
|
|
31
|
-
|
|
48
|
+
Requires-Dist: python-pkcs11; extra == "hsm"
|
|
32
49
|
|
|
33
50
|
# esptool.py
|
|
34
51
|
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2009-2015 Chris Liechti
|
|
2
|
+
# SPDX-FileContributor: 2020-2024 Espressif Systems (Shanghai) CO LTD
|
|
3
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
4
|
+
#
|
|
5
|
+
# Redirect data from a TCP/IP connection to a serial port and vice versa using RFC 2217.
|
|
6
|
+
|
|
7
|
+
###################################################################################
|
|
8
|
+
# redirect data from a TCP/IP connection to a serial port and vice versa
|
|
9
|
+
# using RFC 2217
|
|
10
|
+
#
|
|
11
|
+
# (C) 2009-2015 Chris Liechti <cliechti@gmx.net>
|
|
12
|
+
#
|
|
13
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
14
|
+
|
|
15
|
+
import logging
|
|
16
|
+
import socket
|
|
17
|
+
import sys
|
|
18
|
+
import serial
|
|
19
|
+
|
|
20
|
+
from esp_rfc2217_server.redirector import Redirector
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def main():
|
|
24
|
+
import argparse
|
|
25
|
+
|
|
26
|
+
parser = argparse.ArgumentParser(
|
|
27
|
+
description="RFC 2217 Serial to Network (TCP/IP) redirector.",
|
|
28
|
+
epilog="NOTE: no security measures are implemented. "
|
|
29
|
+
"Anyone can remotely connect to this service over the network.\n"
|
|
30
|
+
"Only one connection at once is supported. "
|
|
31
|
+
"When the connection is terminated it waits for the next connect.",
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
parser.add_argument("SERIALPORT")
|
|
35
|
+
|
|
36
|
+
parser.add_argument(
|
|
37
|
+
"-p",
|
|
38
|
+
"--localport",
|
|
39
|
+
type=int,
|
|
40
|
+
help="local TCP port, default: %(default)s",
|
|
41
|
+
metavar="TCPPORT",
|
|
42
|
+
default=2217,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"-v",
|
|
47
|
+
"--verbose",
|
|
48
|
+
dest="verbosity",
|
|
49
|
+
action="count",
|
|
50
|
+
help="print more diagnostic messages (option can be given multiple times)",
|
|
51
|
+
default=0,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
parser.add_argument(
|
|
55
|
+
"--r0",
|
|
56
|
+
help="Use delays necessary for ESP32 revision 0 chips",
|
|
57
|
+
action="store_true",
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
args = parser.parse_args()
|
|
61
|
+
|
|
62
|
+
if args.verbosity > 3:
|
|
63
|
+
args.verbosity = 3
|
|
64
|
+
level = (logging.WARNING, logging.INFO, logging.DEBUG, logging.NOTSET)[
|
|
65
|
+
args.verbosity
|
|
66
|
+
]
|
|
67
|
+
logging.basicConfig(level=logging.INFO)
|
|
68
|
+
# logging.getLogger('root').setLevel(logging.INFO)
|
|
69
|
+
logging.getLogger("rfc2217").setLevel(level)
|
|
70
|
+
|
|
71
|
+
# connect to serial port
|
|
72
|
+
ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True, exclusive=True)
|
|
73
|
+
ser.timeout = 3 # required so that the reader thread can exit
|
|
74
|
+
# reset control line as no _remote_ "terminal" has been connected yet
|
|
75
|
+
ser.dtr = False
|
|
76
|
+
ser.rts = False
|
|
77
|
+
|
|
78
|
+
logging.info(" RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit")
|
|
79
|
+
|
|
80
|
+
try:
|
|
81
|
+
ser.open()
|
|
82
|
+
except serial.SerialException as e:
|
|
83
|
+
logging.error(" Could not open serial port {}: {}".format(ser.name, e))
|
|
84
|
+
sys.exit(1)
|
|
85
|
+
|
|
86
|
+
logging.info(" Serving serial port: {}".format(ser.name))
|
|
87
|
+
settings = ser.get_settings()
|
|
88
|
+
|
|
89
|
+
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
90
|
+
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
91
|
+
srv.bind(("", args.localport))
|
|
92
|
+
srv.listen(1)
|
|
93
|
+
logging.info(" TCP/IP port: {}".format(args.localport))
|
|
94
|
+
while True:
|
|
95
|
+
try:
|
|
96
|
+
client_socket, addr = srv.accept()
|
|
97
|
+
logging.info("Connected by {}:{}".format(addr[0], addr[1]))
|
|
98
|
+
client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
99
|
+
ser.rts = True
|
|
100
|
+
ser.dtr = True
|
|
101
|
+
# enter network <-> serial loop
|
|
102
|
+
r = Redirector(ser, client_socket, args.verbosity > 0, args.r0)
|
|
103
|
+
try:
|
|
104
|
+
r.shortcircuit()
|
|
105
|
+
finally:
|
|
106
|
+
logging.info("Disconnected")
|
|
107
|
+
r.stop()
|
|
108
|
+
client_socket.close()
|
|
109
|
+
ser.dtr = False
|
|
110
|
+
ser.rts = False
|
|
111
|
+
# Restore port settings (may have been changed by RFC 2217
|
|
112
|
+
# capable client)
|
|
113
|
+
ser.apply_settings(settings)
|
|
114
|
+
except KeyboardInterrupt:
|
|
115
|
+
sys.stdout.write("\n")
|
|
116
|
+
break
|
|
117
|
+
except socket.error as msg:
|
|
118
|
+
logging.error(str(msg))
|
|
119
|
+
|
|
120
|
+
logging.info("--- exit ---")
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
if __name__ == "__main__":
|
|
124
|
+
main()
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
+
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
|
|
6
|
+
import esp_rfc2217_server
|
|
7
|
+
|
|
8
|
+
if __name__ == "__main__":
|
|
9
|
+
esp_rfc2217_server.main()
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
+
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
import os
|
|
6
|
+
import threading
|
|
7
|
+
from esptool.reset import (
|
|
8
|
+
ClassicReset,
|
|
9
|
+
CustomReset,
|
|
10
|
+
DEFAULT_RESET_DELAY,
|
|
11
|
+
HardReset,
|
|
12
|
+
UnixTightReset,
|
|
13
|
+
)
|
|
14
|
+
import serial
|
|
15
|
+
import serial.rfc2217
|
|
16
|
+
from serial.rfc2217 import (
|
|
17
|
+
COM_PORT_OPTION,
|
|
18
|
+
SET_CONTROL,
|
|
19
|
+
SET_CONTROL_DTR_OFF,
|
|
20
|
+
SET_CONTROL_DTR_ON,
|
|
21
|
+
SET_CONTROL_RTS_OFF,
|
|
22
|
+
SET_CONTROL_RTS_ON,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from esptool.config import load_config_file
|
|
26
|
+
|
|
27
|
+
cfg, _ = load_config_file(verbose=True)
|
|
28
|
+
cfg = cfg["esptool"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class EspPortManager(serial.rfc2217.PortManager):
|
|
32
|
+
"""
|
|
33
|
+
The beginning of the reset sequence is detected and the proper reset sequence
|
|
34
|
+
is applied in a thread. The rest of the reset sequence received is just ignored
|
|
35
|
+
and not sent to the serial port.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, serial_port, connection, esp32r0_delay, logger=None):
|
|
39
|
+
self.esp32r0_delay = esp32r0_delay
|
|
40
|
+
self.is_download_mode = False
|
|
41
|
+
super(EspPortManager, self).__init__(serial_port, connection, logger)
|
|
42
|
+
|
|
43
|
+
def _telnet_process_subnegotiation(self, suboption):
|
|
44
|
+
if suboption[0:1] == COM_PORT_OPTION and suboption[1:2] == SET_CONTROL:
|
|
45
|
+
if suboption[2:3] == SET_CONTROL_DTR_OFF:
|
|
46
|
+
self.is_download_mode = False
|
|
47
|
+
self.serial.dtr = False
|
|
48
|
+
return
|
|
49
|
+
elif suboption[2:3] == SET_CONTROL_RTS_OFF and not self.is_download_mode:
|
|
50
|
+
reset_thread = threading.Thread(target=self._hard_reset_thread)
|
|
51
|
+
reset_thread.daemon = True
|
|
52
|
+
reset_thread.name = "hard_reset_thread"
|
|
53
|
+
reset_thread.start()
|
|
54
|
+
return
|
|
55
|
+
elif suboption[2:3] == SET_CONTROL_DTR_ON and not self.is_download_mode:
|
|
56
|
+
self.is_download_mode = True
|
|
57
|
+
reset_thread = threading.Thread(target=self._reset_thread)
|
|
58
|
+
reset_thread.daemon = True
|
|
59
|
+
reset_thread.name = "reset_thread"
|
|
60
|
+
reset_thread.start()
|
|
61
|
+
return
|
|
62
|
+
elif suboption[2:3] in [
|
|
63
|
+
SET_CONTROL_DTR_ON,
|
|
64
|
+
SET_CONTROL_RTS_ON,
|
|
65
|
+
SET_CONTROL_RTS_OFF,
|
|
66
|
+
]:
|
|
67
|
+
return
|
|
68
|
+
# only in cases not handled above do the original implementation in PortManager
|
|
69
|
+
super(EspPortManager, self)._telnet_process_subnegotiation(suboption)
|
|
70
|
+
|
|
71
|
+
def _hard_reset_thread(self):
|
|
72
|
+
"""
|
|
73
|
+
The reset logic used for hard resetting the chip.
|
|
74
|
+
"""
|
|
75
|
+
if self.logger:
|
|
76
|
+
self.logger.info("Activating hard reset in thread")
|
|
77
|
+
cfg_custom_hard_reset_sequence = cfg.get("custom_hard_reset_sequence")
|
|
78
|
+
if cfg_custom_hard_reset_sequence is not None:
|
|
79
|
+
CustomReset(self.serial, cfg_custom_hard_reset_sequence)()
|
|
80
|
+
else:
|
|
81
|
+
HardReset(self.serial)()
|
|
82
|
+
|
|
83
|
+
def _reset_thread(self):
|
|
84
|
+
"""
|
|
85
|
+
The reset logic is used from esptool.py because the RTS and DTR signals
|
|
86
|
+
cannot be retransmitted through RFC 2217 with proper timing.
|
|
87
|
+
"""
|
|
88
|
+
if self.logger:
|
|
89
|
+
self.logger.info("Activating reset in thread")
|
|
90
|
+
|
|
91
|
+
delay = DEFAULT_RESET_DELAY
|
|
92
|
+
if self.esp32r0_delay:
|
|
93
|
+
delay += 0.5
|
|
94
|
+
|
|
95
|
+
cfg_custom_reset_sequence = cfg.get("custom_reset_sequence")
|
|
96
|
+
if cfg_custom_reset_sequence is not None:
|
|
97
|
+
CustomReset(self.serial, cfg_custom_reset_sequence)()
|
|
98
|
+
elif os.name != "nt":
|
|
99
|
+
UnixTightReset(self.serial, delay)()
|
|
100
|
+
else:
|
|
101
|
+
ClassicReset(self.serial, delay)()
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
+
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
import threading
|
|
6
|
+
import time
|
|
7
|
+
import logging
|
|
8
|
+
import socket
|
|
9
|
+
|
|
10
|
+
from esp_rfc2217_server.esp_port_manager import EspPortManager
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Redirector(object):
|
|
14
|
+
def __init__(self, serial_instance, socket, debug=False, esp32r0delay=False):
|
|
15
|
+
self.serial = serial_instance
|
|
16
|
+
self.socket = socket
|
|
17
|
+
self._write_lock = threading.Lock()
|
|
18
|
+
self.rfc2217 = EspPortManager(
|
|
19
|
+
self.serial,
|
|
20
|
+
self,
|
|
21
|
+
esp32r0delay,
|
|
22
|
+
logger=logging.getLogger("rfc2217.server") if debug else None,
|
|
23
|
+
)
|
|
24
|
+
self.log = logging.getLogger("redirector")
|
|
25
|
+
self.force_exit = False
|
|
26
|
+
|
|
27
|
+
def statusline_poller(self):
|
|
28
|
+
self.log.debug("status line poll thread started")
|
|
29
|
+
while self.alive:
|
|
30
|
+
time.sleep(1)
|
|
31
|
+
self.rfc2217.check_modem_lines()
|
|
32
|
+
self.log.debug("status line poll thread terminated")
|
|
33
|
+
|
|
34
|
+
def shortcircuit(self):
|
|
35
|
+
"""connect the serial port to the TCP port by copying everything
|
|
36
|
+
from one side to the other"""
|
|
37
|
+
self.alive = True
|
|
38
|
+
self.thread_read = threading.Thread(target=self.reader)
|
|
39
|
+
self.thread_read.daemon = True
|
|
40
|
+
self.thread_read.name = "serial->socket"
|
|
41
|
+
self.thread_read.start()
|
|
42
|
+
self.thread_poll = threading.Thread(target=self.statusline_poller)
|
|
43
|
+
self.thread_poll.daemon = True
|
|
44
|
+
self.thread_poll.name = "status line poll"
|
|
45
|
+
self.thread_poll.start()
|
|
46
|
+
self.writer()
|
|
47
|
+
|
|
48
|
+
def reader(self):
|
|
49
|
+
"""loop forever and copy serial->socket"""
|
|
50
|
+
self.log.debug("reader thread started")
|
|
51
|
+
while self.alive:
|
|
52
|
+
try:
|
|
53
|
+
data = self.serial.read(self.serial.in_waiting or 1)
|
|
54
|
+
if data:
|
|
55
|
+
# escape outgoing data when needed (Telnet IAC (0xff) character)
|
|
56
|
+
self.write(b"".join(self.rfc2217.escape(data)))
|
|
57
|
+
except socket.error as msg:
|
|
58
|
+
self.log.error("{}".format(msg))
|
|
59
|
+
# probably got disconnected
|
|
60
|
+
break
|
|
61
|
+
self.alive = False
|
|
62
|
+
self.log.debug("reader thread terminated")
|
|
63
|
+
|
|
64
|
+
def write(self, data):
|
|
65
|
+
"""thread safe socket write with no data escaping. used to send telnet stuff"""
|
|
66
|
+
with self._write_lock:
|
|
67
|
+
self.socket.sendall(data)
|
|
68
|
+
|
|
69
|
+
def writer(self):
|
|
70
|
+
"""loop forever and copy socket->serial"""
|
|
71
|
+
while self.alive:
|
|
72
|
+
try:
|
|
73
|
+
data = self.socket.recv(1024)
|
|
74
|
+
if not data:
|
|
75
|
+
break
|
|
76
|
+
self.serial.write(b"".join(self.rfc2217.filter(data)))
|
|
77
|
+
except socket.error as msg:
|
|
78
|
+
self.log.error("{}".format(msg))
|
|
79
|
+
# probably got disconnected
|
|
80
|
+
break
|
|
81
|
+
self.stop()
|
|
82
|
+
|
|
83
|
+
def stop(self):
|
|
84
|
+
"""Stop copying"""
|
|
85
|
+
self.log.debug("stopping")
|
|
86
|
+
if self.alive:
|
|
87
|
+
self.alive = False
|
|
88
|
+
self.thread_read.join()
|
|
89
|
+
self.thread_poll.join()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
#
|
|
3
|
+
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
4
|
+
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
5
|
+
#
|
|
6
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
7
|
+
|
|
8
|
+
# This executable script is a thin wrapper around the main functionality
|
|
9
|
+
# in the esp_rfc2217_server Python package
|
|
10
|
+
|
|
11
|
+
# When updating this script, please also update esptool.py, espefuse.py and espsecure.py
|
|
12
|
+
|
|
13
|
+
###################################################################################
|
|
14
|
+
# Redirect data from a TCP/IP connection to a serial port and vice versa using RFC 2217.
|
|
15
|
+
#
|
|
16
|
+
# This is a modified version of rfc2217_server.py provided by the pyserial package
|
|
17
|
+
# (pythonhosted.org/pyserial/examples.html#single-port-tcp-ip-serial-bridge-rfc-2217).
|
|
18
|
+
# It uses a custom PortManager to properly apply the RTS & DTR signals
|
|
19
|
+
# for resetting ESP chips.
|
|
20
|
+
#
|
|
21
|
+
# Run the following command on the server side to make
|
|
22
|
+
# connection between /dev/ttyUSB1 and TCP port 4000:
|
|
23
|
+
#
|
|
24
|
+
# python esp_rfc2217_server.py -p 4000 /dev/ttyUSB1
|
|
25
|
+
#
|
|
26
|
+
# Esptool can connect to the ESP device through that server as it is
|
|
27
|
+
# demonstrated in the following example:
|
|
28
|
+
#
|
|
29
|
+
# esptool.py --port rfc2217://localhost:4000?ign_set_control flash_id
|
|
30
|
+
#
|
|
31
|
+
|
|
32
|
+
import contextlib
|
|
33
|
+
import os
|
|
34
|
+
import sys
|
|
35
|
+
|
|
36
|
+
if os.name != "nt":
|
|
37
|
+
# Linux/macOS: remove current script directory to avoid importing this file
|
|
38
|
+
# as a module; we want to import the installed esp_rfc2217_server module instead
|
|
39
|
+
with contextlib.suppress(ValueError):
|
|
40
|
+
executable_dir = os.path.dirname(sys.executable)
|
|
41
|
+
sys.path = [
|
|
42
|
+
path
|
|
43
|
+
for path in sys.path
|
|
44
|
+
if not path.endswith(("/bin", "/sbin")) and path != executable_dir
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
# Linux/macOS: delete imported module entry to force Python to load
|
|
48
|
+
# the module from scratch; this enables importing esp_rfc2217_server module in
|
|
49
|
+
# other Python scripts
|
|
50
|
+
with contextlib.suppress(KeyError):
|
|
51
|
+
del sys.modules["esp_rfc2217_server"]
|
|
52
|
+
|
|
53
|
+
import esp_rfc2217_server
|
|
54
|
+
|
|
55
|
+
if __name__ == "__main__":
|
|
56
|
+
esp_rfc2217_server.main()
|
|
@@ -653,6 +653,42 @@ class EspEfusesBase(object):
|
|
|
653
653
|
# Overwrite this function for a specific target if you want to check if a certain eFuse(s) can be burned.
|
|
654
654
|
return False
|
|
655
655
|
|
|
656
|
+
def get_major_chip_version(self):
|
|
657
|
+
try:
|
|
658
|
+
return self["WAFER_VERSION_MAJOR"].get()
|
|
659
|
+
except KeyError:
|
|
660
|
+
return 0
|
|
661
|
+
|
|
662
|
+
def get_minor_chip_version(self):
|
|
663
|
+
try:
|
|
664
|
+
return self["WAFER_VERSION_MINOR"].get()
|
|
665
|
+
except KeyError:
|
|
666
|
+
return 0
|
|
667
|
+
|
|
668
|
+
def get_chip_version(self):
|
|
669
|
+
return self.get_major_chip_version() * 100 + self.get_minor_chip_version()
|
|
670
|
+
|
|
671
|
+
def get_major_block_version(self):
|
|
672
|
+
try:
|
|
673
|
+
return self["BLK_VERSION_MAJOR"].get()
|
|
674
|
+
except KeyError:
|
|
675
|
+
return 0
|
|
676
|
+
|
|
677
|
+
def get_minor_block_version(self):
|
|
678
|
+
try:
|
|
679
|
+
return self["BLK_VERSION_MINOR"].get()
|
|
680
|
+
except KeyError:
|
|
681
|
+
return 0
|
|
682
|
+
|
|
683
|
+
def get_block_version(self):
|
|
684
|
+
return self.get_major_block_version() * 100 + self.get_minor_block_version()
|
|
685
|
+
|
|
686
|
+
def get_pkg_version(self):
|
|
687
|
+
try:
|
|
688
|
+
return self["PKG_VERSION"].get()
|
|
689
|
+
except KeyError:
|
|
690
|
+
return 0
|
|
691
|
+
|
|
656
692
|
|
|
657
693
|
class EfuseFieldBase(EfuseProtectBase):
|
|
658
694
|
def __init__(self, parent, param):
|
|
@@ -102,7 +102,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
102
102
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
103
103
|
]
|
|
104
104
|
else:
|
|
105
|
-
if self
|
|
105
|
+
if self.get_block_version() >= 1:
|
|
106
106
|
self.efuses += [
|
|
107
107
|
EfuseField.convert(self, efuse)
|
|
108
108
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
@@ -97,10 +97,7 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
97
97
|
def __init__(self, extend_efuse_table) -> None:
|
|
98
98
|
# List of efuse fields from TRM the chapter eFuse Controller.
|
|
99
99
|
self.EFUSES = []
|
|
100
|
-
|
|
101
100
|
self.KEYBLOCKS = []
|
|
102
|
-
|
|
103
|
-
# if BLK_VERSION_MINOR is 1, these efuse fields are in BLOCK2
|
|
104
101
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
105
102
|
|
|
106
103
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
@@ -150,9 +150,9 @@ def set_flash_voltage(esp, efuses, args):
|
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
def adc_info(esp, efuses, args):
|
|
153
|
-
print("")
|
|
154
153
|
# fmt: off
|
|
155
|
-
|
|
154
|
+
print("Block version:", efuses.get_block_version())
|
|
155
|
+
if efuses.get_block_version() >= 1:
|
|
156
156
|
print("Temperature Sensor Calibration = {}C".format(efuses["TEMP_CALIB"].get()))
|
|
157
157
|
print("ADC OCode = ", efuses["OCODE"].get())
|
|
158
158
|
print("ADC1:")
|
|
@@ -160,8 +160,6 @@ def adc_info(esp, efuses, args):
|
|
|
160
160
|
print("INIT_CODE_ATTEN3 = ", efuses["ADC1_INIT_CODE_ATTEN3"].get())
|
|
161
161
|
print("CAL_VOL_ATTEN0 = ", efuses["ADC1_CAL_VOL_ATTEN0"].get())
|
|
162
162
|
print("CAL_VOL_ATTEN3 = ", efuses["ADC1_CAL_VOL_ATTEN3"].get())
|
|
163
|
-
else:
|
|
164
|
-
print("BLK_VERSION_MINOR = {}".format(efuses["BLK_VERSION_MINOR"].get_meaning()))
|
|
165
163
|
# fmt: on
|
|
166
164
|
|
|
167
165
|
|
|
@@ -102,7 +102,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
102
102
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
103
103
|
]
|
|
104
104
|
else:
|
|
105
|
-
if self
|
|
105
|
+
if self.get_block_version() >= 100:
|
|
106
106
|
self.efuses += [
|
|
107
107
|
EfuseField.convert(self, efuse)
|
|
108
108
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
@@ -130,12 +130,8 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
130
130
|
def __init__(self, extend_efuse_table) -> None:
|
|
131
131
|
# List of efuse fields from TRM the chapter eFuse Controller.
|
|
132
132
|
self.EFUSES = []
|
|
133
|
-
|
|
134
133
|
self.KEYBLOCKS = []
|
|
135
|
-
|
|
136
|
-
# if BLK_VERSION_MAJOR is 1, these efuse fields are in BLOCK2
|
|
137
134
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
138
|
-
|
|
139
135
|
self.CALC = []
|
|
140
136
|
|
|
141
137
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
@@ -192,9 +192,9 @@ def set_flash_voltage(esp, efuses, args):
|
|
|
192
192
|
|
|
193
193
|
|
|
194
194
|
def adc_info(esp, efuses, args):
|
|
195
|
-
print("")
|
|
196
195
|
# fmt: off
|
|
197
|
-
|
|
196
|
+
print("Block version:", efuses.get_block_version())
|
|
197
|
+
if efuses.get_block_version() >= 100:
|
|
198
198
|
print("Temperature Sensor Calibration = {}C".format(efuses["TEMP_CALIB"].get()))
|
|
199
199
|
print("ADC OCode = ", efuses["OCODE"].get())
|
|
200
200
|
print("ADC1:")
|
|
@@ -206,8 +206,6 @@ def adc_info(esp, efuses, args):
|
|
|
206
206
|
print("CAL_VOL_ATTEN1 = ", efuses["ADC1_CAL_VOL_ATTEN1"].get())
|
|
207
207
|
print("CAL_VOL_ATTEN2 = ", efuses["ADC1_CAL_VOL_ATTEN2"].get())
|
|
208
208
|
print("CAL_VOL_ATTEN3 = ", efuses["ADC1_CAL_VOL_ATTEN3"].get())
|
|
209
|
-
else:
|
|
210
|
-
print("BLK_VERSION_MAJOR = {}".format(efuses["BLK_VERSION_MAJOR"].get_meaning()))
|
|
211
209
|
# fmt: on
|
|
212
210
|
|
|
213
211
|
|
|
@@ -102,11 +102,11 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
102
102
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
103
103
|
]
|
|
104
104
|
else:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
if self.get_block_version() >= 1:
|
|
106
|
+
self.efuses += [
|
|
107
|
+
EfuseField.convert(self, efuse)
|
|
108
|
+
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
109
|
+
]
|
|
110
110
|
self.efuses += [
|
|
111
111
|
EfuseField.convert(self, efuse) for efuse in self.Fields.CALC
|
|
112
112
|
]
|
|
@@ -114,12 +114,8 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
114
114
|
def __init__(self, extend_efuse_table) -> None:
|
|
115
115
|
# List of efuse fields from TRM the chapter eFuse Controller.
|
|
116
116
|
self.EFUSES = []
|
|
117
|
-
|
|
118
117
|
self.KEYBLOCKS = []
|
|
119
|
-
|
|
120
|
-
# if BLK_VERSION_MINOR is 1, these efuse fields are in BLOCK2
|
|
121
118
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
122
|
-
|
|
123
119
|
self.CALC = []
|
|
124
120
|
|
|
125
121
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
@@ -192,7 +192,11 @@ def set_flash_voltage(esp, efuses, args):
|
|
|
192
192
|
|
|
193
193
|
|
|
194
194
|
def adc_info(esp, efuses, args):
|
|
195
|
-
print("
|
|
195
|
+
print("Block version:", efuses.get_block_version())
|
|
196
|
+
if efuses.get_block_version() >= 1:
|
|
197
|
+
for efuse in efuses:
|
|
198
|
+
if efuse.category == "calibration":
|
|
199
|
+
print(f"{efuse.name:<30} = ", efuses[efuse.name].get())
|
|
196
200
|
|
|
197
201
|
|
|
198
202
|
def burn_key(esp, efuses, args, digest=None):
|
|
@@ -102,11 +102,11 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
102
102
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
103
103
|
]
|
|
104
104
|
else:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
if self.get_block_version() >= 1:
|
|
106
|
+
self.efuses += [
|
|
107
|
+
EfuseField.convert(self, efuse)
|
|
108
|
+
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
109
|
+
]
|
|
110
110
|
self.efuses += [
|
|
111
111
|
EfuseField.convert(self, efuse) for efuse in self.Fields.CALC
|
|
112
112
|
]
|
|
@@ -114,12 +114,8 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
114
114
|
def __init__(self, extend_efuse_table) -> None:
|
|
115
115
|
# List of efuse fields from TRM the chapter eFuse Controller.
|
|
116
116
|
self.EFUSES = []
|
|
117
|
-
|
|
118
117
|
self.KEYBLOCKS = []
|
|
119
|
-
|
|
120
|
-
# if BLK_VERSION_MINOR is 1, these efuse fields are in BLOCK2
|
|
121
118
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
122
|
-
|
|
123
119
|
self.CALC = []
|
|
124
120
|
|
|
125
121
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|
|
@@ -102,7 +102,7 @@ class EspEfuses(base_fields.EspEfusesBase):
|
|
|
102
102
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
103
103
|
]
|
|
104
104
|
else:
|
|
105
|
-
if self
|
|
105
|
+
if self.get_block_version() >= 1:
|
|
106
106
|
self.efuses += [
|
|
107
107
|
EfuseField.convert(self, efuse)
|
|
108
108
|
for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
|
|
@@ -114,12 +114,8 @@ class EfuseDefineFields(EfuseFieldsBase):
|
|
|
114
114
|
def __init__(self, extend_efuse_table) -> None:
|
|
115
115
|
# List of efuse fields from TRM the chapter eFuse Controller.
|
|
116
116
|
self.EFUSES = []
|
|
117
|
-
|
|
118
117
|
self.KEYBLOCKS = []
|
|
119
|
-
|
|
120
|
-
# if BLK_VERSION_MINOR is 1, these efuse fields are in BLOCK2
|
|
121
118
|
self.BLOCK2_CALIBRATION_EFUSES = []
|
|
122
|
-
|
|
123
119
|
self.CALC = []
|
|
124
120
|
|
|
125
121
|
dir_name = os.path.dirname(os.path.abspath(__file__))
|