esptool 4.9.dev6__tar.gz → 5.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. {esptool-4.9.dev6/esptool.egg-info → esptool-5.0.dev0}/PKG-INFO +10 -9
  2. {esptool-4.9.dev6 → esptool-5.0.dev0}/README.md +1 -1
  3. {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/__init__.py +5 -2
  4. {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server.py +1 -1
  5. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/__init__.py +13 -20
  6. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/base_fields.py +11 -9
  7. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/base_operations.py +7 -4
  8. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/csv_table_parser.py +5 -2
  9. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/operations.py +1 -0
  10. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/operations.py +5 -1
  11. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/operations.py +1 -0
  12. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/operations.py +1 -0
  13. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/operations.py +1 -0
  14. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/mem_definition.py +1 -2
  15. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/operations.py +1 -0
  16. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/operations.py +1 -0
  17. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/operations.py +1 -0
  18. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/operations.py +1 -0
  19. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/mem_definition.py +1 -2
  20. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/operations.py +1 -0
  21. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/operations.py +1 -0
  22. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/operations.py +1 -0
  23. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/mem_definition_base.py +4 -5
  24. {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/__init__.py +662 -660
  25. {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/esp_hsm_sign/__init__.py +18 -11
  26. esptool-5.0.dev0/esptool/__init__.py +1152 -0
  27. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/bin_image.py +169 -187
  28. esptool-5.0.dev0/esptool/cli_util.py +403 -0
  29. esptool-5.0.dev0/esptool/cmds.py +2290 -0
  30. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/config.py +6 -4
  31. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/loader.py +297 -193
  32. esptool-5.0.dev0/esptool/logger.py +242 -0
  33. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/reset.py +7 -6
  34. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/__init__.py +0 -10
  35. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32.py +28 -46
  36. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c2.py +15 -24
  37. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c3.py +15 -31
  38. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c5.py +30 -29
  39. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c6.py +18 -32
  40. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32c61.py +9 -22
  41. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32h2.py +11 -26
  42. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32h21.py +10 -21
  43. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32h4.py +9 -21
  44. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32p4.py +15 -31
  45. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32s2.py +17 -36
  46. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp32s3.py +19 -33
  47. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/esp8266.py +6 -29
  48. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/uf2_writer.py +4 -6
  49. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/util.py +55 -25
  50. {esptool-4.9.dev6 → esptool-5.0.dev0/esptool.egg-info}/PKG-INFO +10 -9
  51. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/SOURCES.txt +2 -26
  52. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/requires.txt +5 -3
  53. {esptool-4.9.dev6 → esptool-5.0.dev0}/pyproject.toml +11 -14
  54. esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -92
  55. esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/fields.py +0 -464
  56. esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/mem_definition.py +0 -165
  57. esptool-4.9.dev6/espefuse/efuse/esp32c5beta3/operations.py +0 -395
  58. esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -92
  59. esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/fields.py +0 -465
  60. esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -152
  61. esptool-4.9.dev6/espefuse/efuse/esp32h2beta1/operations.py +0 -405
  62. esptool-4.9.dev6/espefuse/efuse/esp32s2/__init__.py +0 -3
  63. esptool-4.9.dev6/espefuse/efuse/esp32s3/__init__.py +0 -3
  64. esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/__init__.py +0 -3
  65. esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -92
  66. esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/fields.py +0 -489
  67. esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -167
  68. esptool-4.9.dev6/espefuse/efuse/esp32s3beta2/operations.py +0 -519
  69. esptool-4.9.dev6/espefuse/efuse_defs/esp32c5beta3.yaml +0 -104
  70. esptool-4.9.dev6/esptool/__init__.py +0 -1375
  71. esptool-4.9.dev6/esptool/cmds.py +0 -1569
  72. esptool-4.9.dev6/esptool/targets/esp32c5beta3.py +0 -126
  73. esptool-4.9.dev6/esptool/targets/esp32c6beta.py +0 -25
  74. esptool-4.9.dev6/esptool/targets/esp32h2beta1.py +0 -184
  75. esptool-4.9.dev6/esptool/targets/esp32h2beta2.py +0 -41
  76. esptool-4.9.dev6/esptool/targets/esp32s3beta2.py +0 -35
  77. esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -8
  78. esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -8
  79. esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -8
  80. esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -8
  81. esptool-4.9.dev6/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -8
  82. {esptool-4.9.dev6 → esptool-5.0.dev0}/LICENSE +0 -0
  83. {esptool-4.9.dev6 → esptool-5.0.dev0}/MANIFEST.in +0 -0
  84. {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/__main__.py +0 -0
  85. {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/esp_port_manager.py +0 -0
  86. {esptool-4.9.dev6 → esptool-5.0.dev0}/esp_rfc2217_server/redirector.py +0 -0
  87. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/__main__.py +0 -0
  88. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/__init__.py +0 -0
  89. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
  90. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/__init__.py +0 -0
  91. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
  92. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/fields.py +0 -0
  93. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32/mem_definition.py +0 -0
  94. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/__init__.py +0 -0
  95. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
  96. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/fields.py +0 -0
  97. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c2/mem_definition.py +0 -0
  98. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/__init__.py +0 -0
  99. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
  100. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/fields.py +0 -0
  101. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c3/mem_definition.py +0 -0
  102. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/__init__.py +0 -0
  103. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
  104. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/fields.py +0 -0
  105. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c5/mem_definition.py +0 -0
  106. {esptool-4.9.dev6/espefuse/efuse/esp32c5beta3 → esptool-5.0.dev0/espefuse/efuse/esp32c6}/__init__.py +0 -0
  107. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
  108. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/fields.py +0 -0
  109. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c6/mem_definition.py +0 -0
  110. {esptool-4.9.dev6/espefuse/efuse/esp32c6 → esptool-5.0.dev0/espefuse/efuse/esp32c61}/__init__.py +0 -0
  111. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
  112. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32c61/fields.py +0 -0
  113. {esptool-4.9.dev6/espefuse/efuse/esp32c61 → esptool-5.0.dev0/espefuse/efuse/esp32h2}/__init__.py +0 -0
  114. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
  115. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/fields.py +0 -0
  116. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h2/mem_definition.py +0 -0
  117. {esptool-4.9.dev6/espefuse/efuse/esp32h2 → esptool-5.0.dev0/espefuse/efuse/esp32h21}/__init__.py +0 -0
  118. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +0 -0
  119. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/fields.py +0 -0
  120. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h21/mem_definition.py +0 -0
  121. {esptool-4.9.dev6/espefuse/efuse/esp32h21 → esptool-5.0.dev0/espefuse/efuse/esp32h4}/__init__.py +0 -0
  122. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +0 -0
  123. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/fields.py +0 -0
  124. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32h4/mem_definition.py +0 -0
  125. {esptool-4.9.dev6/espefuse/efuse/esp32h2beta1 → esptool-5.0.dev0/espefuse/efuse/esp32p4}/__init__.py +0 -0
  126. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
  127. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32p4/fields.py +0 -0
  128. {esptool-4.9.dev6/espefuse/efuse/esp32h4 → esptool-5.0.dev0/espefuse/efuse/esp32s2}/__init__.py +0 -0
  129. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
  130. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/fields.py +0 -0
  131. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s2/mem_definition.py +0 -0
  132. {esptool-4.9.dev6/espefuse/efuse/esp32p4 → esptool-5.0.dev0/espefuse/efuse/esp32s3}/__init__.py +0 -0
  133. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
  134. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/fields.py +0 -0
  135. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/esp32s3/mem_definition.py +0 -0
  136. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse/util.py +0 -0
  137. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32.yaml +0 -0
  138. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c2.yaml +0 -0
  139. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c3.yaml +0 -0
  140. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c5.yaml +0 -0
  141. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c6.yaml +0 -0
  142. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32c61.yaml +0 -0
  143. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h2.yaml +0 -0
  144. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h21.yaml +0 -0
  145. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
  146. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32h4.yaml +0 -0
  147. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32p4.yaml +0 -0
  148. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32s2.yaml +0 -0
  149. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse/efuse_defs/esp32s3.yaml +0 -0
  150. {esptool-4.9.dev6 → esptool-5.0.dev0}/espefuse.py +0 -0
  151. {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/__main__.py +0 -0
  152. {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure/esp_hsm_sign/exceptions.py +0 -0
  153. {esptool-4.9.dev6 → esptool-5.0.dev0}/espsecure.py +0 -0
  154. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/__main__.py +0 -0
  155. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/README.md +0 -0
  156. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32.json +0 -0
  157. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
  158. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
  159. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c5.json +0 -0
  160. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
  161. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32c61.json +0 -0
  162. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
  163. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32p4.json +0 -0
  164. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
  165. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
  166. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
  167. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
  168. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
  169. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/README.md +0 -0
  170. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32.json +0 -0
  171. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
  172. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
  173. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
  174. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
  175. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
  176. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
  177. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/dependency_links.txt +0 -0
  178. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.egg-info/top_level.txt +0 -0
  179. {esptool-4.9.dev6 → esptool-5.0.dev0}/esptool.py +0 -0
  180. {esptool-4.9.dev6 → esptool-5.0.dev0}/setup.cfg +0 -0
  181. {esptool-4.9.dev6 → 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.dev6
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,19 +13,18 @@ import espefuse.efuse.esp32 as esp32_efuse
13
13
  import espefuse.efuse.esp32c2 as esp32c2_efuse
14
14
  import espefuse.efuse.esp32c3 as esp32c3_efuse
15
15
  import espefuse.efuse.esp32c5 as esp32c5_efuse
16
- import espefuse.efuse.esp32c5beta3 as esp32c5beta3_efuse
17
16
  import espefuse.efuse.esp32c6 as esp32c6_efuse
18
17
  import espefuse.efuse.esp32c61 as esp32c61_efuse
19
18
  import espefuse.efuse.esp32h2 as esp32h2_efuse
20
19
  import espefuse.efuse.esp32h21 as esp32h21_efuse
21
- import espefuse.efuse.esp32h2beta1 as esp32h2beta1_efuse
22
20
  import espefuse.efuse.esp32h4 as esp32h4_efuse
23
21
  import espefuse.efuse.esp32p4 as esp32p4_efuse
24
22
  import espefuse.efuse.esp32s2 as esp32s2_efuse
25
23
  import espefuse.efuse.esp32s3 as esp32s3_efuse
26
- import espefuse.efuse.esp32s3beta2 as esp32s3beta2_efuse
27
24
 
28
25
  import esptool
26
+ import esptool.cli_util
27
+ from esptool.logger import log
29
28
 
30
29
  DefChip = namedtuple("DefChip", ["chip_name", "efuse_lib", "chip_class"])
31
30
 
@@ -59,21 +58,12 @@ SUPPORTED_CHIPS = {
59
58
  "esp32c6": DefChip("ESP32-C6", esp32c6_efuse, esptool.targets.ESP32C6ROM),
60
59
  "esp32c61": DefChip("ESP32-C61", esp32c61_efuse, esptool.targets.ESP32C61ROM),
61
60
  "esp32c5": DefChip("ESP32-C5", esp32c5_efuse, esptool.targets.ESP32C5ROM),
62
- "esp32c5beta3": DefChip(
63
- "ESP32-C5(beta3)", esp32c5beta3_efuse, esptool.targets.ESP32C5BETA3ROM
64
- ),
65
61
  "esp32h2": DefChip("ESP32-H2", esp32h2_efuse, esptool.targets.ESP32H2ROM),
66
62
  "esp32h21": DefChip("ESP32-H21", esp32h21_efuse, esptool.targets.ESP32H21ROM),
67
63
  "esp32h4": DefChip("ESP32-H4", esp32h4_efuse, esptool.targets.ESP32H4ROM),
68
64
  "esp32p4": DefChip("ESP32-P4", esp32p4_efuse, esptool.targets.ESP32P4ROM),
69
- "esp32h2beta1": DefChip(
70
- "ESP32-H2(beta1)", esp32h2beta1_efuse, esptool.targets.ESP32H2BETA1ROM
71
- ),
72
65
  "esp32s2": DefChip("ESP32-S2", esp32s2_efuse, esptool.targets.ESP32S2ROM),
73
66
  "esp32s3": DefChip("ESP32-S3", esp32s3_efuse, esptool.targets.ESP32S3ROM),
74
- "esp32s3beta2": DefChip(
75
- "ESP32-S3(beta2)", esp32s3beta2_efuse, esptool.targets.ESP32S3BETA2ROM
76
- ),
77
67
  }
78
68
 
79
69
 
@@ -193,7 +183,7 @@ def main(custom_commandline=None, esp=None):
193
183
  "--baud",
194
184
  "-b",
195
185
  help="Serial port baud rate used when flashing/reading",
196
- type=esptool.arg_auto_int,
186
+ type=esptool.cli_util.arg_auto_int,
197
187
  default=os.environ.get("ESPTOOL_BAUD", esptool.loader.ESPLoader.ESP_ROM_BAUD),
198
188
  )
199
189
 
@@ -207,8 +197,8 @@ def main(custom_commandline=None, esp=None):
207
197
  init_parser.add_argument(
208
198
  "--before",
209
199
  help="What to do before connecting to the chip",
210
- choices=["default_reset", "usb_reset", "no_reset", "no_reset_no_sync"],
211
- default="default_reset",
200
+ choices=["default-reset", "usb-reset", "no-reset", "no-reset-no-sync"],
201
+ default="default-reset",
212
202
  )
213
203
 
214
204
  init_parser.add_argument(
@@ -317,9 +307,9 @@ def main(custom_commandline=None, esp=None):
317
307
  if args.operation is None:
318
308
  parser.print_help()
319
309
  parser.exit(1)
320
- assert (
321
- len(unused_args) == 0
322
- ), 'Not all commands were recognized "{}"'.format(unused_args)
310
+ assert len(unused_args) == 0, (
311
+ 'Not all commands were recognized "{}"'.format(unused_args)
312
+ )
323
313
 
324
314
  operation_func = vars(efuse_operations)[args.operation]
325
315
  # each 'operation' is a module-level function of the same name
@@ -363,7 +353,10 @@ def _main():
363
353
  try:
364
354
  main()
365
355
  except esptool.FatalError as e:
366
- 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.")
367
360
  sys.exit(2)
368
361
 
369
362
 
@@ -12,7 +12,6 @@ from bitstring import BitArray, BitStream, CreationError
12
12
  import esptool
13
13
 
14
14
  from . import util
15
- from typing import List
16
15
 
17
16
 
18
17
  class CheckArgValue(object):
@@ -392,12 +391,14 @@ class EfuseBlockBase(EfuseProtectBase):
392
391
  # if the required bits are not set then we need to re-burn it again.
393
392
  if burns < 2:
394
393
  print(
395
- f"\nRepeat burning BLOCK{self.id} (#{burns + 2}) 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
 
@@ -244,6 +244,7 @@ def burn_key(esp, efuses, args, digest=None):
244
244
  data = b"\x00" * 8 + data
245
245
  else:
246
246
  data = datafile.read()
247
+ datafile.close()
247
248
  else:
248
249
  data = datafile
249
250
 
@@ -13,7 +13,6 @@ from ..mem_definition_base import (
13
13
  EfuseFieldsBase,
14
14
  EfuseRegistersBase,
15
15
  )
16
- from typing import List
17
16
 
18
17
 
19
18
  class EfuseDefineRegisters(EfuseRegistersBase):
@@ -116,7 +115,7 @@ class EfuseDefineFields(EfuseFieldsBase):
116
115
  self.EFUSES = []
117
116
  self.KEYBLOCKS = []
118
117
  self.BLOCK2_CALIBRATION_EFUSES = []
119
- self.CALC: 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
 
@@ -367,6 +367,7 @@ def burn_key(esp, efuses, args, digest=None):
367
367
 
368
368
  if digest is None:
369
369
  data = datafile.read()
370
+ datafile.close()
370
371
  else:
371
372
  data = datafile
372
373
 
@@ -368,6 +368,7 @@ def burn_key(esp, efuses, args, digest=None):
368
368
 
369
369
  if digest is None:
370
370
  data = datafile.read()
371
+ datafile.close()
371
372
  else:
372
373
  data = datafile
373
374
 
@@ -6,7 +6,6 @@
6
6
 
7
7
  from collections import Counter, namedtuple
8
8
  import esptool
9
- from typing import Optional, List
10
9
 
11
10
  from .csv_table_parser import CSVFuseTable
12
11
 
@@ -23,7 +22,7 @@ class EfuseRegistersBase(object):
23
22
 
24
23
 
25
24
  class EfuseBlocksBase(object):
26
- BLOCKS: Optional[List] = None
25
+ BLOCKS: list | None = None
27
26
  NamedtupleBlock = namedtuple(
28
27
  "NamedtupleBlock",
29
28
  "name alias id rd_addr wr_addr write_disable_bit "
@@ -53,10 +52,10 @@ class Field:
53
52
  word = None
54
53
  pos = None
55
54
  bit_len = 0
56
- alt_names: List[str] = []
55
+ alt_names: list[str] = []
57
56
  type = ""
58
57
  write_disable_bit = None
59
- read_disable_bit = None
58
+ read_disable_bit: list[int] | None = None
60
59
  category = "config"
61
60
  class_type = ""
62
61
  description = ""
@@ -65,7 +64,7 @@ class Field:
65
64
 
66
65
  class EfuseFieldsBase(object):
67
66
  def __init__(self, e_desc, extend_efuse_table_file) -> None:
68
- self.ALL_EFUSES: List = []
67
+ self.ALL_EFUSES: list = []
69
68
 
70
69
  def set_category_and_class_type(efuse, name):
71
70
  def includes(name, names):