Posted on 6 Comments

Vlog #66: Let’s define a standard ESP8266/ESP32 programming header

UPDATE: The definition of the ESPFlash header convention is now here:
www.superhouse.tv/espflash

If you don’t put USB on your project, you have to decide on a programming header to use. But everyone does it their own way: Sonoff has theirs, wESP32 has another, many projects have them and they’re all different!

That sucks, so let’s fix it by deciding what we think should be the conventional programming header format for our projects.

My goals are:

  1. Define a convention for programming headers on ESP8285, ESP8266, and ESP32 boards.
  2. Use that header in our own projects, so that it becomes common and interchangeable.
  3. Lobby ITEAD to use the same header in future Sonoff models.

And the stretch goal: Convince Espressif to document it as a recommended header format for new ESPxx projects.

If we’re super-lucky, maybe we can convince ITEAD to fix the incomplete Sonoff programming header by adding RESET and GPIO0, and make all our lives easier in future.

Places to discuss this

References

Design decisions

We need to decide on a physical format, and also whether to supply 3.3V or 5V to the target board from the programmer. The pins we need are:

  • GND
  • VCC
  • TX
  • RX
  • GPIO0
  • RESET

Physical format options include:

  • 1×6 0.1″ header
  • 2×3 0.1″ header
  • 1×6 2mm header
  • 2×3 2mm header
  • Something else? Ideas please!

Design considerations

The design considerations for the physical format include:

  • Similarity to existing designs including Sonoff, wESP32, ESProg, and ESP32 Programmer
  • Cheap and easy to use, with easy to source connectors
  • Small footprint on the target device
  • Perhaps leverage some existing standard such as P-MOD
  • Ability to mount permanently as a sub-board in the project if required

Considerations for the choice of 3.3V or 5V include:

  • Sonoff already requires 3.3V on the header
  • 5V can be useful in some cases
  • Switchable voltage would be possible, but could be dangerous and would lead to fragmentation of the convention
  • Connection of programmer directly to VCC on target, compared to input of onboard 3.3V VREG

Interesting options

ESP-01 header

This has the advantage that it’s well documented, and many people have made adapters for it.

wESP32-Prog header

Already implemented on the wEPS32. 5V supply means the input can be diode-isolated from other supply sources on the board. 4 of the pins match the Sonoff header, except that Sonoff requires 3.3V so it’s not a perfect match.

wESP32-Prog header, but with 3.3V

This is the closest we could have to matching the Sonoff header while extending it to add the GPIO0 and RESET lines.

ESP-Prog header

Documented by Espressif. Uses a 2×3 header, which is nice in terms of compact size. Unfortunately there’s no useful overlap with the ESP-01 header.

ESProg header

Doesn’t seem to match up with anything else in terms of pin order, but is perhaps the closest match electrically in a 1×6 format: all the necessary pins, with 3.3V supplied.

ESP32 Programmer by Mike Rankin

Nice 2×3 format header. If power was added this would be a nice format, but it doesn’t have anything to differentiate it from the ESP-Prog format from Espressif.

Other ESP32 Programmer by Mike Rankin

This one has a 1×5 header, which has all the pins we want except power.