esptool 4.8.dev5__tar.gz → 4.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. {esptool-4.8.dev5/esptool.egg-info → esptool-4.9.0}/PKG-INFO +21 -3
  2. esptool-4.9.0/esp_rfc2217_server/__init__.py +139 -0
  3. esptool-4.9.0/esp_rfc2217_server/__main__.py +9 -0
  4. esptool-4.9.0/esp_rfc2217_server/esp_port_manager.py +101 -0
  5. esptool-4.9.0/esp_rfc2217_server/redirector.py +89 -0
  6. esptool-4.9.0/esp_rfc2217_server.py +56 -0
  7. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/__init__.py +4 -0
  8. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/base_fields.py +36 -0
  9. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32/operations.py +22 -15
  10. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c2/fields.py +1 -1
  11. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c2/mem_definition.py +0 -3
  12. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c2/operations.py +2 -4
  13. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c3/fields.py +1 -1
  14. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c3/mem_definition.py +0 -4
  15. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c3/operations.py +2 -4
  16. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5/fields.py +18 -6
  17. esptool-4.9.0/espefuse/efuse/esp32c5/mem_definition.py +165 -0
  18. esptool-4.9.0/espefuse/efuse/esp32c5/operations.py +466 -0
  19. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5beta3/fields.py +5 -5
  20. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5beta3/mem_definition.py +0 -4
  21. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c6/fields.py +1 -1
  22. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c6/mem_definition.py +0 -4
  23. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c6/operations.py +2 -4
  24. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c61/fields.py +5 -5
  25. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c61/mem_definition.py +0 -4
  26. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c61/operations.py +5 -1
  27. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2/fields.py +5 -14
  28. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2/mem_definition.py +3 -5
  29. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2/operations.py +12 -12
  30. esptool-4.9.0/espefuse/efuse/esp32h21/emulate_efuse_controller.py +92 -0
  31. esptool-4.9.0/espefuse/efuse/esp32h21/fields.py +449 -0
  32. {esptool-4.8.dev5/espefuse/efuse/esp32c5 → esptool-4.9.0/espefuse/efuse/esp32h21}/mem_definition.py +2 -6
  33. esptool-4.9.0/espefuse/efuse/esp32h21/operations.py +406 -0
  34. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2beta1/fields.py +1 -1
  35. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -4
  36. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2beta1/operations.py +2 -4
  37. esptool-4.9.0/espefuse/efuse/esp32h4/emulate_efuse_controller.py +92 -0
  38. esptool-4.9.0/espefuse/efuse/esp32h4/fields.py +452 -0
  39. esptool-4.9.0/espefuse/efuse/esp32h4/mem_definition.py +169 -0
  40. {esptool-4.8.dev5/espefuse/efuse/esp32c5 → esptool-4.9.0/espefuse/efuse/esp32h4}/operations.py +8 -14
  41. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32p4/fields.py +5 -6
  42. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32p4/mem_definition.py +0 -4
  43. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32p4/operations.py +11 -3
  44. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s2/fields.py +1 -1
  45. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s2/mem_definition.py +0 -4
  46. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s2/operations.py +19 -17
  47. esptool-4.9.0/espefuse/efuse/esp32s3/__init__.py +3 -0
  48. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3/fields.py +14 -1
  49. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3/mem_definition.py +10 -4
  50. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3/operations.py +19 -16
  51. esptool-4.9.0/espefuse/efuse/esp32s3beta2/__init__.py +3 -0
  52. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3beta2/fields.py +1 -1
  53. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -4
  54. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3beta2/operations.py +2 -4
  55. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/mem_definition_base.py +14 -1
  56. esptool-4.9.0/espefuse/efuse_defs/esp32c5.yaml +123 -0
  57. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32c5beta3.yaml +41 -22
  58. esptool-4.9.0/espefuse/efuse_defs/esp32c61.yaml +105 -0
  59. esptool-4.9.0/espefuse/efuse_defs/esp32h2.yaml +107 -0
  60. esptool-4.8.dev5/espefuse/efuse_defs/esp32h2.yaml → esptool-4.9.0/espefuse/efuse_defs/esp32h21.yaml +2 -2
  61. esptool-4.9.0/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +3 -0
  62. esptool-4.9.0/espefuse/efuse_defs/esp32h4.yaml +92 -0
  63. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32p4.yaml +112 -69
  64. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32s3.yaml +6 -4
  65. {esptool-4.8.dev5 → esptool-4.9.0}/espsecure/__init__.py +31 -10
  66. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/__init__.py +146 -17
  67. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/bin_image.py +131 -71
  68. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/cmds.py +192 -69
  69. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/config.py +2 -0
  70. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/loader.py +125 -65
  71. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/reset.py +1 -1
  72. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/__init__.py +4 -0
  73. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32.py +4 -8
  74. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c2.py +7 -4
  75. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c3.py +17 -4
  76. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c5.py +54 -16
  77. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c5beta3.py +12 -3
  78. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c6.py +10 -6
  79. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c61.py +45 -6
  80. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32c6beta.py +0 -2
  81. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32h2.py +10 -4
  82. esptool-4.9.0/esptool/targets/esp32h21.py +107 -0
  83. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32h2beta1.py +0 -2
  84. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32h2beta2.py +0 -2
  85. esptool-4.9.0/esptool/targets/esp32h4.py +213 -0
  86. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32p4.py +87 -8
  87. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32s2.py +32 -33
  88. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32s3.py +38 -38
  89. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp32s3beta2.py +0 -2
  90. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/esp8266.py +1 -1
  91. esptool-4.9.0/esptool/targets/stub_flasher/1/.DS_Store +0 -0
  92. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/1/README.md +1 -1
  93. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32.json +8 -0
  94. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c2.json +8 -0
  95. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c3.json +8 -0
  96. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
  97. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c5beta3.json +8 -0
  98. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c6.json +8 -0
  99. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c61.json +8 -0
  100. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32c6beta.json +8 -0
  101. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32h2.json +8 -0
  102. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32h2beta1.json +8 -0
  103. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32h2beta2.json +8 -0
  104. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
  105. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32s2.json +8 -0
  106. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32s3.json +8 -0
  107. esptool-4.9.0/esptool/targets/stub_flasher/1/esp32s3beta2.json +8 -0
  108. {esptool-4.8.dev5 → esptool-4.9.0/esptool.egg-info}/PKG-INFO +21 -3
  109. {esptool-4.8.dev5 → esptool-4.9.0}/esptool.egg-info/SOURCES.txt +21 -0
  110. {esptool-4.8.dev5 → esptool-4.9.0}/esptool.egg-info/requires.txt +1 -1
  111. esptool-4.9.0/esptool.egg-info/top_level.txt +7 -0
  112. {esptool-4.8.dev5 → esptool-4.9.0}/pyproject.toml +4 -3
  113. {esptool-4.8.dev5 → esptool-4.9.0}/setup.py +1 -1
  114. esptool-4.8.dev5/esp_rfc2217_server.py +0 -311
  115. esptool-4.8.dev5/espefuse/efuse_defs/esp32c5.yaml +0 -85
  116. esptool-4.8.dev5/espefuse/efuse_defs/esp32c61.yaml +0 -69
  117. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32.json +0 -8
  118. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32c2.json +0 -8
  119. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32c3.json +0 -8
  120. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32c5.json +0 -8
  121. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -8
  122. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32c6.json +0 -8
  123. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -8
  124. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32h2.json +0 -8
  125. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -8
  126. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -8
  127. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32p4.json +0 -8
  128. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32s2.json +0 -8
  129. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32s3.json +0 -8
  130. esptool-4.8.dev5/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -8
  131. esptool-4.8.dev5/esptool.egg-info/top_level.txt +0 -6
  132. {esptool-4.8.dev5 → esptool-4.9.0}/LICENSE +0 -0
  133. {esptool-4.8.dev5 → esptool-4.9.0}/MANIFEST.in +0 -0
  134. {esptool-4.8.dev5 → esptool-4.9.0}/README.md +0 -0
  135. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/__main__.py +0 -0
  136. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/__init__.py +0 -0
  137. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/base_operations.py +0 -0
  138. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/csv_table_parser.py +0 -0
  139. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
  140. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32/__init__.py +0 -0
  141. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
  142. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32/fields.py +0 -0
  143. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32/mem_definition.py +0 -0
  144. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c2/__init__.py +0 -0
  145. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
  146. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c3/__init__.py +0 -0
  147. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
  148. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5/__init__.py +0 -0
  149. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
  150. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5beta3/__init__.py +0 -0
  151. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -0
  152. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c5beta3/operations.py +0 -0
  153. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c6/__init__.py +0 -0
  154. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
  155. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c61/__init__.py +0 -0
  156. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
  157. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2/__init__.py +0 -0
  158. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
  159. {esptool-4.8.dev5/espefuse/efuse/esp32h2beta1 → esptool-4.9.0/espefuse/efuse/esp32h21}/__init__.py +0 -0
  160. {esptool-4.8.dev5/espefuse/efuse/esp32p4 → esptool-4.9.0/espefuse/efuse/esp32h2beta1}/__init__.py +0 -0
  161. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -0
  162. {esptool-4.8.dev5/espefuse/efuse/esp32s2 → esptool-4.9.0/espefuse/efuse/esp32h4}/__init__.py +0 -0
  163. {esptool-4.8.dev5/espefuse/efuse/esp32s3 → esptool-4.9.0/espefuse/efuse/esp32p4}/__init__.py +0 -0
  164. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
  165. {esptool-4.8.dev5/espefuse/efuse/esp32s3beta2 → esptool-4.9.0/espefuse/efuse/esp32s2}/__init__.py +0 -0
  166. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
  167. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
  168. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -0
  169. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse/util.py +0 -0
  170. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32.yaml +0 -0
  171. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32c2.yaml +0 -0
  172. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32c3.yaml +0 -0
  173. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32c6.yaml +0 -0
  174. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse/efuse_defs/esp32s2.yaml +0 -0
  175. {esptool-4.8.dev5 → esptool-4.9.0}/espefuse.py +0 -0
  176. {esptool-4.8.dev5 → esptool-4.9.0}/espsecure/__main__.py +0 -0
  177. {esptool-4.8.dev5 → esptool-4.9.0}/espsecure/esp_hsm_sign/__init__.py +0 -0
  178. {esptool-4.8.dev5 → esptool-4.9.0}/espsecure/esp_hsm_sign/exceptions.py +0 -0
  179. {esptool-4.8.dev5 → esptool-4.9.0}/espsecure.py +0 -0
  180. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/__main__.py +0 -0
  181. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
  182. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
  183. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
  184. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/README.md +0 -0
  185. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32.json +0 -0
  186. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
  187. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
  188. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
  189. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
  190. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
  191. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
  192. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/uf2_writer.py +0 -0
  193. {esptool-4.8.dev5 → esptool-4.9.0}/esptool/util.py +0 -0
  194. {esptool-4.8.dev5 → esptool-4.9.0}/esptool.egg-info/dependency_links.txt +0 -0
  195. {esptool-4.8.dev5 → esptool-4.9.0}/esptool.py +0 -0
  196. {esptool-4.8.dev5 → esptool-4.9.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: esptool
3
- Version: 4.8.dev5
3
+ Version: 4.9.0
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,29 @@ 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
- License-File: LICENSE
48
+ Requires-Dist: python-pkcs11; extra == "hsm"
49
+ Dynamic: license-file
32
50
 
33
51
  # esptool.py
34
52
 
@@ -0,0 +1,139 @@
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(format="%(levelname)s: %(message)s", level=logging.INFO)
68
+ logging.getLogger("rfc2217").setLevel(level)
69
+
70
+ # connect to serial port
71
+ ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True, exclusive=True)
72
+ ser.timeout = 3 # required so that the reader thread can exit
73
+ # reset control line as no _remote_ "terminal" has been connected yet
74
+ ser.dtr = False
75
+ ser.rts = False
76
+
77
+ logging.info("RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit")
78
+
79
+ try:
80
+ ser.open()
81
+ except serial.SerialException as e:
82
+ logging.error(f"Could not open serial port {ser.name}: {e}")
83
+ sys.exit(1)
84
+
85
+ logging.info(f"Serving serial port: {ser.name}")
86
+ settings = ser.get_settings()
87
+
88
+ srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
89
+ srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
90
+ srv.bind(("", args.localport))
91
+ srv.listen(1)
92
+ logging.info(f"TCP/IP port: {args.localport}")
93
+
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"
96
+ logging.info(wait_msg)
97
+
98
+ while True:
99
+ srv.settimeout(5)
100
+ client_socket = None
101
+ try:
102
+ while client_socket is None:
103
+ try:
104
+ client_socket, addr = srv.accept()
105
+ except TimeoutError:
106
+ print(".", end="", flush=True)
107
+ except KeyboardInterrupt:
108
+ print("") # resetting inline print
109
+ logging.info("Exited with keyboard interrupt")
110
+ break
111
+ try:
112
+ logging.info(f"Connected by {addr[0]}:{addr[1]}")
113
+ client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
114
+ ser.rts = True
115
+ ser.dtr = True
116
+ # enter network <-> serial loop
117
+ r = Redirector(ser, client_socket, args.verbosity > 0, args.r0)
118
+ try:
119
+ r.shortcircuit()
120
+ finally:
121
+ logging.info("Disconnected")
122
+ r.stop()
123
+ client_socket.close()
124
+ ser.dtr = False
125
+ ser.rts = False
126
+ # Restore port settings (may have been changed by RFC 2217
127
+ # capable client)
128
+ ser.apply_settings(settings)
129
+ except KeyboardInterrupt:
130
+ sys.stdout.write("\n")
131
+ break
132
+ except socket.error as msg:
133
+ logging.error(str(msg))
134
+
135
+ logging.info("--- exit ---")
136
+
137
+
138
+ if __name__ == "__main__":
139
+ 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()
@@ -17,7 +17,9 @@ import espefuse.efuse.esp32c5beta3 as esp32c5beta3_efuse
17
17
  import espefuse.efuse.esp32c6 as esp32c6_efuse
18
18
  import espefuse.efuse.esp32c61 as esp32c61_efuse
19
19
  import espefuse.efuse.esp32h2 as esp32h2_efuse
20
+ import espefuse.efuse.esp32h21 as esp32h21_efuse
20
21
  import espefuse.efuse.esp32h2beta1 as esp32h2beta1_efuse
22
+ import espefuse.efuse.esp32h4 as esp32h4_efuse
21
23
  import espefuse.efuse.esp32p4 as esp32p4_efuse
22
24
  import espefuse.efuse.esp32s2 as esp32s2_efuse
23
25
  import espefuse.efuse.esp32s3 as esp32s3_efuse
@@ -61,6 +63,8 @@ SUPPORTED_CHIPS = {
61
63
  "ESP32-C5(beta3)", esp32c5beta3_efuse, esptool.targets.ESP32C5BETA3ROM
62
64
  ),
63
65
  "esp32h2": DefChip("ESP32-H2", esp32h2_efuse, esptool.targets.ESP32H2ROM),
66
+ "esp32h21": DefChip("ESP32-H21", esp32h21_efuse, esptool.targets.ESP32H21ROM),
67
+ "esp32h4": DefChip("ESP32-H4", esp32h4_efuse, esptool.targets.ESP32H4ROM),
64
68
  "esp32p4": DefChip("ESP32-P4", esp32p4_efuse, esptool.targets.ESP32P4ROM),
65
69
  "esp32h2beta1": DefChip(
66
70
  "ESP32-H2(beta1)", esp32h2beta1_efuse, esptool.targets.ESP32H2BETA1ROM
@@ -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):
@@ -157,22 +157,27 @@ def set_flash_voltage(esp, efuses, args):
157
157
  )
158
158
 
159
159
  if args.voltage == "OFF":
160
- msg = "Disable internal flash voltage regulator (VDD_SDIO). "
161
- "SPI flash will need to be powered from an external source.\n"
162
- "The following efuse is burned: XPD_SDIO_FORCE.\n"
163
- "It is possible to later re-enable the internal regulator (%s) " % (
164
- "to 3.3V" if sdio_tieh.get() != 0 else "to 1.8V or 3.3V"
160
+ print(
161
+ "Disable internal flash voltage regulator (VDD_SDIO). "
162
+ "SPI flash will need to be powered from an external source.\n"
163
+ "The following eFuse is burned: XPD_SDIO_FORCE.\n"
164
+ "It is possible to later re-enable the internal regulator"
165
+ f"{'to 3.3V' if sdio_tieh.get() != 0 else 'to 1.8V or 3.3V'}"
166
+ "by burning an additional eFuse"
165
167
  )
166
- "by burning an additional efuse"
167
168
  elif args.voltage == "1.8V":
168
- msg = "Set internal flash voltage regulator (VDD_SDIO) to 1.8V.\n"
169
- "The following efuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG.\n"
170
- "It is possible to later increase the voltage to 3.3V (permanently) "
171
- "by burning additional efuse XPD_SDIO_TIEH"
169
+ print(
170
+ "Set internal flash voltage regulator (VDD_SDIO) to 1.8V.\n"
171
+ "The following eFuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG.\n"
172
+ "It is possible to later increase the voltage to 3.3V (permanently) "
173
+ "by burning additional eFuse XPD_SDIO_TIEH"
174
+ )
172
175
  elif args.voltage == "3.3V":
173
- msg = "Enable internal flash voltage regulator (VDD_SDIO) to 3.3V.\n"
174
- "The following efuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG, XPD_SDIO_TIEH."
175
- print(msg)
176
+ print(
177
+ "Enable internal flash voltage regulator (VDD_SDIO) to 3.3V.\n"
178
+ "The following eFuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG, XPD_SDIO_TIEH."
179
+ )
180
+
176
181
  sdio_force.save(1) # Disable GPIO12
177
182
  if args.voltage != "OFF":
178
183
  sdio_reg.save(1) # Enable internal regulator
@@ -271,8 +276,10 @@ def burn_key(esp, efuses, args):
271
276
  "The key block will left readable and writeable (due to --no-protect-key)"
272
277
  )
273
278
  else:
274
- msg += "The key block will be read and write protected "
275
- "(no further changes or readback)"
279
+ msg += (
280
+ "The key block will be read and write protected "
281
+ "(no further changes or readback)"
282
+ )
276
283
  print(msg, "\n")
277
284
  if not efuses.burn_all(check_batch_mode=True):
278
285
  return
@@ -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["BLK_VERSION_MINOR"].get() == 1:
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
- if efuses["BLK_VERSION_MINOR"].get() == 1:
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["BLK_VERSION_MAJOR"].get() == 1:
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
- if efuses["BLK_VERSION_MAJOR"].get() == 1:
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