esptool 4.9.dev5__tar.gz → 5.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. {esptool-4.9.dev5/esptool.egg-info → esptool-5.0.dev0}/PKG-INFO +10 -9
  2. {esptool-4.9.dev5 → esptool-5.0.dev0}/README.md +1 -1
  3. {esptool-4.9.dev5 → esptool-5.0.dev0}/esp_rfc2217_server/__init__.py +5 -2
  4. {esptool-4.9.dev5 → esptool-5.0.dev0}/esp_rfc2217_server.py +1 -1
  5. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/__init__.py +15 -20
  6. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/base_fields.py +11 -9
  7. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/base_operations.py +7 -4
  8. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/csv_table_parser.py +5 -2
  9. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32/operations.py +1 -0
  10. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/operations.py +5 -1
  11. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/operations.py +1 -0
  12. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/operations.py +1 -0
  13. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/operations.py +1 -0
  14. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/mem_definition.py +1 -2
  15. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/operations.py +1 -0
  16. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/operations.py +1 -0
  17. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/operations.py +1 -0
  18. esptool-5.0.dev0/espefuse/efuse/esp32h4/emulate_efuse_controller.py +92 -0
  19. esptool-5.0.dev0/espefuse/efuse/esp32h4/fields.py +452 -0
  20. {esptool-4.9.dev5/espefuse/efuse/esp32c5beta3 → esptool-5.0.dev0/espefuse/efuse/esp32h4}/mem_definition.py +16 -12
  21. {esptool-4.9.dev5/espefuse/efuse/esp32c5beta3 → esptool-5.0.dev0/espefuse/efuse/esp32h4}/operations.py +9 -14
  22. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/mem_definition.py +1 -2
  23. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/operations.py +7 -2
  24. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/operations.py +1 -0
  25. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/operations.py +1 -0
  26. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/mem_definition_base.py +4 -5
  27. esptool-5.0.dev0/espefuse/efuse_defs/esp32h4.yaml +92 -0
  28. {esptool-4.9.dev5 → esptool-5.0.dev0}/espsecure/__init__.py +662 -660
  29. {esptool-4.9.dev5 → esptool-5.0.dev0}/espsecure/esp_hsm_sign/__init__.py +18 -11
  30. esptool-5.0.dev0/esptool/__init__.py +1152 -0
  31. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/bin_image.py +194 -206
  32. esptool-5.0.dev0/esptool/cli_util.py +403 -0
  33. esptool-5.0.dev0/esptool/cmds.py +2290 -0
  34. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/config.py +6 -4
  35. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/loader.py +297 -193
  36. esptool-5.0.dev0/esptool/logger.py +242 -0
  37. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/reset.py +7 -6
  38. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/__init__.py +2 -10
  39. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32.py +28 -46
  40. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32c2.py +15 -24
  41. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32c3.py +15 -31
  42. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32c5.py +30 -29
  43. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32c6.py +18 -32
  44. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32c61.py +9 -22
  45. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32h2.py +11 -26
  46. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32h21.py +40 -21
  47. esptool-5.0.dev0/esptool/targets/esp32h4.py +201 -0
  48. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32p4.py +15 -31
  49. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32s2.py +17 -36
  50. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp32s3.py +19 -33
  51. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/esp8266.py +6 -29
  52. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/uf2_writer.py +4 -6
  53. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/util.py +55 -25
  54. {esptool-4.9.dev5 → esptool-5.0.dev0/esptool.egg-info}/PKG-INFO +10 -9
  55. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool.egg-info/SOURCES.txt +9 -26
  56. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool.egg-info/requires.txt +5 -3
  57. {esptool-4.9.dev5 → esptool-5.0.dev0}/pyproject.toml +11 -14
  58. esptool-4.9.dev5/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -92
  59. esptool-4.9.dev5/espefuse/efuse/esp32c5beta3/fields.py +0 -464
  60. esptool-4.9.dev5/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -92
  61. esptool-4.9.dev5/espefuse/efuse/esp32h2beta1/fields.py +0 -465
  62. esptool-4.9.dev5/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -152
  63. esptool-4.9.dev5/espefuse/efuse/esp32h2beta1/operations.py +0 -405
  64. esptool-4.9.dev5/espefuse/efuse/esp32s3/__init__.py +0 -3
  65. esptool-4.9.dev5/espefuse/efuse/esp32s3beta2/__init__.py +0 -3
  66. esptool-4.9.dev5/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -92
  67. esptool-4.9.dev5/espefuse/efuse/esp32s3beta2/fields.py +0 -489
  68. esptool-4.9.dev5/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -167
  69. esptool-4.9.dev5/espefuse/efuse/esp32s3beta2/operations.py +0 -519
  70. esptool-4.9.dev5/espefuse/efuse_defs/esp32c5beta3.yaml +0 -104
  71. esptool-4.9.dev5/esptool/__init__.py +0 -1372
  72. esptool-4.9.dev5/esptool/cmds.py +0 -1520
  73. esptool-4.9.dev5/esptool/targets/esp32c5beta3.py +0 -126
  74. esptool-4.9.dev5/esptool/targets/esp32c6beta.py +0 -25
  75. esptool-4.9.dev5/esptool/targets/esp32h2beta1.py +0 -184
  76. esptool-4.9.dev5/esptool/targets/esp32h2beta2.py +0 -41
  77. esptool-4.9.dev5/esptool/targets/esp32s3beta2.py +0 -35
  78. esptool-4.9.dev5/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -8
  79. esptool-4.9.dev5/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -8
  80. esptool-4.9.dev5/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -8
  81. esptool-4.9.dev5/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -8
  82. esptool-4.9.dev5/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -8
  83. {esptool-4.9.dev5 → esptool-5.0.dev0}/LICENSE +0 -0
  84. {esptool-4.9.dev5 → esptool-5.0.dev0}/MANIFEST.in +0 -0
  85. {esptool-4.9.dev5 → esptool-5.0.dev0}/esp_rfc2217_server/__main__.py +0 -0
  86. {esptool-4.9.dev5 → esptool-5.0.dev0}/esp_rfc2217_server/esp_port_manager.py +0 -0
  87. {esptool-4.9.dev5 → esptool-5.0.dev0}/esp_rfc2217_server/redirector.py +0 -0
  88. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/__main__.py +0 -0
  89. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/__init__.py +0 -0
  90. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
  91. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32/__init__.py +0 -0
  92. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
  93. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32/fields.py +0 -0
  94. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32/mem_definition.py +0 -0
  95. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/__init__.py +0 -0
  96. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
  97. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/fields.py +0 -0
  98. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/mem_definition.py +0 -0
  99. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/__init__.py +0 -0
  100. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
  101. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/fields.py +0 -0
  102. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/mem_definition.py +0 -0
  103. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/__init__.py +0 -0
  104. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
  105. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/fields.py +0 -0
  106. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/mem_definition.py +0 -0
  107. {esptool-4.9.dev5/espefuse/efuse/esp32c5beta3 → esptool-5.0.dev0/espefuse/efuse/esp32c6}/__init__.py +0 -0
  108. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
  109. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/fields.py +0 -0
  110. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/mem_definition.py +0 -0
  111. {esptool-4.9.dev5/espefuse/efuse/esp32c6 → esptool-5.0.dev0/espefuse/efuse/esp32c61}/__init__.py +0 -0
  112. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
  113. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/fields.py +0 -0
  114. {esptool-4.9.dev5/espefuse/efuse/esp32c61 → esptool-5.0.dev0/espefuse/efuse/esp32h2}/__init__.py +0 -0
  115. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
  116. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/fields.py +0 -0
  117. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/mem_definition.py +0 -0
  118. {esptool-4.9.dev5/espefuse/efuse/esp32h2 → esptool-5.0.dev0/espefuse/efuse/esp32h21}/__init__.py +0 -0
  119. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +0 -0
  120. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/fields.py +0 -0
  121. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/mem_definition.py +0 -0
  122. {esptool-4.9.dev5/espefuse/efuse/esp32h21 → esptool-5.0.dev0/espefuse/efuse/esp32h4}/__init__.py +0 -0
  123. {esptool-4.9.dev5/espefuse/efuse/esp32h2beta1 → esptool-5.0.dev0/espefuse/efuse/esp32p4}/__init__.py +0 -0
  124. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
  125. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/fields.py +0 -0
  126. {esptool-4.9.dev5/espefuse/efuse/esp32p4 → esptool-5.0.dev0/espefuse/efuse/esp32s2}/__init__.py +0 -0
  127. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
  128. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/fields.py +0 -0
  129. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/mem_definition.py +0 -0
  130. {esptool-4.9.dev5/espefuse/efuse/esp32s2 → esptool-5.0.dev0/espefuse/efuse/esp32s3}/__init__.py +0 -0
  131. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
  132. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/fields.py +0 -0
  133. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/mem_definition.py +0 -0
  134. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse/util.py +0 -0
  135. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32.yaml +0 -0
  136. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c2.yaml +0 -0
  137. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c3.yaml +0 -0
  138. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c5.yaml +0 -0
  139. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c6.yaml +0 -0
  140. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c61.yaml +0 -0
  141. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h2.yaml +0 -0
  142. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h21.yaml +0 -0
  143. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
  144. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32p4.yaml +0 -0
  145. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32s2.yaml +0 -0
  146. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32s3.yaml +0 -0
  147. {esptool-4.9.dev5 → esptool-5.0.dev0}/espefuse.py +0 -0
  148. {esptool-4.9.dev5 → esptool-5.0.dev0}/espsecure/__main__.py +0 -0
  149. {esptool-4.9.dev5 → esptool-5.0.dev0}/espsecure/esp_hsm_sign/exceptions.py +0 -0
  150. {esptool-4.9.dev5 → esptool-5.0.dev0}/espsecure.py +0 -0
  151. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/__main__.py +0 -0
  152. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/README.md +0 -0
  153. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32.json +0 -0
  154. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
  155. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
  156. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c5.json +0 -0
  157. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
  158. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c61.json +0 -0
  159. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
  160. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32p4.json +0 -0
  161. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
  162. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
  163. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
  164. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
  165. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
  166. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/README.md +0 -0
  167. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32.json +0 -0
  168. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
  169. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
  170. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
  171. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
  172. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
  173. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
  174. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool.egg-info/dependency_links.txt +0 -0
  175. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool.egg-info/top_level.txt +0 -0
  176. {esptool-4.9.dev5 → esptool-5.0.dev0}/esptool.py +0 -0
  177. {esptool-4.9.dev5 → esptool-5.0.dev0}/setup.cfg +0 -0
  178. {esptool-4.9.dev5 → esptool-5.0.dev0}/setup.py +0 -0
@@ -1,7 +1,7 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: esptool
3
- Version: 4.9.dev5
4
- Summary: A serial utility to communicate & flash code to Espressif chips.
3
+ Version: 5.0.dev0
4
+ Summary: A serial utility for flashing, provisioning, and interacting with Espressif SoCs.
5
5
  Author: Fredrik Ahlberg (themadinventor), Angus Gratton (projectgus), Espressif Systems
6
6
  License: GPLv2+
7
7
  Project-URL: Homepage, https://github.com/espressif/esptool/
@@ -18,14 +18,11 @@ Classifier: Operating System :: MacOS :: MacOS X
18
18
  Classifier: Topic :: Software Development :: Embedded Systems
19
19
  Classifier: Environment :: Console
20
20
  Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)
21
- Classifier: Programming Language :: Python :: 3.7
22
- Classifier: Programming Language :: Python :: 3.8
23
- Classifier: Programming Language :: Python :: 3.9
24
21
  Classifier: Programming Language :: Python :: 3.10
25
22
  Classifier: Programming Language :: Python :: 3.11
26
23
  Classifier: Programming Language :: Python :: 3.12
27
24
  Classifier: Programming Language :: Python :: 3.13
28
- Requires-Python: >=3.7
25
+ Requires-Python: >=3.10
29
26
  Description-Content-Type: text/markdown
30
27
  License-File: LICENSE
31
28
  Requires-Dist: bitstring!=4.2.0,>=3.1.6
@@ -35,7 +32,7 @@ Requires-Dist: pyserial>=3.3
35
32
  Requires-Dist: reedsolo<1.8,>=1.5.3
36
33
  Requires-Dist: PyYAML>=5.1
37
34
  Requires-Dist: intelhex
38
- Requires-Dist: argcomplete>=3; sys_platform != "win32"
35
+ Requires-Dist: rich_click
39
36
  Provides-Extra: dev
40
37
  Requires-Dist: pyelftools; extra == "dev"
41
38
  Requires-Dist: coverage~=6.0; extra == "dev"
@@ -46,10 +43,14 @@ Requires-Dist: requests; extra == "dev"
46
43
  Requires-Dist: commitizen; extra == "dev"
47
44
  Provides-Extra: hsm
48
45
  Requires-Dist: python-pkcs11; extra == "hsm"
46
+ Provides-Extra: docs
47
+ Requires-Dist: esp-docs~=1.10; extra == "docs"
48
+ Requires-Dist: sphinx-tabs; extra == "docs"
49
+ Dynamic: license-file
49
50
 
50
51
  # esptool.py
51
52
 
52
- A Python-based, open-source, platform-independent utility to communicate with the ROM bootloader in Espressif chips.
53
+ A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
53
54
 
54
55
  [![Test esptool](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [![Build esptool](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
55
56
 
@@ -1,6 +1,6 @@
1
1
  # esptool.py
2
2
 
3
- A Python-based, open-source, platform-independent utility to communicate with the ROM bootloader in Espressif chips.
3
+ A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
4
4
 
5
5
  [![Test esptool](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [![Build esptool](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
6
6
 
@@ -92,7 +92,10 @@ def main():
92
92
  logging.info(f"TCP/IP port: {args.localport}")
93
93
 
94
94
  host_ip = socket.gethostbyname(socket.gethostname())
95
- wait_msg = f"Waiting for connection ... use the 'rfc2217://{host_ip}:{args.localport}?ign_set_control' as a PORT"
95
+ wait_msg = (
96
+ "Waiting for connection ... use the 'rfc2217://"
97
+ f"{host_ip}:{args.localport}?ign_set_control' as a PORT"
98
+ )
96
99
  logging.info(wait_msg)
97
100
 
98
101
  while True:
@@ -127,7 +130,7 @@ def main():
127
130
  # capable client)
128
131
  ser.apply_settings(settings)
129
132
  except KeyboardInterrupt:
130
- sys.stdout.write("\n")
133
+ print(flush=True)
131
134
  break
132
135
  except socket.error as msg:
133
136
  logging.error(str(msg))
@@ -26,7 +26,7 @@
26
26
  # Esptool can connect to the ESP device through that server as it is
27
27
  # demonstrated in the following example:
28
28
  #
29
- # esptool.py --port rfc2217://localhost:4000?ign_set_control flash_id
29
+ # esptool.py --port rfc2217://localhost:4000?ign_set_control flash-id
30
30
  #
31
31
 
32
32
  import contextlib
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
1
+ # SPDX-FileCopyrightText: 2016-2025 Espressif Systems (Shanghai) CO LTD
2
2
  #
3
3
  # SPDX-License-Identifier: GPL-2.0-or-later
4
4
  # PYTHON_ARGCOMPLETE_OK
@@ -13,18 +13,18 @@ import espefuse.efuse.esp32 as esp32_efuse
13
13
  import espefuse.efuse.esp32c2 as esp32c2_efuse
14
14
  import espefuse.efuse.esp32c3 as esp32c3_efuse
15
15
  import espefuse.efuse.esp32c5 as esp32c5_efuse
16
- import espefuse.efuse.esp32c5beta3 as esp32c5beta3_efuse
17
16
  import espefuse.efuse.esp32c6 as esp32c6_efuse
18
17
  import espefuse.efuse.esp32c61 as esp32c61_efuse
19
18
  import espefuse.efuse.esp32h2 as esp32h2_efuse
20
19
  import espefuse.efuse.esp32h21 as esp32h21_efuse
21
- import espefuse.efuse.esp32h2beta1 as esp32h2beta1_efuse
20
+ import espefuse.efuse.esp32h4 as esp32h4_efuse
22
21
  import espefuse.efuse.esp32p4 as esp32p4_efuse
23
22
  import espefuse.efuse.esp32s2 as esp32s2_efuse
24
23
  import espefuse.efuse.esp32s3 as esp32s3_efuse
25
- import espefuse.efuse.esp32s3beta2 as esp32s3beta2_efuse
26
24
 
27
25
  import esptool
26
+ import esptool.cli_util
27
+ from esptool.logger import log
28
28
 
29
29
  DefChip = namedtuple("DefChip", ["chip_name", "efuse_lib", "chip_class"])
30
30
 
@@ -58,20 +58,12 @@ SUPPORTED_CHIPS = {
58
58
  "esp32c6": DefChip("ESP32-C6", esp32c6_efuse, esptool.targets.ESP32C6ROM),
59
59
  "esp32c61": DefChip("ESP32-C61", esp32c61_efuse, esptool.targets.ESP32C61ROM),
60
60
  "esp32c5": DefChip("ESP32-C5", esp32c5_efuse, esptool.targets.ESP32C5ROM),
61
- "esp32c5beta3": DefChip(
62
- "ESP32-C5(beta3)", esp32c5beta3_efuse, esptool.targets.ESP32C5BETA3ROM
63
- ),
64
61
  "esp32h2": DefChip("ESP32-H2", esp32h2_efuse, esptool.targets.ESP32H2ROM),
65
62
  "esp32h21": DefChip("ESP32-H21", esp32h21_efuse, esptool.targets.ESP32H21ROM),
63
+ "esp32h4": DefChip("ESP32-H4", esp32h4_efuse, esptool.targets.ESP32H4ROM),
66
64
  "esp32p4": DefChip("ESP32-P4", esp32p4_efuse, esptool.targets.ESP32P4ROM),
67
- "esp32h2beta1": DefChip(
68
- "ESP32-H2(beta1)", esp32h2beta1_efuse, esptool.targets.ESP32H2BETA1ROM
69
- ),
70
65
  "esp32s2": DefChip("ESP32-S2", esp32s2_efuse, esptool.targets.ESP32S2ROM),
71
66
  "esp32s3": DefChip("ESP32-S3", esp32s3_efuse, esptool.targets.ESP32S3ROM),
72
- "esp32s3beta2": DefChip(
73
- "ESP32-S3(beta2)", esp32s3beta2_efuse, esptool.targets.ESP32S3BETA2ROM
74
- ),
75
67
  }
76
68
 
77
69
 
@@ -191,7 +183,7 @@ def main(custom_commandline=None, esp=None):
191
183
  "--baud",
192
184
  "-b",
193
185
  help="Serial port baud rate used when flashing/reading",
194
- type=esptool.arg_auto_int,
186
+ type=esptool.cli_util.arg_auto_int,
195
187
  default=os.environ.get("ESPTOOL_BAUD", esptool.loader.ESPLoader.ESP_ROM_BAUD),
196
188
  )
197
189
 
@@ -205,8 +197,8 @@ def main(custom_commandline=None, esp=None):
205
197
  init_parser.add_argument(
206
198
  "--before",
207
199
  help="What to do before connecting to the chip",
208
- choices=["default_reset", "usb_reset", "no_reset", "no_reset_no_sync"],
209
- default="default_reset",
200
+ choices=["default-reset", "usb-reset", "no-reset", "no-reset-no-sync"],
201
+ default="default-reset",
210
202
  )
211
203
 
212
204
  init_parser.add_argument(
@@ -315,9 +307,9 @@ def main(custom_commandline=None, esp=None):
315
307
  if args.operation is None:
316
308
  parser.print_help()
317
309
  parser.exit(1)
318
- assert (
319
- len(unused_args) == 0
320
- ), 'Not all commands were recognized "{}"'.format(unused_args)
310
+ assert len(unused_args) == 0, (
311
+ 'Not all commands were recognized "{}"'.format(unused_args)
312
+ )
321
313
 
322
314
  operation_func = vars(efuse_operations)[args.operation]
323
315
  # each 'operation' is a module-level function of the same name
@@ -361,7 +353,10 @@ def _main():
361
353
  try:
362
354
  main()
363
355
  except esptool.FatalError as e:
364
- print("\nA fatal error occurred: %s" % e)
356
+ log.error(f"\nA fatal error occurred: {e}")
357
+ sys.exit(2)
358
+ except KeyboardInterrupt:
359
+ log.error("KeyboardInterrupt: Run cancelled by user.")
365
360
  sys.exit(2)
366
361
 
367
362
 
@@ -12,7 +12,6 @@ from bitstring import BitArray, BitStream, CreationError
12
12
  import esptool
13
13
 
14
14
  from . import util
15
- from typing import List
16
15
 
17
16
 
18
17
  class CheckArgValue(object):
@@ -392,12 +391,14 @@ class EfuseBlockBase(EfuseProtectBase):
392
391
  # if the required bits are not set then we need to re-burn it again.
393
392
  if burns < 2:
394
393
  print(
395
- f"\nRepeat burning BLOCK{self.id} (#{burns + 2}) because not all bits were set"
394
+ f"\nRepeat burning BLOCK{self.id} (#{burns + 2}) "
395
+ "because not all bits were set"
396
396
  )
397
397
  continue
398
398
  else:
399
399
  print(
400
- f"\nAfter {burns + 1} attempts, the required data was not set to BLOCK{self.id}"
400
+ f"\nAfter {burns + 1} attempts, the required data was not "
401
+ f"set to BLOCK{self.id}"
401
402
  )
402
403
  break
403
404
 
@@ -455,8 +456,8 @@ class EspEfusesBase(object):
455
456
  """
456
457
 
457
458
  _esp = None
458
- blocks: List[EfuseBlockBase] = []
459
- efuses: List = []
459
+ blocks: list[EfuseBlockBase] = []
460
+ efuses: list = []
460
461
  coding_scheme = None
461
462
  force_write_always = None
462
463
  batch_mode_cnt = 0
@@ -628,9 +629,9 @@ class EspEfusesBase(object):
628
629
  % (action, "" if action.endswith("\n") else ". ")
629
630
  )
630
631
  if not do_not_confirm:
631
- print("Type 'BURN' (all capitals) to continue.")
632
- # required for Pythons which disable line buffering, ie mingw in mintty
633
- sys.stdout.flush()
632
+ print("Type 'BURN' (all capitals) to continue.", flush=True)
633
+ # Flush required for Pythons which disable line buffering,
634
+ # ie mingw in mintty
634
635
  yes = input()
635
636
  if yes != "BURN":
636
637
  print("Aborting.")
@@ -650,7 +651,8 @@ class EspEfusesBase(object):
650
651
  return self.blocks[block_num].num_errors, self.blocks[block_num].fail
651
652
 
652
653
  def is_efuses_incompatible_for_burn(self):
653
- # Overwrite this function for a specific target if you want to check if a certain eFuse(s) can be burned.
654
+ # Overwrite this function for a specific target if you want to check if a
655
+ # certain eFuse(s) can be burned.
654
656
  return False
655
657
 
656
658
  def get_major_chip_version(self):
@@ -180,15 +180,17 @@ def add_common_commands(subparsers, efuses):
180
180
  help="Select the dump format: "
181
181
  "default - usual console eFuse dump; "
182
182
  "joint - all eFuse blocks are stored in one file; "
183
- "split - each eFuse block is placed into its own file. The tool will create multiple files based on "
184
- "the given --file_name (/path/blk.bin): blk0.bin, blk1.bin ... blkN.bin. Use the burn_block_data cmd "
183
+ "split - each eFuse block is placed into its own file. The tool will create "
184
+ "multiple files based on the given --file_name (/path/blk.bin): "
185
+ "blk0.bin, blk1.bin ... blkN.bin. Use the burn_block_data cmd "
185
186
  "to write it back to another chip.",
186
187
  choices=["default", "split", "joint"],
187
188
  default="default",
188
189
  )
189
190
  dump_cmd.add_argument(
190
191
  "--file_name",
191
- help="The path to the file in which to save the dump, if not specified, output to the console.",
192
+ help="The path to the file in which to save the dump, if not specified, "
193
+ "output to the console.",
192
194
  default=sys.stdout,
193
195
  )
194
196
 
@@ -526,7 +528,8 @@ def burn_efuse(esp, efuses, args):
526
528
  print("Ignore incompatible eFuse settings.")
527
529
  else:
528
530
  raise esptool.FatalError(
529
- "Incompatible eFuse settings detected, abort. (use --force flag to skip it)."
531
+ "Incompatible eFuse settings detected, abort. "
532
+ "(use --force flag to skip it)."
530
533
  )
531
534
 
532
535
  if not efuses.burn_all(check_batch_mode=True):
@@ -137,7 +137,9 @@ class CSVFuseTable(list):
137
137
 
138
138
  def print_error(p, n, state):
139
139
  raise InputError(
140
- f"Field at {p.field_name}, {p.efuse_block}, {p.bit_start}, {p.bit_count} {state} {n.field_name}, {n.efuse_block}, {n.bit_start}, {n.bit_count}"
140
+ f"Field at {p.field_name}, {p.efuse_block}, {p.bit_start}, "
141
+ f"{p.bit_count} {state} {n.field_name}, {n.efuse_block}, "
142
+ f"{n.bit_start}, {n.bit_count}"
141
143
  )
142
144
 
143
145
  for p in self:
@@ -238,7 +240,8 @@ class FuseDefinition(object):
238
240
  if self.bit_start + self.bit_count > max_bits:
239
241
  raise ValidationError(
240
242
  self,
241
- f"The field is outside the boundaries(max_bits = {max_bits}) of the {self.efuse_block} block",
243
+ f"The field is outside the boundaries (max_bits = {max_bits}) "
244
+ f"of the {self.efuse_block} block",
242
245
  )
243
246
 
244
247
  def get_bit_count(self, check_define=True):
@@ -229,6 +229,7 @@ def burn_key(esp, efuses, args):
229
229
  raise esptool.FatalError("Unknown block name - %s" % (block_name))
230
230
  num_bytes = efuse.bit_len // 8
231
231
  data = datafile.read()
232
+ datafile.close()
232
233
  revers_msg = None
233
234
  if block_name in ("flash_encryption", "secure_boot_v1"):
234
235
  revers_msg = "\tReversing the byte order"
@@ -207,7 +207,11 @@ def burn_key(esp, efuses, args, digest=None):
207
207
 
208
208
  print("Burn keys to blocks:")
209
209
  for datafile, keypurpose in zip(datafile_list, keypurpose_list):
210
- data = datafile if isinstance(datafile, bytes) else datafile.read()
210
+ if isinstance(datafile, bytes):
211
+ data = datafile
212
+ else:
213
+ data = datafile.read()
214
+ datafile.close()
211
215
 
212
216
  if keypurpose == "XTS_AES_128_KEY_DERIVED_FROM_128_EFUSE_BITS":
213
217
  efuse = efuses["BLOCK_KEY0_LOW_128"]
@@ -251,6 +251,7 @@ def burn_key(esp, efuses, args, digest=None):
251
251
 
252
252
  if digest is None:
253
253
  data = datafile.read()
254
+ datafile.close()
254
255
  else:
255
256
  data = datafile
256
257
 
@@ -248,6 +248,7 @@ def burn_key(esp, efuses, args, digest=None):
248
248
  data = b"\x00" * 8 + data
249
249
  else:
250
250
  data = datafile.read()
251
+ datafile.close()
251
252
  else:
252
253
  data = datafile
253
254
 
@@ -258,6 +258,7 @@ def burn_key(esp, efuses, args, digest=None):
258
258
 
259
259
  if digest is None:
260
260
  data = datafile.read()
261
+ datafile.close()
261
262
  else:
262
263
  data = datafile
263
264
 
@@ -5,7 +5,6 @@
5
5
  # SPDX-License-Identifier: GPL-2.0-or-later
6
6
 
7
7
  import os
8
- from typing import List
9
8
 
10
9
  import yaml
11
10
 
@@ -116,7 +115,7 @@ class EfuseDefineFields(EfuseFieldsBase):
116
115
  self.EFUSES = []
117
116
  self.KEYBLOCKS = []
118
117
  self.BLOCK2_CALIBRATION_EFUSES = []
119
- self.CALC: List = []
118
+ self.CALC: list = []
120
119
 
121
120
  dir_name = os.path.dirname(os.path.abspath(__file__))
122
121
  dir_name, file_name = os.path.split(dir_name)
@@ -315,6 +315,7 @@ def burn_key(esp, efuses, args, digest=None):
315
315
  data = b"\x00" * 8 + data
316
316
  else:
317
317
  data = datafile.read()
318
+ datafile.close()
318
319
  else:
319
320
  data = datafile
320
321
 
@@ -262,6 +262,7 @@ def burn_key(esp, efuses, args, digest=None):
262
262
  data = b"\x00" * 8 + data
263
263
  else:
264
264
  data = datafile.read()
265
+ datafile.close()
265
266
  else:
266
267
  data = datafile
267
268
 
@@ -246,6 +246,7 @@ def burn_key(esp, efuses, args, digest=None):
246
246
  data = b"\x00" * 8 + data
247
247
  else:
248
248
  data = datafile.read()
249
+ datafile.close()
249
250
  else:
250
251
  data = datafile
251
252
 
@@ -0,0 +1,92 @@
1
+ # This file describes eFuses controller for ESP32-H4 chip
2
+ #
3
+ # SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
4
+ #
5
+ # SPDX-License-Identifier: GPL-2.0-or-later
6
+
7
+ import reedsolo
8
+
9
+ from .mem_definition import EfuseDefineBlocks, EfuseDefineFields, EfuseDefineRegisters
10
+ from ..emulate_efuse_controller_base import EmulateEfuseControllerBase, FatalError
11
+
12
+
13
+ class EmulateEfuseController(EmulateEfuseControllerBase):
14
+ """The class for virtual efuse operation. Using for HOST_TEST."""
15
+
16
+ CHIP_NAME = "ESP32-H4"
17
+ mem = None
18
+ debug = False
19
+
20
+ def __init__(self, efuse_file=None, debug=False):
21
+ self.Blocks = EfuseDefineBlocks
22
+ self.Fields = EfuseDefineFields(None)
23
+ self.REGS = EfuseDefineRegisters
24
+ super(EmulateEfuseController, self).__init__(efuse_file, debug)
25
+ self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
26
+
27
+ """ esptool method start >>"""
28
+
29
+ def get_major_chip_version(self):
30
+ return 0
31
+
32
+ def get_minor_chip_version(self):
33
+ return 0
34
+
35
+ def get_crystal_freq(self):
36
+ return 32 # MHz
37
+
38
+ def get_security_info(self):
39
+ return {
40
+ "flags": 0,
41
+ "flash_crypt_cnt": 0,
42
+ "key_purposes": 0,
43
+ "chip_id": 0,
44
+ "api_version": 0,
45
+ }
46
+
47
+ """ << esptool method end """
48
+
49
+ def handle_writing_event(self, addr, value):
50
+ if addr == self.REGS.EFUSE_CMD_REG:
51
+ if value & self.REGS.EFUSE_PGM_CMD:
52
+ self.copy_blocks_wr_regs_to_rd_regs(updated_block=(value >> 2) & 0xF)
53
+ self.clean_blocks_wr_regs()
54
+ self.check_rd_protection_area()
55
+ self.write_reg(addr, 0)
56
+ self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
57
+ elif value == self.REGS.EFUSE_READ_CMD:
58
+ self.write_reg(addr, 0)
59
+ self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
60
+ self.save_to_file()
61
+
62
+ def get_bitlen_of_block(self, blk, wr=False):
63
+ if blk.id == 0:
64
+ if wr:
65
+ return 32 * 8
66
+ else:
67
+ return 32 * blk.len
68
+ else:
69
+ if wr:
70
+ rs_coding = 32 * 3
71
+ return 32 * 8 + rs_coding
72
+ else:
73
+ return 32 * blk.len
74
+
75
+ def handle_coding_scheme(self, blk, data):
76
+ if blk.id != 0:
77
+ # CODING_SCHEME RS applied only for all blocks except BLK0.
78
+ coded_bytes = 12
79
+ data.pos = coded_bytes * 8
80
+ plain_data = data.readlist("32*uint:8")[::-1]
81
+ # takes 32 bytes
82
+ # apply RS encoding
83
+ rs = reedsolo.RSCodec(coded_bytes)
84
+ # 32 byte of data + 12 bytes RS
85
+ calc_encoded_data = list(rs.encode([x for x in plain_data]))
86
+ data.pos = 0
87
+ if calc_encoded_data != data.readlist("44*uint:8")[::-1]:
88
+ raise FatalError("Error in coding scheme data")
89
+ data = data[coded_bytes * 8 :]
90
+ if blk.len < 8:
91
+ data = data[(8 - blk.len) * 32 :]
92
+ return data