esptool 4.12.dev1__tar.gz → 4.12.dev2__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 (193) hide show
  1. {esptool-4.12.dev1/esptool.egg-info → esptool-4.12.dev2}/PKG-INFO +1 -1
  2. {esptool-4.12.dev1 → esptool-4.12.dev2}/esp_rfc2217_server/__init__.py +10 -2
  3. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/base_operations.py +3 -0
  4. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/util.py +19 -0
  5. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32c5.yaml +32 -32
  6. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32p4.yaml +3 -3
  7. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32p4_v3.0.yaml +1 -1
  8. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/__init__.py +5 -4
  9. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/cmds.py +5 -6
  10. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/loader.py +40 -42
  11. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c2.py +1 -1
  12. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c5.py +1 -1
  13. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c61.py +1 -1
  14. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32h4.py +1 -1
  15. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32p4.py +29 -7
  16. esptool-4.12.dev2/esptool/targets/stub_flasher/2/LICENSE-APACHE +201 -0
  17. esptool-4.12.dev2/esptool/targets/stub_flasher/2/LICENSE-MIT +21 -0
  18. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/2/README.md +1 -1
  19. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32.json +8 -0
  20. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32c2.json +8 -0
  21. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32c3.json +8 -0
  22. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32c5.json +8 -0
  23. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32c6.json +8 -0
  24. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32c61.json +8 -0
  25. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32h2.json +8 -0
  26. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32p4-rev1.json +8 -0
  27. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32p4.json +8 -0
  28. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32s2.json +8 -0
  29. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp32s3.json +30 -0
  30. esptool-4.12.dev2/esptool/targets/stub_flasher/2/esp8266.json +8 -0
  31. {esptool-4.12.dev1 → esptool-4.12.dev2/esptool.egg-info}/PKG-INFO +1 -1
  32. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool.egg-info/SOURCES.txt +7 -3
  33. {esptool-4.12.dev1 → esptool-4.12.dev2}/pyproject.toml +1 -1
  34. esptool-4.12.dev1/esptool/targets/stub_flasher/1/esp32p4.json +0 -8
  35. esptool-4.12.dev1/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -201
  36. esptool-4.12.dev1/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -25
  37. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32.json +0 -1
  38. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32c2.json +0 -1
  39. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32c3.json +0 -1
  40. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32c6.json +0 -1
  41. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32h2.json +0 -1
  42. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32s2.json +0 -1
  43. esptool-4.12.dev1/esptool/targets/stub_flasher/2/esp32s3.json +0 -1
  44. {esptool-4.12.dev1 → esptool-4.12.dev2}/LICENSE +0 -0
  45. {esptool-4.12.dev1 → esptool-4.12.dev2}/MANIFEST.in +0 -0
  46. {esptool-4.12.dev1 → esptool-4.12.dev2}/README.md +0 -0
  47. {esptool-4.12.dev1 → esptool-4.12.dev2}/esp_rfc2217_server/__main__.py +0 -0
  48. {esptool-4.12.dev1 → esptool-4.12.dev2}/esp_rfc2217_server/esp_port_manager.py +0 -0
  49. {esptool-4.12.dev1 → esptool-4.12.dev2}/esp_rfc2217_server/redirector.py +0 -0
  50. {esptool-4.12.dev1 → esptool-4.12.dev2}/esp_rfc2217_server.py +0 -0
  51. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/__init__.py +0 -0
  52. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/__main__.py +0 -0
  53. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/__init__.py +0 -0
  54. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/base_fields.py +0 -0
  55. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/csv_table_parser.py +0 -0
  56. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/emulate_efuse_controller_base.py +0 -0
  57. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32/__init__.py +0 -0
  58. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32/emulate_efuse_controller.py +0 -0
  59. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32/fields.py +0 -0
  60. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32/mem_definition.py +0 -0
  61. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32/operations.py +0 -0
  62. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c2/__init__.py +0 -0
  63. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +0 -0
  64. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c2/fields.py +0 -0
  65. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c2/mem_definition.py +0 -0
  66. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c2/operations.py +0 -0
  67. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c3/__init__.py +0 -0
  68. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +0 -0
  69. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c3/fields.py +0 -0
  70. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c3/mem_definition.py +0 -0
  71. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c3/operations.py +0 -0
  72. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5/__init__.py +0 -0
  73. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +0 -0
  74. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5/fields.py +0 -0
  75. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5/mem_definition.py +0 -0
  76. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5/operations.py +0 -0
  77. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5beta3/__init__.py +0 -0
  78. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5beta3/emulate_efuse_controller.py +0 -0
  79. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5beta3/fields.py +0 -0
  80. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5beta3/mem_definition.py +0 -0
  81. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c5beta3/operations.py +0 -0
  82. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c6/__init__.py +0 -0
  83. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +0 -0
  84. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c6/fields.py +0 -0
  85. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c6/mem_definition.py +0 -0
  86. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c6/operations.py +0 -0
  87. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c61/__init__.py +0 -0
  88. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +0 -0
  89. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c61/fields.py +0 -0
  90. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c61/mem_definition.py +0 -0
  91. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32c61/operations.py +0 -0
  92. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2/__init__.py +0 -0
  93. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +0 -0
  94. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2/fields.py +0 -0
  95. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2/mem_definition.py +0 -0
  96. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2/operations.py +0 -0
  97. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h21/__init__.py +0 -0
  98. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +0 -0
  99. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h21/fields.py +0 -0
  100. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h21/mem_definition.py +0 -0
  101. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h21/operations.py +0 -0
  102. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2beta1/__init__.py +0 -0
  103. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2beta1/emulate_efuse_controller.py +0 -0
  104. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2beta1/fields.py +0 -0
  105. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2beta1/mem_definition.py +0 -0
  106. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h2beta1/operations.py +0 -0
  107. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h4/__init__.py +0 -0
  108. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +0 -0
  109. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h4/fields.py +0 -0
  110. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h4/mem_definition.py +0 -0
  111. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32h4/operations.py +0 -0
  112. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32p4/__init__.py +0 -0
  113. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +0 -0
  114. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32p4/fields.py +0 -0
  115. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32p4/mem_definition.py +0 -0
  116. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32p4/operations.py +0 -0
  117. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s2/__init__.py +0 -0
  118. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +0 -0
  119. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s2/fields.py +0 -0
  120. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s2/mem_definition.py +0 -0
  121. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s2/operations.py +0 -0
  122. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3/__init__.py +0 -0
  123. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +0 -0
  124. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3/fields.py +0 -0
  125. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3/mem_definition.py +0 -0
  126. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3/operations.py +0 -0
  127. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3beta2/__init__.py +0 -0
  128. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3beta2/emulate_efuse_controller.py +0 -0
  129. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3beta2/fields.py +0 -0
  130. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3beta2/mem_definition.py +0 -0
  131. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/esp32s3beta2/operations.py +0 -0
  132. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse/mem_definition_base.py +0 -0
  133. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32.yaml +0 -0
  134. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32c2.yaml +0 -0
  135. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32c3.yaml +0 -0
  136. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32c5beta3.yaml +0 -0
  137. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32c6.yaml +0 -0
  138. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32c61.yaml +0 -0
  139. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32h2.yaml +0 -0
  140. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32h21.yaml +0 -0
  141. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
  142. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32h4.yaml +0 -0
  143. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32s2.yaml +0 -0
  144. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse/efuse_defs/esp32s3.yaml +0 -0
  145. {esptool-4.12.dev1 → esptool-4.12.dev2}/espefuse.py +0 -0
  146. {esptool-4.12.dev1 → esptool-4.12.dev2}/espsecure/__init__.py +0 -0
  147. {esptool-4.12.dev1 → esptool-4.12.dev2}/espsecure/__main__.py +0 -0
  148. {esptool-4.12.dev1 → esptool-4.12.dev2}/espsecure/esp_hsm_sign/__init__.py +0 -0
  149. {esptool-4.12.dev1 → esptool-4.12.dev2}/espsecure/esp_hsm_sign/exceptions.py +0 -0
  150. {esptool-4.12.dev1 → esptool-4.12.dev2}/espsecure.py +0 -0
  151. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/__main__.py +0 -0
  152. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/bin_image.py +0 -0
  153. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/config.py +0 -0
  154. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/reset.py +0 -0
  155. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/__init__.py +0 -0
  156. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32.py +0 -0
  157. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c3.py +0 -0
  158. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c5beta3.py +0 -0
  159. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c6.py +0 -0
  160. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32c6beta.py +0 -0
  161. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32h2.py +0 -0
  162. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32h21.py +0 -0
  163. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32h2beta1.py +0 -0
  164. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32h2beta2.py +0 -0
  165. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32s2.py +0 -0
  166. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32s3.py +0 -0
  167. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp32s3beta2.py +0 -0
  168. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/esp8266.py +0 -0
  169. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/README.md +0 -0
  170. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32.json +0 -0
  171. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
  172. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
  173. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c5.json +0 -0
  174. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c5beta3.json +0 -0
  175. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
  176. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c61.json +0 -0
  177. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32c6beta.json +0 -0
  178. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
  179. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32h2beta1.json +0 -0
  180. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32h2beta2.json +0 -0
  181. /esptool-4.12.dev1/esptool/targets/stub_flasher/1/esp32p4rc1.json → /esptool-4.12.dev2/esptool/targets/stub_flasher/1/esp32p4-rev1.json +0 -0
  182. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
  183. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
  184. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp32s3beta2.json +0 -0
  185. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
  186. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/uf2_writer.py +0 -0
  187. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool/util.py +0 -0
  188. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool.egg-info/dependency_links.txt +0 -0
  189. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool.egg-info/requires.txt +0 -0
  190. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool.egg-info/top_level.txt +0 -0
  191. {esptool-4.12.dev1 → esptool-4.12.dev2}/esptool.py +0 -0
  192. {esptool-4.12.dev1 → esptool-4.12.dev2}/setup.cfg +0 -0
  193. {esptool-4.12.dev1 → esptool-4.12.dev2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esptool
3
- Version: 4.12.dev1
3
+ Version: 4.12.dev2
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+
@@ -91,8 +91,16 @@ def main():
91
91
  srv.listen(1)
92
92
  logging.info(f"TCP/IP port: {args.localport}")
93
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"
94
+ try:
95
+ host_ip = socket.gethostbyname(socket.gethostname())
96
+ except OSError:
97
+ # CI/minimal containers often have no DNS for gethostname(); the server
98
+ # is still reachable on loopback.
99
+ host_ip = "127.0.0.1"
100
+ wait_msg = (
101
+ "Waiting for connection ... use the 'rfc2217://"
102
+ f"{host_ip}:{args.localport}?ign_set_control' as a PORT"
103
+ )
96
104
  logging.info(wait_msg)
97
105
 
98
106
  while True:
@@ -356,6 +356,9 @@ def summary(esp, efuses, args):
356
356
  json_efuse[e.name] = {
357
357
  "name": e.name,
358
358
  "value": base_value if readable else value,
359
+ "raw_value": util.json_raw_value_hex(
360
+ e.efuse_type, e.get_bitstring()
361
+ ),
359
362
  "readable": readable,
360
363
  "writeable": writeable,
361
364
  "description": e.description,
@@ -6,12 +6,31 @@
6
6
 
7
7
  import esptool
8
8
 
9
+ from bitstring import Bits
10
+
9
11
 
10
12
  def hexify(bitstring, separator=""):
11
13
  as_bytes = tuple(b for b in bitstring)
12
14
  return separator.join(("%02x" % b) for b in as_bytes)
13
15
 
14
16
 
17
+ def json_raw_value_hex(efuse_type: str, bits: Bits) -> str:
18
+ """``0x``-prefixed lowercase hex string for JSON ``raw_value``,
19
+ same style for all field types.
20
+
21
+ For ``bytes`` fields, uses the same byte order as the text/JSON ``value`` hex
22
+ (``bits.bytes`` reversed). For other types, encodes the field bit pattern with
23
+ leading zero bits padded to a nibble boundary so ``Bits.hex`` is defined.
24
+ """
25
+ if efuse_type.startswith("bytes"):
26
+ return "0x" + str(bits.bytes[::-1].hex())
27
+ b = bits if isinstance(bits, Bits) else Bits(bits)
28
+ pad = (4 - (b.len % 4)) % 4
29
+ if pad:
30
+ b = Bits(pad) + b
31
+ return "0x" + str(b.hex)
32
+
33
+
15
34
  def popcnt(b):
16
35
  """Return number of "1" bits set in 'b'"""
17
36
  return len([x for x in bin(b) if x == "1"])
@@ -3,29 +3,29 @@ EFUSES:
3
3
  WR_DIS : {show: y, blk : 0, word: 0, pos : 0, len : 32, start : 0, type : 'uint:32', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Disable programming of individual eFuses, rloc: EFUSE_RD_WR_DIS_REG, bloc: 'B0,B1,B2,B3'}
4
4
  RD_DIS : {show: y, blk : 0, word: 1, pos : 0, len : 7, start : 32, type : 'uint:7', wr_dis : 0, rd_dis: null, alt : '', dict : '', desc: Disable reading from BlOCK4-10, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[6:0]', bloc: 'B4[6:0]'}
5
5
  BOOTLOADER_ANTI_ROLLBACK_SECURE_VERSION_HI: {show: y, blk : 0, word: 1, pos : 7, len : 1, start : 39, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Represents the anti-rollback secure version of the 2nd stage bootloader used by the ROM bootloader (the high part of the field), rloc: 'EFUSE_RD_REPEAT_DATA0_REG[7]', bloc: 'B4[7]'}
6
- DIS_ICACHE : {show: y, blk : 0, word: 1, pos : 8, len : 1, start : 40, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether cache is disabled, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[8]', bloc: 'B5[0]'}
7
- DIS_USB_JTAG : {show: y, blk : 0, word: 1, pos : 9, len : 1, start : 41, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: 'Represents whether the USB-to-JTAG function in USB Serial/JTAG is disabled. Note that EFUSE_DIS_USB_JTAG is available only when EFUSE_DIS_USB_SERIAL_JTAG is configured to 0', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[9]', bloc: 'B5[1]'}
8
- BOOTLOADER_ANTI_ROLLBACK_EN : {show: y, blk : 0, word: 1, pos: 10, len : 1, start : 42, type : bool, wr_dis: null, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Enabled"}', desc: Represents whether the ani-rollback check for the 2nd stage bootloader is enabled, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[10]', bloc: 'B5[2]'}
9
- DIS_USB_SERIAL_JTAG : {show: n, blk : 0, word: 1, pos: 11, len : 1, start : 43, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether USB Serial/JTAG is disabled, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[11]', bloc: 'B5[3]'}
10
- DIS_FORCE_DOWNLOAD : {show: y, blk : 0, word: 1, pos: 12, len : 1, start : 44, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether the function that forces chip into Download mode is disabled, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[12]', bloc: 'B5[4]'}
11
- SPI_DOWNLOAD_MSPI_DIS : {show: y, blk : 0, word: 1, pos: 13, len : 1, start : 45, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether SPI0 controller during boot_mode_download is disabled, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[13]', bloc: 'B5[5]'}
12
- DIS_TWAI : {show: y, blk : 0, word: 1, pos: 14, len : 1, start : 46, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether TWAI function is disabled, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[14]', bloc: 'B5[6]'}
13
- JTAG_SEL_ENABLE : {show: y, blk : 0, word: 1, pos: 15, len : 1, start : 47, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Enabled"}', desc: 'Represents whether the selection of a JTAG signal source through the strapping pin value is enabled when all of EFUSE_DIS_PAD_JTAG; EFUSE_DIS_USB_JTAG and EFUSE_DIS_USB_SERIAL_JTAG are configured to 0', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[15]', bloc: 'B5[7]'}
6
+ DIS_ICACHE : {show: y, blk : 0, word: 1, pos : 8, len : 1, start : 40, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether cache is disabled. 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[8]', bloc: 'B5[0]'}
7
+ DIS_USB_JTAG : {show: y, blk : 0, word: 1, pos : 9, len : 1, start : 41, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the USB-to-JTAG function in USB Serial/JTAG is disabled. Note that EFUSE_DIS_USB_JTAG is available only when EFUSE_DIS_USB_SERIAL_JTAG is configured to 0. 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[9]', bloc: 'B5[1]'}
8
+ BOOTLOADER_ANTI_ROLLBACK_EN : {show: y, blk : 0, word: 1, pos: 10, len : 1, start : 42, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the anti-rollback check for the 2nd stage bootloader is enabled. 1: Enabled 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[10]', bloc: 'B5[2]'}
9
+ DIS_USB_SERIAL_JTAG : {show: n, blk : 0, word: 1, pos: 11, len : 1, start : 43, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether USB Serial/JTAG is disabled. 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[11]', bloc: 'B5[3]'}
10
+ DIS_FORCE_DOWNLOAD : {show: y, blk : 0, word: 1, pos: 12, len : 1, start : 44, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the function that forces chip into Download mode is disabled. 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[12]', bloc: 'B5[4]'}
11
+ SPI_DOWNLOAD_MSPI_DIS : {show: y, blk : 0, word: 1, pos: 13, len : 1, start : 45, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether SPI0 controller during boot_mode_download is disabled. 0: Enabled 1: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[13]', bloc: 'B5[5]'}
12
+ DIS_TWAI : {show: y, blk : 0, word: 1, pos: 14, len : 1, start : 46, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether TWAI function is disabled. 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[14]', bloc: 'B5[6]'}
13
+ JTAG_SEL_ENABLE : {show: y, blk : 0, word: 1, pos: 15, len : 1, start : 47, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the selection of a JTAG signal source through the strapping pin value is enabled when all of EFUSE_DIS_PAD_JTAG; EFUSE_DIS_USB_JTAG and EFUSE_DIS_USB_SERIAL_JTAG are configured to 0. 1: Enabled 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[15]', bloc: 'B5[7]'}
14
14
  SOFT_DIS_JTAG : {show: y, blk : 0, word: 1, pos: 16, len : 3, start : 48, type : 'uint:3', wr_dis : 31, rd_dis: null, alt : '', dict : '', desc: 'Represents whether PAD JTAG is disabled in the soft way. It can be restarted via HMAC. Odd count of bits with a value of 1: Disabled; Even count of bits with a value of 1: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[18:16]', bloc: 'B6[2:0]'}
15
- DIS_PAD_JTAG : {show: y, blk : 0, word: 1, pos: 19, len : 1, start : 51, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether PAD JTAG is disabled in the hard way (permanently), rloc: 'EFUSE_RD_REPEAT_DATA0_REG[19]', bloc: 'B6[3]'}
16
- DIS_DOWNLOAD_MANUAL_ENCRYPT : {show: y, blk : 0, word: 1, pos: 20, len : 1, start : 52, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether flash encryption is disabled (except in SPI boot mode), rloc: 'EFUSE_RD_REPEAT_DATA0_REG[20]', bloc: 'B6[4]'}
15
+ DIS_PAD_JTAG : {show: y, blk : 0, word: 1, pos: 19, len : 1, start : 51, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether PAD JTAG is disabled in the hard way (permanently). 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[19]', bloc: 'B6[3]'}
16
+ DIS_DOWNLOAD_MANUAL_ENCRYPT : {show: y, blk : 0, word: 1, pos: 20, len : 1, start : 52, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether flash encryption is disabled (except in SPI boot mode). 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[20]', bloc: 'B6[4]'}
17
17
  USB_DREFH : {show: n, blk : 0, word: 1, pos: 21, len : 2, start : 53, type : 'uint:2', wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: Represents the single-end input threshold vrefh; 1.76 V to 2 V with step of 80 mV, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[22:21]', bloc: 'B6[6:5]'}
18
18
  USB_DREFL : {show: n, blk : 0, word: 1, pos: 23, len : 2, start : 55, type : 'uint:2', wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: Represents the single-end input threshold vrefl; 1.76 V to 2 V with step of 80 mV, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[24:23]', bloc: 'B6[7],B7[0]'}
19
- USB_EXCHG_PINS : {show: y, blk : 0, word: 1, pos: 25, len : 1, start : 57, type : bool, wr_dis : 30, rd_dis: null, alt : '', dict: '{0: "Not exchanged", 1: "Exchanged"}', desc: Represents whether the D+ and D- pins is exchanged, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[25]', bloc: 'B7[1]'}
20
- VDD_SPI_AS_GPIO : {show: y, blk : 0, word: 1, pos: 26, len : 1, start : 58, type : bool, wr_dis : 30, rd_dis: null, alt : '', dict: '{0: "Not functioned", 1: "Functioned"}', desc: Represents whether VDD SPI pin is functioned as GPIO, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[26]', bloc: 'B7[2]'}
19
+ USB_EXCHG_PINS : {show: y, blk : 0, word: 1, pos: 25, len : 1, start : 57, type : bool, wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the D+ and D- pins is exchanged. 1: Exchanged 0: Not exchanged', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[25]', bloc: 'B7[1]'}
20
+ VDD_SPI_AS_GPIO : {show: y, blk : 0, word: 1, pos: 26, len : 1, start : 58, type : bool, wr_dis : 30, rd_dis: null, alt : '', dict : '', desc: 'Represents whether VDD SPI pin is functioned as GPIO. 1: Functioned 0: Not functioned', rloc: 'EFUSE_RD_REPEAT_DATA0_REG[26]', bloc: 'B7[2]'}
21
21
  WDT_DELAY_SEL : {show: y, blk : 0, word: 1, pos: 27, len : 2, start : 59, type : 'uint:2', wr_dis : 3, rd_dis: null, alt : '', dict : '', desc: "Represents RTC watchdog timeout threshold. The originally configured STG0 threshold * (2 ^ (EFUSE_WDT_DELAY_SEL + 1))", rloc: 'EFUSE_RD_REPEAT_DATA0_REG[28:27]', bloc: 'B7[4:3]'}
22
22
  BOOTLOADER_ANTI_ROLLBACK_SECURE_VERSION_LO: {show: y, blk : 0, word: 1, pos: 29, len : 3, start : 61, type : 'uint:3', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Represents the anti-rollback secure version of the 2nd stage bootloader used by the ROM bootloader (the low part of the field), rloc: 'EFUSE_RD_REPEAT_DATA0_REG[31:29]', bloc: 'B7[7:5]'}
23
23
  KM_DISABLE_DEPLOY_MODE : {show: y, blk : 0, word: 2, pos : 0, len : 4, start : 64, type : 'uint:4', wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the new key deployment of key manager is disabled. Bit0: ECDSA key deployment (0: Enabled, 1: Disabled). Bit1: XTS-AES (flash and PSRAM) key deployment (0: Enabled, 1: Disabled). Bit2: HMAC key deployment (0: Enabled, 1: Disabled). Bit3: DS key deployment (0: Enabled, 1: Disabled)', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[3:0]', bloc: 'B8[3:0]'}
24
- KM_RND_SWITCH_CYCLE : {show: y, blk : 0, word: 2, pos : 4, len : 2, start : 68, type : 'uint:2', wr_dis : 1, rd_dis: null, alt : '', dict: '{0: "Controlled by the KEYMNG_RND_SWITCH_CYCLE register", 1: "8 Key Manager clock cycles", 2: "16 Key Manager clock cycles", 3: "32 Key Manager clock cycles"}', desc: Represents the cycle at which the Key Manager switches random numbers, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[5:4]', bloc: 'B8[5:4]'}
24
+ KM_RND_SWITCH_CYCLE : {show: y, blk : 0, word: 2, pos : 4, len : 2, start : 68, type : 'uint:2', wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents the cycle at which the Key Manager switches random numbers. 0: Controlled by the KEYMNG_RND_SWITCH_CYCLE register. 1: 8 Key Manager clock cycles 2: 16 Key Manager clock cycles 3: 32 Key Manager clock cycles', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[5:4]', bloc: 'B8[5:4]'}
25
25
  KM_DEPLOY_ONLY_ONCE : {show: y, blk : 0, word: 2, pos : 6, len : 4, start : 70, type : 'uint:4', wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the corresponding key can be deployed only once. Bit0: ECDSA key (0: Multiple times, 1: Only once). Bit1: XTS-AES (flash and PSRAM) key (0: Multiple times, 1: Only once). Bit2: HMAC key (0: Multiple times, 1: Only once). Bit3: DS key (0: Multiple times, 1: Only once)', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[9:6]', bloc: 'B8[7:6],B9[1:0]'}
26
26
  FORCE_USE_KEY_MANAGER_KEY : {show: y, blk : 0, word: 2, pos: 10, len : 4, start : 74, type : 'uint:4', wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the corresponding key must come from Key Manager. Bit0: ECDSA key (0: Not required, 1: Required). Bit1: XTS-AES (flash and PSRAM) key (0: Not required, 1: Required). Bit2: HMAC key (0: Not required, 1: Required). Bit3: DS key (0: Not required, 1: Required)', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[13:10]', bloc: 'B9[5:2]'}
27
- FORCE_DISABLE_SW_INIT_KEY : {show: y, blk : 0, word: 2, pos: 14, len : 1, start : 78, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict: '{0: "Enable", 1: "Disable"}', desc: Represents whether to disable the use of the initialization key written by software and instead force use efuse_init_key, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[14]', bloc: 'B9[6]'}
28
- BOOTLOADER_ANTI_ROLLBACK_UPDATE_IN_ROM : {show: y, blk : 0, word: 2, pos: 15, len : 1, start : 79, type : bool, wr_dis: null, rd_dis: null, alt : '', dict: '{0: "Disable", 1: "Enable"}', desc: Represents whether the ani-rollback SECURE_VERSION will be updated from the ROM bootloader, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[15]', bloc: 'B9[7]'}
27
+ FORCE_DISABLE_SW_INIT_KEY : {show: y, blk : 0, word: 2, pos: 14, len : 1, start : 78, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents whether to disable the use of the initialization key written by software and instead force use efuse_init_key. 0: Enable 1: Disable', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[14]', bloc: 'B9[6]'}
28
+ BOOTLOADER_ANTI_ROLLBACK_UPDATE_IN_ROM : {show: y, blk : 0, word: 2, pos: 15, len : 1, start : 79, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the anti-rollback SECURE_VERSION will be updated from the ROM bootloader. 1: Enable 0: Disable', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[15]', bloc: 'B9[7]'}
29
29
  SPI_BOOT_CRYPT_CNT : {show: y, blk : 0, word: 2, pos: 16, len : 3, start : 80, type : 'uint:3', wr_dis : 4, rd_dis: null, alt : '', dict: '{0: "Disable", 1: "Enable", 3: "Disable", 7: "Enable"}', desc: Enables flash encryption when 1 or 3 bits are set and disables otherwise, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[18:16]', bloc: 'B10[2:0]'}
30
30
  SECURE_BOOT_KEY_REVOKE0 : {show: y, blk : 0, word: 2, pos: 19, len : 1, start : 83, type : bool, wr_dis : 5, rd_dis: null, alt : '', dict : '', desc: Revoke 1st secure boot key, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[19]', bloc: 'B10[3]'}
31
31
  SECURE_BOOT_KEY_REVOKE1 : {show: y, blk : 0, word: 2, pos: 20, len : 1, start : 84, type : bool, wr_dis : 6, rd_dis: null, alt : '', dict : '', desc: Revoke 2nd secure boot key, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[20]', bloc: 'B10[4]'}
@@ -36,32 +36,32 @@ EFUSES:
36
36
  KEY_PURPOSE_3 : {show: y, blk : 0, word: 3, pos : 5, len : 5, start: 101, type : 'uint:5', wr_dis : 11, rd_dis: null, alt : KEY3_PURPOSE, dict : '', desc: 'Represents the purpose of Key3.', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[9:5]', bloc: 'B12[7:5],B13[1:0]'}
37
37
  KEY_PURPOSE_4 : {show: y, blk : 0, word: 3, pos: 10, len : 5, start: 106, type : 'uint:5', wr_dis : 12, rd_dis: null, alt : KEY4_PURPOSE, dict : '', desc: 'Represents the purpose of Key4.', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[14:10]', bloc: 'B13[6:2]'}
38
38
  KEY_PURPOSE_5 : {show: y, blk : 0, word: 3, pos: 15, len : 5, start: 111, type : 'uint:5', wr_dis : 13, rd_dis: null, alt : KEY5_PURPOSE, dict : '', desc: 'Represents the purpose of Key5.', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[19:15]', bloc: 'B13[7],B14[3:0]'}
39
- SEC_DPA_LEVEL : {show: y, blk : 0, word: 3, pos: 20, len : 2, start: 116, type : 'uint:2', wr_dis : 14, rd_dis: null, alt : '', dict: '{0: "SEC_DPA_OFF", 1: "SEC_DPA_LOW", 2: "SEC_DPA_MIDDLE", 3: "SEC_DPA_HIGH"}', desc: Represents the security level of anti-DPA attack. The level is adjusted by configuring the clock random frequency division mode, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[21:20]', bloc: 'B14[5:4]'}
39
+ SEC_DPA_LEVEL : {show: y, blk : 0, word: 3, pos: 20, len : 2, start: 116, type : 'uint:2', wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents the security level of anti-DPA attack. The level is adjusted by configuring the clock random frequency division mode. 0: Security level is SEC_DPA_OFF 1: Security level is SEC_DPA_LOW 2: Security level is SEC_DPA_MIDDLE 3: Security level is SEC_DPA_HIGH.', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[21:20]', bloc: 'B14[5:4]'}
40
40
  RECOVERY_BOOTLOADER_FLASH_SECTOR_HI : {show: y, blk : 0, word: 3, pos: 22, len : 3, start: 118, type : 'uint:3', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Represents the starting flash sector (flash sector size is 0x1000) of the recovery bootloader used by the ROM bootloader If the primary bootloader fails. 0 and 0xFFF - this feature is disabled. (The high part of the field), rloc: 'EFUSE_RD_REPEAT_DATA2_REG[24:22]', bloc: 'B14[7:6],B15[0]'}
41
- SECURE_BOOT_EN : {show: y, blk : 0, word: 3, pos: 25, len : 1, start: 121, type : bool, wr_dis : 15, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Enabled"}', desc: Represents whether Secure Boot is enabled, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[25]', bloc: 'B15[1]'}
42
- SECURE_BOOT_AGGRESSIVE_REVOKE : {show: y, blk : 0, word: 3, pos: 26, len : 1, start: 122, type : bool, wr_dis : 16, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Enabled"}', desc: Represents whether aggressive revocation of Secure Boot is enabled, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[26]', bloc: 'B15[2]'}
43
- KM_XTS_KEY_LENGTH_256 : {show: y, blk : 0, word: 3, pos: 27, len : 1, start: 123, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict: '{0: "XTS-AES-256 key", 1: "XTS-AES-128 key"}', desc: Represents which key flash encryption uses, rloc: 'EFUSE_RD_REPEAT_DATA2_REG[27]', bloc: 'B15[3]'}
41
+ SECURE_BOOT_EN : {show: y, blk : 0, word: 3, pos: 25, len : 1, start: 121, type : bool, wr_dis : 15, rd_dis: null, alt : '', dict : '', desc: 'Represents whether Secure Boot is enabled. 1: Enabled 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[25]', bloc: 'B15[1]'}
42
+ SECURE_BOOT_AGGRESSIVE_REVOKE : {show: y, blk : 0, word: 3, pos: 26, len : 1, start: 122, type : bool, wr_dis : 16, rd_dis: null, alt : '', dict : '', desc: 'Represents whether aggressive revocation of Secure Boot is enabled. 1: Enabled 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[26]', bloc: 'B15[2]'}
43
+ KM_XTS_KEY_LENGTH_256 : {show: y, blk : 0, word: 3, pos: 27, len : 1, start: 123, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents which key flash encryption uses. 0: XTS-AES-256 key 1: XTS-AES-128 key', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[27]', bloc: 'B15[3]'}
44
44
  FLASH_TPUW : {show: y, blk : 0, word: 3, pos: 28, len : 4, start: 124, type : 'uint:4', wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents the flash waiting time after power-up. Measurement unit: ms. When the value is less than 15; the waiting time is the programmed value. Otherwise; the waiting time is a fixed value; i.e. 30 ms', rloc: 'EFUSE_RD_REPEAT_DATA2_REG[31:28]', bloc: 'B15[7:4]'}
45
- DIS_DOWNLOAD_MODE : {show: y, blk : 0, word: 4, pos : 0, len : 1, start: 128, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Enable", 1: "Disable"}', desc: Represents whether Download mode is disable or enable, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[0]', bloc: 'B16[0]'}
46
- DIS_DIRECT_BOOT : {show: y, blk : 0, word: 4, pos : 1, len : 1, start: 129, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Enable", 1: "Disable"}', desc: Represents whether direct boot mode is disabled or enabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[1]', bloc: 'B16[1]'}
47
- DIS_USB_SERIAL_JTAG_ROM_PRINT : {show: y, blk : 0, word: 4, pos : 2, len : 1, start: 130, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Enable", 1: "Disable"}', desc: Represents whether print from USB-Serial-JTAG is disabled or enabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[2]', bloc: 'B16[2]'}
48
- LOCK_KM_KEY : {show: y, blk : 0, word: 4, pos : 3, len : 1, start: 131, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict: '{0: "Not locked", 1: "Locked"}', desc: Represents whether the keys in the Key Manager are locked after deployment, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[3]', bloc: 'B16[3]'}
49
- DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE : {show: y, blk : 0, word: 4, pos : 4, len : 1, start: 132, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Enable", 1: "Disable"}', desc: Represents whether the USB-Serial-JTAG download function is disabled or enabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[4]', bloc: 'B16[4]'}
50
- ENABLE_SECURITY_DOWNLOAD : {show: y, blk : 0, word: 4, pos : 5, len : 1, start: 133, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Enabled"}', desc: 'Represents whether security download is enabled. Only downloading into flash is supported. Reading/writing RAM or registers is not supported (i.e. stub download is not supported)', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[5]', bloc: 'B16[5]'}
45
+ DIS_DOWNLOAD_MODE : {show: y, blk : 0, word: 4, pos : 0, len : 1, start: 128, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether Download mode is disable or enable. 1. Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[0]', bloc: 'B16[0]'}
46
+ DIS_DIRECT_BOOT : {show: y, blk : 0, word: 4, pos : 1, len : 1, start: 129, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether direct boot mode is disabled or enabled. 1. Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[1]', bloc: 'B16[1]'}
47
+ DIS_USB_SERIAL_JTAG_ROM_PRINT : {show: y, blk : 0, word: 4, pos : 2, len : 1, start: 130, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether print from USB-Serial-JTAG is disabled or enabled. 1. Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[2]', bloc: 'B16[2]'}
48
+ LOCK_KM_KEY : {show: y, blk : 0, word: 4, pos : 3, len : 1, start: 131, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the keys in the Key Manager are locked after deployment. 0: Not locked 1: Locked', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[3]', bloc: 'B16[3]'}
49
+ DIS_USB_SERIAL_JTAG_DOWNLOAD_MODE : {show: y, blk : 0, word: 4, pos : 4, len : 1, start: 132, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the USB-Serial-JTAG download function is disabled or enabled. 1: Disable 0: Enable', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[4]', bloc: 'B16[4]'}
50
+ ENABLE_SECURITY_DOWNLOAD : {show: y, blk : 0, word: 4, pos : 5, len : 1, start: 133, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether security download is enabled. Only downloading into flash is supported. Reading/writing RAM or registers is not supported (i.e. stub download is not supported). 1: Enabled 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[5]', bloc: 'B16[5]'}
51
51
  UART_PRINT_CONTROL : {show: y, blk : 0, word: 4, pos : 6, len : 2, start: 134, type : 'uint:2', wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Enable", 1: "Enable when GPIO8 is low at reset", 2: "Enable when GPIO8 is high at reset", 3: "Disable"}', desc: Set the default UART boot message output mode, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[7:6]', bloc: 'B16[7:6]'}
52
- FORCE_SEND_RESUME : {show: y, blk : 0, word: 4, pos : 8, len : 1, start: 136, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Not forced", 1: "Forced"}', desc: Represents whether ROM code is forced to send a resume command during SPI boot, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[8]', bloc: 'B17[0]'}
52
+ FORCE_SEND_RESUME : {show: y, blk : 0, word: 4, pos : 8, len : 1, start: 136, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether ROM code is forced to send a resume command during SPI boot. 1: Forced. 0: Not forced.', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[8]', bloc: 'B17[0]'}
53
53
  SECURE_VERSION : {show: y, blk : 0, word: 4, pos : 9, len : 9, start: 137, type : 'uint:9', wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: Represents the app secure version used by ESP-IDF anti-rollback feature, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[17:9]', bloc: 'B17[7:1],B18[1:0]'}
54
54
  RESERVE_0_146 : {show: n, blk : 0, word: 4, pos: 18, len : 7, start: 146, type : 'uint:7', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[24:18]', bloc: 'B18[7:2],B19[0]'}
55
- SECURE_BOOT_DISABLE_FAST_WAKE : {show: y, blk : 0, word: 4, pos: 25, len : 1, start: 153, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict: '{0: "Enabled", 1: "Disabled"}', desc: Represents whether FAST VERIFY ON WAKE is disabled when Secure Boot is enabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[25]', bloc: 'B19[1]'}
56
- HYS_EN_PAD : {show: y, blk : 0, word: 4, pos: 26, len : 1, start: 154, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Enabled"}', desc: Represents whether the hysteresis function of PAD0 - PAD27 is enabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[26]', bloc: 'B19[2]'}
57
- XTS_DPA_PSEUDO_LEVEL : {show: y, blk : 0, word: 4, pos: 27, len : 2, start: 155, type : 'uint:2', wr_dis : 14, rd_dis: null, alt : '', dict: '{0: "Disabled", 1: "Low", 2: "Moderate", 3: "High"}', desc: Represents the pseudo round level of XTS-AES anti-DPA attack, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[28:27]', bloc: 'B19[4:3]'}
58
- XTS_DPA_CLK_ENABLE : {show: y, blk : 0, word: 4, pos: 29, len : 1, start: 157, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict: '{0: "Disable", 1: "Enabled"}', desc: Represents whether XTS-AES anti-DPA attack clock is enabled, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[29]', bloc: 'B19[5]'}
55
+ SECURE_BOOT_DISABLE_FAST_WAKE : {show: y, blk : 0, word: 4, pos: 25, len : 1, start: 153, type : bool, wr_dis : 18, rd_dis: null, alt : '', dict : '', desc: 'Represents whether FAST VERIFY ON WAKE is disabled when Secure Boot is enabled. 1: Disabled 0: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[25]', bloc: 'B19[1]'}
56
+ HYS_EN_PAD : {show: y, blk : 0, word: 4, pos: 26, len : 1, start: 154, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the hysteresis function of PAD0 - PAD27 is enabled. 1: Enabled 0: Disabled', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[26]', bloc: 'B19[2]'}
57
+ XTS_DPA_PSEUDO_LEVEL : {show: y, blk : 0, word: 4, pos: 27, len : 2, start: 155, type : 'uint:2', wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents the pseudo round level of XTS-AES anti-DPA attack. 0: Disabled 1: Low 2: Moderate 3: High', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[28:27]', bloc: 'B19[4:3]'}
58
+ XTS_DPA_CLK_ENABLE : {show: y, blk : 0, word: 4, pos: 29, len : 1, start: 157, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents whether XTS-AES anti-DPA attack clock is enabled. 0: Disable 1: Enabled', rloc: 'EFUSE_RD_REPEAT_DATA3_REG[29]', bloc: 'B19[5]'}
59
59
  RESERVE_0_158 : {show: n, blk : 0, word: 4, pos: 30, len : 1, start: 158, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[30]', bloc: 'B19[6]'}
60
60
  SECURE_BOOT_SHA384_EN : {show: y, blk : 0, word: 4, pos: 31, len : 1, start: 159, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: Represents if the chip supports Secure Boot using SHA-384, rloc: 'EFUSE_RD_REPEAT_DATA3_REG[31]', bloc: 'B19[7]'}
61
61
  HUK_GEN_STATE : {show: y, blk : 0, word: 5, pos : 0, len : 9, start: 160, type : 'uint:9', wr_dis : 19, rd_dis: null, alt : '', dict : '', desc: 'Represents whether the HUK generate mode is valid. Odd count of bits with a value of 1: Invalid; Even count of bits with a value of 1: Valid', rloc: 'EFUSE_RD_REPEAT_DATA4_REG[8:0]', bloc: 'B20,B21[0]'}
62
62
  XTAL_48M_SEL : {show: y, blk : 0, word: 5, pos : 9, len : 3, start: 169, type : 'uint:3', wr_dis : 17, rd_dis: null, alt : '', dict : '', desc: 'Represents whether XTAL frequency is 48MHz or not. If not; 40MHz XTAL will be used. If this field contains Odd number bit 1: Enable 48MHz XTAL; Even number bit 1: Enable 40MHz XTAL', rloc: 'EFUSE_RD_REPEAT_DATA4_REG[11:9]', bloc: 'B21[3:1]'}
63
- XTAL_48M_SEL_MODE : {show: y, blk : 0, word: 5, pos: 12, len : 1, start: 172, type : bool, wr_dis : 17, rd_dis: null, alt : '', dict: '{0: "Strapping PAD state", 1: "EFUSE_XTAL_48M_SEL in eFuse"}', desc: Represents what determines the XTAL frequency in Joint Download Boot mode, rloc: 'EFUSE_RD_REPEAT_DATA4_REG[12]', bloc: 'B21[4]'}
64
- ECC_FORCE_CONST_TIME : {show: y, blk : 0, word: 5, pos: 13, len : 1, start: 173, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict: '{0: "Not force", 1: "Force"}', desc: Represents whether to force ECC to use constant-time mode for point multiplication calculation, rloc: 'EFUSE_RD_REPEAT_DATA4_REG[13]', bloc: 'B21[5]'}
63
+ XTAL_48M_SEL_MODE : {show: y, blk : 0, word: 5, pos: 12, len : 1, start: 172, type : bool, wr_dis : 17, rd_dis: null, alt : '', dict : '', desc: 'Represents what determines the XTAL frequency in Joint Download Boot mode. 0: Strapping PAD state 1: EFUSE_XTAL_48M_SEL in eFuse', rloc: 'EFUSE_RD_REPEAT_DATA4_REG[12]', bloc: 'B21[4]'}
64
+ ECC_FORCE_CONST_TIME : {show: y, blk : 0, word: 5, pos: 13, len : 1, start: 173, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: 'Represents whether to force ECC to use constant-time mode for point multiplication calculation. 0: Not force 1: Force', rloc: 'EFUSE_RD_REPEAT_DATA4_REG[13]', bloc: 'B21[5]'}
65
65
  RECOVERY_BOOTLOADER_FLASH_SECTOR_LO : {show: y, blk : 0, word: 5, pos: 14, len : 9, start: 174, type : 'uint:9', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Represents the starting flash sector (flash sector size is 0x1000) of the recovery bootloader used by the ROM bootloader If the primary bootloader fails. 0 and 0xFFF - this feature is disabled. (The low part of the field), rloc: 'EFUSE_RD_REPEAT_DATA4_REG[22:14]', bloc: 'B21[7:6],B22[6:0]'}
66
66
  RESERVE_0_183 : {show: n, blk : 0, word: 5, pos: 23, len : 9, start: 183, type : 'uint:9', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA4_REG[31:23]', bloc: 'B22[7],B23'}
67
67
  MAC : {show: y, blk : 1, word: 0, pos : 0, len : 48, start : 0, type : 'bytes:6', wr_dis : 20, rd_dis: null, alt : MAC_FACTORY, dict : '', desc: MAC address, rloc: EFUSE_RD_MAC_SYS0_REG, bloc: 'B0,B1,B2,B3,B4,B5'}
@@ -1,4 +1,4 @@
1
- VER_NO: 73787d3f5ae45b80abca925a7562120b
1
+ VER_NO: f7765f0ac3faf4b54f8c1f064307522c
2
2
  EFUSES:
3
3
  WR_DIS : {show: y, blk : 0, word: 0, pos : 0, len : 32, start : 0, type : 'uint:32', wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Disable programming of individual eFuses, rloc: EFUSE_RD_WR_DIS_REG, bloc: 'B0,B1,B2,B3'}
4
4
  RD_DIS : {show: y, blk : 0, word: 1, pos : 0, len : 7, start : 32, type : 'uint:7', wr_dis : 0, rd_dis: null, alt : '', dict : '', desc: Disable reading from BlOCK4-10, rloc: 'EFUSE_RD_REPEAT_DATA0_REG[6:0]', bloc: 'B4[6:0]'}
@@ -74,7 +74,7 @@ EFUSES:
74
74
  MAC : {show: y, blk : 1, word: 0, pos : 0, len : 48, start : 0, type : 'bytes:6', wr_dis : 20, rd_dis: null, alt : MAC_FACTORY, dict : '', desc: MAC address, rloc: EFUSE_RD_MAC_SYS_0_REG, bloc: 'B0,B1,B2,B3,B4,B5'}
75
75
  RESERVED_1_16 : {show: n, blk : 1, word: 1, pos: 16, len : 16, start : 48, type : 'uint:16', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Stores the extended bits of MAC address, rloc: 'EFUSE_RD_MAC_SYS_1_REG[31:16]', bloc: 'B6,B7'}
76
76
  WAFER_VERSION_MINOR : {show: y, blk : 1, word: 2, pos : 0, len : 4, start : 64, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Minor chip version, rloc: 'EFUSE_RD_MAC_SYS_2_REG[3:0]', bloc: 'B8[3:0]'}
77
- WAFER_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos : 4, len : 2, start : 68, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Major chip version, rloc: 'EFUSE_RD_MAC_SYS_2_REG[5:4]', bloc: 'B8[5:4]'}
77
+ WAFER_VERSION_MAJOR_LO : {show: y, blk : 1, word: 2, pos : 4, len : 2, start : 68, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Major chip version (lower 2 bits), rloc: 'EFUSE_RD_MAC_SYS_2_REG[5:4]', bloc: 'B8[5:4]'}
78
78
  DISABLE_WAFER_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos : 6, len : 1, start : 70, type : bool, wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Disables check of wafer version major, rloc: 'EFUSE_RD_MAC_SYS_2_REG[6]', bloc: 'B8[6]'}
79
79
  DISABLE_BLK_VERSION_MAJOR : {show: y, blk : 1, word: 2, pos : 7, len : 1, start : 71, type : bool, wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Disables check of blk version major, rloc: 'EFUSE_RD_MAC_SYS_2_REG[7]', bloc: 'B8[7]'}
80
80
  BLK_VERSION_MINOR : {show: y, blk : 1, word: 2, pos : 8, len : 3, start : 72, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: BLK_VERSION_MINOR of BLOCK2, rloc: 'EFUSE_RD_MAC_SYS_2_REG[10:8]', bloc: 'B9[2:0]'}
@@ -83,7 +83,7 @@ EFUSES:
83
83
  TEMP : {show: y, blk : 1, word: 2, pos: 16, len : 2, start : 80, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Operating temperature of the ESP chip, rloc: 'EFUSE_RD_MAC_SYS_2_REG[17:16]', bloc: 'B10[1:0]'}
84
84
  PSRAM_VENDOR : {show: y, blk : 1, word: 2, pos: 18, len : 2, start : 82, type : 'uint:2', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: PSRAM vendor, rloc: 'EFUSE_RD_MAC_SYS_2_REG[19:18]', bloc: 'B10[3:2]'}
85
85
  PKG_VERSION : {show: y, blk : 1, word: 2, pos: 20, len : 3, start : 84, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Package version, rloc: 'EFUSE_RD_MAC_SYS_2_REG[22:20]', bloc: 'B10[6:4]'}
86
- RESERVED_1_87 : {show: n, blk : 1, word: 2, pos: 23, len : 1, start : 87, type : bool, wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: reserved, rloc: 'EFUSE_RD_MAC_SYS_2_REG[23]', bloc: 'B10[7]'}
86
+ WAFER_VERSION_MAJOR_HI : {show: y, blk : 1, word: 2, pos: 23, len : 1, start : 87, type : bool, wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Major chip version (MSB), rloc: 'EFUSE_RD_MAC_SYS_2_REG[23]', bloc: 'B10[7]'}
87
87
  LDO_VO1_DREF : {show: y, blk : 1, word: 2, pos: 24, len : 4, start : 88, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Output VO1 parameter, rloc: 'EFUSE_RD_MAC_SYS_2_REG[27:24]', bloc: 'B11[3:0]'}
88
88
  LDO_VO2_DREF : {show: y, blk : 1, word: 2, pos: 28, len : 4, start : 92, type : 'uint:4', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Output VO2 parameter, rloc: 'EFUSE_RD_MAC_SYS_2_REG[31:28]', bloc: 'B11[7:4]'}
89
89
  LDO_VO1_MUL : {show: y, blk : 1, word: 3, pos : 0, len : 3, start : 96, type : 'uint:3', wr_dis : 20, rd_dis: null, alt : '', dict : '', desc: Output VO1 parameter, rloc: 'EFUSE_RD_MAC_SYS_3_REG[2:0]', bloc: 'B12[2:0]'}
@@ -25,7 +25,7 @@ EFUSES:
25
25
  FORCE_DISABLE_SW_INIT_KEY : {show: y, blk : 0, word: 2, pos: 13, len : 1, start : 77, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: Set this bit to disable software written init key; and force use efuse_init_key, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[13]', bloc: 'B9[5]'}
26
26
  KM_XTS_KEY_LENGTH_256 : {show: y, blk : 0, word: 2, pos: 14, len : 1, start : 78, type : bool, wr_dis : 1, rd_dis: null, alt : '', dict : '', desc: Set this bit to config flash encryption xts-512 key; else use xts-256 key when using the key manager, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[14]', bloc: 'B9[6]'}
27
27
  ECC_FORCE_CONST_TIME : {show: y, blk : 0, word: 2, pos: 15, len : 1, start : 79, type : bool, wr_dis : 14, rd_dis: null, alt : '', dict : '', desc: Set this bit to permanently turn on ECC const-time mode, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[15]', bloc: 'B9[7]'}
28
- RESERVE_0_80 : {show: n, blk : 0, word: 2, pos: 16, len : 1, start : 80, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Reserved; it was created by set_missed_fields_in_regs func, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[16]', bloc: 'B10[0]'}
28
+ DOWNLOAD_MODE_XPD_ON : {show: y, blk : 0, word: 2, pos: 16, len : 1, start : 80, type : bool, wr_dis: null, rd_dis: null, alt : '', dict : '', desc: Set this bit to power on XPD in download mode, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[16]', bloc: 'B10[0]'}
29
29
  WDT_DELAY_SEL : {show: y, blk : 0, word: 2, pos: 17, len : 1, start : 81, type : bool, wr_dis : 2, rd_dis: null, alt : '', dict : '', desc: Select lp wdt timeout threshold at startup = initial timeout value * (2 ^ (EFUSE_WDT_DELAY_SEL + 1)), rloc: 'EFUSE_RD_REPEAT_DATA1_REG[17]', bloc: 'B10[1]'}
30
30
  SPI_BOOT_CRYPT_CNT : {show: y, blk : 0, word: 2, pos: 18, len : 3, start : 82, type : 'uint:3', wr_dis : 4, rd_dis: null, alt : '', dict: '{0: "Disable", 1: "Enable", 3: "Disable", 7: "Enable"}', desc: 'Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable', rloc: 'EFUSE_RD_REPEAT_DATA1_REG[20:18]', bloc: 'B10[4:2]'}
31
31
  SECURE_BOOT_KEY_REVOKE0 : {show: y, blk : 0, word: 2, pos: 21, len : 1, start : 85, type : bool, wr_dis : 5, rd_dis: null, alt : '', dict : '', desc: Revoke 1st secure boot key, rloc: 'EFUSE_RD_REPEAT_DATA1_REG[21]', bloc: 'B10[5]'}
@@ -29,7 +29,7 @@ __all__ = [
29
29
  "write_mem",
30
30
  ]
31
31
 
32
- __version__ = "4.12.dev1"
32
+ __version__ = "4.12.dev2"
33
33
 
34
34
  import argparse
35
35
  import inspect
@@ -171,8 +171,8 @@ def main(argv=None, esp=None):
171
171
  # --stub-version can be set with --no-stub so the tests wouldn't fail if this option is implied globally
172
172
  parser.add_argument(
173
173
  "--stub-version",
174
- default=os.environ.get("ESPTOOL_STUB_VERSION", StubFlasher.STUB_SUBDIRS[0]),
175
- choices=StubFlasher.STUB_SUBDIRS,
174
+ default=os.environ.get("ESPTOOL_STUB_VERSION", None),
175
+ choices=["1", "2"],
176
176
  # not a public option and is not subject to the semantic versioning policy
177
177
  help=argparse.SUPPRESS,
178
178
  )
@@ -728,7 +728,8 @@ def main(argv=None, esp=None):
728
728
  print("esptool.py v%s" % __version__)
729
729
  load_config_file(verbose=True)
730
730
 
731
- StubFlasher.set_preferred_stub_subdir(args.stub_version)
731
+ if args.stub_version is not None:
732
+ StubFlasher.set_stub_subdir(args.stub_version)
732
733
 
733
734
  # Parse filter arguments into separate lists
734
735
  args.filterVids = []
@@ -632,10 +632,12 @@ def write_flash(esp, args):
632
632
  # Decompress the compressed binary a block at a time,
633
633
  # to dynamically calculate the timeout based on the real write size
634
634
  decompress = zlib.decompressobj()
635
- blocks = esp.flash_defl_begin(uncsize, len(image), address)
635
+ blocks = esp.flash_defl_begin(
636
+ uncsize, len(image), address, encrypted_write=encrypted
637
+ )
636
638
  else:
637
639
  blocks = esp.flash_begin(
638
- uncsize, address, begin_rom_encrypted=encrypted
640
+ uncsize, address, encrypted_write=encrypted
639
641
  )
640
642
  argfile.seek(0) # in case we need it again
641
643
  seq = 0
@@ -673,10 +675,7 @@ def write_flash(esp, args):
673
675
  else:
674
676
  # Pad the last block
675
677
  block = block + b"\xff" * (esp.FLASH_WRITE_SIZE - len(block))
676
- if encrypted:
677
- esp.flash_encrypt_block(block, seq)
678
- else:
679
- esp.flash_block(block, seq)
678
+ esp.flash_block(block, seq, encrypted=encrypted)
680
679
  bytes_written += len(block)
681
680
  bytes_sent += len(block)
682
681
  image = image[esp.FLASH_WRITE_SIZE :]
@@ -147,6 +147,7 @@ class StubFlasher:
147
147
  STUB_DIR = os.path.join(os.path.dirname(__file__), "targets", "stub_flasher")
148
148
  # directories will be searched in the order of STUB_SUBDIRS
149
149
  STUB_SUBDIRS = ["1", "2"]
150
+ STUB_VERSION_EXPLICIT = False
150
151
 
151
152
  def __init__(self, target):
152
153
  json_name = target.STUB_CLASS.stub_json_name(target)
@@ -171,20 +172,30 @@ class StubFlasher:
171
172
  for i, subdir in enumerate(self.STUB_SUBDIRS):
172
173
  json_path = os.path.join(self.STUB_DIR, subdir, json_name)
173
174
  if os.path.exists(json_path):
174
- if i:
175
+ if i and self.STUB_VERSION_EXPLICIT:
175
176
  print(
176
- f"Warning: Stub version {self.STUB_SUBDIRS[0]} doesn't exist, using {subdir} instead"
177
+ f"WARNING: {chip_name} stub version {self.STUB_SUBDIRS[0]} "
178
+ f"doesn't exist, using {subdir} instead."
177
179
  )
178
-
180
+ if subdir == "2": # TODO: Remove this after legacy stub deprecation
181
+ print("Using the new stub flasher.")
179
182
  return json_path
180
183
  else:
181
- raise FileNotFoundError(f"Stub flasher JSON file for {chip_name} not found")
184
+ raise FatalError(
185
+ f"Flasher stub data is missing for {chip_name}. \n"
186
+ "This means the esptool installation is incomplete or broken - "
187
+ "stub JSON files were removed or a third-party distribution package "
188
+ "didn't ship them. "
189
+ "It is unlikely to be a defect in esptool itself.\n\n"
190
+ "Try reinstalling esptool or restoring the stub files "
191
+ "from the upstream source tree. As a workaround, "
192
+ "you can pass --no-stub (slower operation, fewer features)."
193
+ )
182
194
 
183
195
  @classmethod
184
- def set_preferred_stub_subdir(cls, subdir):
185
- if subdir in cls.STUB_SUBDIRS:
186
- cls.STUB_SUBDIRS.remove(subdir)
187
- cls.STUB_SUBDIRS.insert(0, subdir)
196
+ def set_stub_subdir(cls, subdir):
197
+ cls.STUB_SUBDIRS = [subdir] + [x for x in cls.STUB_SUBDIRS if x != subdir]
198
+ cls.STUB_VERSION_EXPLICIT = True
188
199
 
189
200
 
190
201
  class ESPLoader(object):
@@ -965,7 +976,14 @@ class ESPLoader(object):
965
976
  raise
966
977
  pass
967
978
 
968
- def flash_begin(self, size, offset, begin_rom_encrypted=False, logging=True):
979
+ def flash_begin(
980
+ self,
981
+ size,
982
+ offset,
983
+ begin_rom_encrypted=False,
984
+ logging=True,
985
+ encrypted_write=None,
986
+ ):
969
987
  """
970
988
  Start downloading to Flash (performs an erase)
971
989
 
@@ -985,8 +1003,10 @@ class ESPLoader(object):
985
1003
  params = struct.pack(
986
1004
  "<IIII", erase_size, num_blocks, self.FLASH_WRITE_SIZE, offset
987
1005
  )
988
- if self.SUPPORTS_ENCRYPTED_FLASH and not self.IS_STUB:
989
- params += struct.pack("<I", 1 if begin_rom_encrypted else 0)
1006
+ if encrypted_write is None:
1007
+ encrypted_write = begin_rom_encrypted
1008
+ if self.IS_STUB or self.SUPPORTS_ENCRYPTED_FLASH:
1009
+ params += struct.pack("<I", 1 if encrypted_write else 0)
990
1010
  self.check_command(
991
1011
  "enter Flash download mode", self.ESP_FLASH_BEGIN, params, timeout=timeout
992
1012
  )
@@ -994,12 +1014,13 @@ class ESPLoader(object):
994
1014
  print("Took %.2fs to erase flash block" % (time.time() - t))
995
1015
  return num_blocks
996
1016
 
997
- def flash_block(self, data, seq, timeout=DEFAULT_TIMEOUT):
1017
+ def flash_block(self, data, seq, timeout=DEFAULT_TIMEOUT, encrypted=False):
998
1018
  """Write block to flash, retry if fail"""
1019
+ operation = "encrypted " if encrypted else ""
999
1020
  for attempts_left in range(WRITE_BLOCK_ATTEMPTS - 1, -1, -1):
1000
1021
  try:
1001
1022
  self.check_command(
1002
- "write to target Flash after seq %d" % seq,
1023
+ "write %sto target Flash after seq %d" % (operation, seq),
1003
1024
  self.ESP_FLASH_DATA,
1004
1025
  struct.pack("<IIII", len(data), seq, 0, 0) + data,
1005
1026
  self.checksum(data),
@@ -1009,7 +1030,7 @@ class ESPLoader(object):
1009
1030
  except FatalError:
1010
1031
  if attempts_left:
1011
1032
  self.trace(
1012
- "Block write failed, "
1033
+ f"{operation.capitalize()}block write failed, "
1013
1034
  f"retrying with {attempts_left} attempts left"
1014
1035
  )
1015
1036
  else:
@@ -1017,29 +1038,8 @@ class ESPLoader(object):
1017
1038
 
1018
1039
  def flash_encrypt_block(self, data, seq, timeout=DEFAULT_TIMEOUT):
1019
1040
  """Encrypt, write block to flash, retry if fail"""
1020
- if self.SUPPORTS_ENCRYPTED_FLASH and not self.IS_STUB:
1021
- # ROM support performs the encrypted writes via the normal write command,
1022
- # triggered by flash_begin(begin_rom_encrypted=True)
1023
- return self.flash_block(data, seq, timeout)
1024
-
1025
- for attempts_left in range(WRITE_BLOCK_ATTEMPTS - 1, -1, -1):
1026
- try:
1027
- self.check_command(
1028
- "Write encrypted to target Flash after seq %d" % seq,
1029
- self.ESP_FLASH_ENCRYPT_DATA,
1030
- struct.pack("<IIII", len(data), seq, 0, 0) + data,
1031
- self.checksum(data),
1032
- timeout=timeout,
1033
- )
1034
- break
1035
- except FatalError:
1036
- if attempts_left:
1037
- self.trace(
1038
- "Encrypted block write failed, "
1039
- f"retrying with {attempts_left} attempts left"
1040
- )
1041
- else:
1042
- raise
1041
+ # Encryption is selected by the fifth word in flash_begin().
1042
+ return self.flash_block(data, seq, timeout, encrypted=True)
1043
1043
 
1044
1044
  def flash_finish(self, reboot=False, timeout=DEFAULT_TIMEOUT):
1045
1045
  """Leave flash mode and run/reboot"""
@@ -1266,7 +1266,7 @@ class ESPLoader(object):
1266
1266
  return self.STUB_CLASS(self)
1267
1267
 
1268
1268
  @stub_and_esp32_function_only
1269
- def flash_defl_begin(self, size, compsize, offset):
1269
+ def flash_defl_begin(self, size, compsize, offset, encrypted_write=False):
1270
1270
  """
1271
1271
  Start downloading compressed data to Flash (performs an erase)
1272
1272
 
@@ -1292,10 +1292,8 @@ class ESPLoader(object):
1292
1292
  params = struct.pack(
1293
1293
  "<IIII", write_size, num_blocks, self.FLASH_WRITE_SIZE, offset
1294
1294
  )
1295
- if self.SUPPORTS_ENCRYPTED_FLASH and not self.IS_STUB:
1296
- # extra param is to enter encrypted flash mode via ROM
1297
- # (not supported currently)
1298
- params += struct.pack("<I", 0)
1295
+ if self.IS_STUB or self.SUPPORTS_ENCRYPTED_FLASH:
1296
+ params += struct.pack("<I", 1 if encrypted_write else 0)
1299
1297
  self.check_command(
1300
1298
  "enter compressed flash mode",
1301
1299
  self.ESP_FLASH_DEFL_BEGIN,
@@ -29,7 +29,7 @@ class ESP32C2ROM(ESP32C3ROM):
29
29
  EFUSE_SECURE_BOOT_EN_MASK = 1 << 21
30
30
 
31
31
  EFUSE_SPI_BOOT_CRYPT_CNT_REG = EFUSE_BASE + 0x30
32
- EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18
32
+ EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 7
33
33
 
34
34
  EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = EFUSE_BASE + 0x30
35
35
  EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 6
@@ -44,7 +44,7 @@ class ESP32C5ROM(ESP32C6ROM):
44
44
  EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18
45
45
 
46
46
  EFUSE_SECURE_BOOT_EN_REG = EFUSE_BASE + 0x038
47
- EFUSE_SECURE_BOOT_EN_MASK = 1 << 20
47
+ EFUSE_SECURE_BOOT_EN_MASK = 1 << 25
48
48
 
49
49
  IROM_MAP_START = 0x42000000
50
50
  IROM_MAP_END = 0x44000000
@@ -35,7 +35,7 @@ class ESP32C61ROM(ESP32C6ROM):
35
35
  EFUSE_PURPOSE_KEY5_SHIFT = 20
36
36
 
37
37
  EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = EFUSE_RD_REG_BASE
38
- EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 20
38
+ EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 14
39
39
 
40
40
  EFUSE_SPI_BOOT_CRYPT_CNT_REG = EFUSE_BASE + 0x030
41
41
  EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 23
@@ -85,7 +85,7 @@ class ESP32H4ROM(ESP32C3ROM):
85
85
  PCR_SYSCLK_XTAL_FREQ_S = 24
86
86
 
87
87
  FLASH_FREQUENCY = {
88
- "48m": 0x0,
88
+ "48m": 0xF,
89
89
  "24m": 0x0,
90
90
  "16m": 0x1,
91
91
  "12m": 0x2,
@@ -59,8 +59,10 @@ class ESP32P4ROM(ESP32ROM):
59
59
  EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = EFUSE_RD_REG_BASE
60
60
  EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 20
61
61
 
62
- EFUSE_SPI_BOOT_CRYPT_CNT_REG = EFUSE_BASE + 0x034
62
+ EFUSE_RD_REPEAT_DATA1_REG = EFUSE_BASE + 0x034
63
+ EFUSE_SPI_BOOT_CRYPT_CNT_REG = EFUSE_RD_REPEAT_DATA1_REG
63
64
  EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18
65
+ EFUSE_DOWNLOAD_MODE_XPD_ON_MASK = 0x1 << 16
64
66
 
65
67
  EFUSE_SECURE_BOOT_EN_REG = EFUSE_BASE + 0x038
66
68
  EFUSE_SECURE_BOOT_EN_MASK = 1 << 20
@@ -162,7 +164,8 @@ class ESP32P4ROM(ESP32ROM):
162
164
 
163
165
  def get_major_chip_version(self):
164
166
  num_word = 2
165
- return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 4) & 0x03
167
+ word = self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word))
168
+ return (((word >> 23) & 1) << 2) | ((word >> 4) & 0x03)
166
169
 
167
170
  def get_chip_description(self):
168
171
  chip_name = {
@@ -309,10 +312,29 @@ class ESP32P4ROM(ESP32ROM):
309
312
  if self.secure_download_mode:
310
313
  raise NotSupportedError(self, "Powering on flash in secure download mode")
311
314
 
312
- if self.get_chip_revision() != 301: # !=ECO6
313
- # The flash chip is powered off by default on ECO6, when the default flash
314
- # voltage changed from 1.8V to 3.3V. This is to prevent damage to 1.8V flash
315
- # chips. Board designers must set the appropriate voltage level in eFuse.
315
+ revision = self.get_chip_revision()
316
+ # Flash defaults off on ECO6/ECO7 after the 1.8 V 3.3 V default change
317
+ # (protects 1.8 V parts, board voltage must be set in eFuse). Other silicon
318
+ # revisions do not need this sequence.
319
+ if revision not in [301, 302]:
320
+ return
321
+
322
+ # On ECO7, also skip when DOWNLOAD_MODE_XPD_ON is programmed: ROM already
323
+ # asserts flash XPD in download mode, so esptool must not run this path.
324
+ if revision == 302 and (
325
+ self.read_reg(self.EFUSE_RD_REPEAT_DATA1_REG)
326
+ & self.EFUSE_DOWNLOAD_MODE_XPD_ON_MASK
327
+ ):
328
+ # ECO7 ROM bug: on a cold power-on, ROM can assert flash XPD (force
329
+ # the flash supply/pads on) and the first download session works.
330
+ # A subsequent entry into ROM download mode over USB–UART reset leaves
331
+ # the flash already powered, but ROM still runs the same “turn flash XPD on”
332
+ # path. That path is not safe to run twice while flash is already on,
333
+ # so the second attach/download can fail.
334
+ #
335
+ # Clear PMU_DATE_REG so the “flash force on” state from the power-up
336
+ # sequence is released before the loader proceeds to SPI flash attach.
337
+ self.write_reg(self.PMU_DATE_REG, 0)
316
338
  return
317
339
 
318
340
  # Power up pad group
@@ -376,7 +398,7 @@ class ESP32P4StubLoader(ESP32P4ROM):
376
398
 
377
399
  def stub_json_name(self):
378
400
  if self.get_chip_revision() < 300:
379
- return "esp32p4rc1.json"
401
+ return "esp32p4-rev1.json"
380
402
  return "esp32p4.json"
381
403
 
382
404