I'm using the ESP32-C3-MINI-1-N4 on a custom PCBA. Before designing the board, I used the ESP32-C3-DevKitM-1 devkit to prove out USB serial programming. From what I read, it's possible to program via USB using either 1) a USB-to-serial converter chip (FTDI) or 2) directly connecting to USB. Most of what I've seen describes scenario #1, so to test out my theory I removed the FTDI chip on the devkit and connected resistors R1 and R4 so that USB was directly connected to the ESP32. Using the direct method, I was able to program the devkit automically no problem without any need for manual entry into the bootloader (i.e. using a button).
When we received our board, the ESP32 would constantly restart and the USB connection kept dropping. This happened even with a large power supply and all IOs disconnected from peripherals. Eventually, I found out if I used the manual bootloader entry (i.e. hold down BOOT/IO9 then reset or hold down EN) the ESP32 would boot and USB worked. I could then program our board.
From what I read on https://docs.espressif.com/projects/esp ... ction.html, it seems that the auto programming should only work if you have the USB-to-serial converter connected to the control lines (DTR/RTS):
In general, you should have no problems with the official Espressif development boards. However, esptool.py is not able to reset your hardware automatically in the following cases:
- Your hardware does not have the DTR and RTS lines connected to GPIO9 and EN (CHIP_PU)
- The DTR and RTS lines are configured differently
- There are no such serial control lines at all
My question is, if that's true, why can I program the devkit automatically without the FTDI chip + control lines, but I cannot do the same on my custom PCBA? Is there a fuse or firmware setting I'm missing?