AI Thinker ESP32-CAM CJMCU-232H JTAG Uploading error

Hello everyone!

I have an ESP32-CAM(esp32-s) AI Thinker board which I want to flash with some firmware using CJMCU-232H programmer.
When I start Upload, large led stops flashing and some seconds later I get an error.
I think it’s linked with programmer, because minimodule described in docs differs from CJMCU-232H because its single channel.
Wired with 4 jtag pins and board is connected to programmer’s 5V

Traceback

Processing esp32cam (platform: link removed /platformio/platform-espressif32.git; board: esp32cam; framework: arduino) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via-v, --verbose` option
CONFIGURATION: link removed /page/boards/espressif32/esp32cam.html
PLATFORM: Espressif 32 (3.1.0+sha.34b55a4) > AI Thinker ESP32-CAM
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 3.10005.210308 (1.0.5)
- tool-esptoolpy 1.30000.201119 (3.0.0)
- tool-mkspiffs 2.230.0 (2.30)
- tool-openocd-esp32 2.1000.20201202 (10.0)
- toolchain-xtensa32 2.50200.97 (5.2.0)
LDF: Library Dependency Finder → link removed /configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 28 compatible libraries
Scanning dependencies…
No dependencies
Building in release mode
Retrieving maximum program size .pio/build/esp32cam/firmware.elf
Checking size .pio/build/esp32cam/firmware.elf
Advanced Memory Usage is available via “PlatformIO Home > Project Inspect”
RAM: [ ] 4.1% (used 13588 bytes from 327680 bytes)
Flash: [= ] 8.5% (used 266054 bytes from 3145728 bytes)
Configuring upload protocol…
AVAILABLE: esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = minimodule
Uploading .pio/build/esp32cam/firmware.bin
Open On-Chip Debugger v0.10.0-esp32-20201202 (2020-12-02-17:38)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
debug_level: 1

none separate

WARNING: boards/esp-wroom-32.cfg is deprecated, and may be removed in a future release.
adapter speed: 5000 kHz

Error: no device found
Error: unable to open ftdi device with vid 0403, pid 6010, description '*', serial '*' at bus location '*'
** Programming Started **
Error: timed out while waiting for target halted / 4 - 2
Error: xtensa_wait_algorithm: not halted 0, pc 0x40090060, ps 0x60025
Error: Failed to wait algorithm (-302)!
Error: Algorithm run failed (-302)!
Warn : Empty flash mapping!
Warn : Failed to get flash mappings (0)!
Error: Target is already running an algorithm
Error: Failed to start algorithm (-4)!
Error: Algorithm run failed (-4)!
Error: Failed to get flash size!
Error: Target is already running an algorithm
Error: Failed to start algorithm (-4)!
Error: Algorithm run failed (-4)!
Error: Failed to get flash size!
Error: Failed to probe flash, size 0 KB
Error: auto_probe failed
embedded:startup.tcl:449: Error: ** Programming Failed **
in procedure 'program_esp' 
in procedure 'program_error' called at file "/Users/turbokach/.platformio/packages/tool-openocd-esp32/share/openocd/scripts/target/esp_common.cfg", line 102
at file "embedded:startup.tcl", line 449
*** [upload] Error 1
================================================================================ [FAILED] Took 41.79 seconds ================================================================================
The terminal process "platformio 'run', '--target', 'upload'" terminated with exit code: 1.`
platformio.ini
[env:esp32cam]
# platform = espressif32
platform = https://github.com/platformio/platform-espressif32.git
board = esp32cam
framework = arduino
upload_protocol = minimodule
I have also changed ftdi config file minimodule.cfg
#
# FTDI MiniModule
#
#
interface ftdi
# ftdi_device_desc "Single RS232-HS"

ftdi_vid_pid 0x0403 0x6010 0x0403 0x6014
ftdi_channel 0

# Every pin set as high impedance except TCK, TDI, TDO and TMS
ftdi_layout_init 0x0008 0x000b
reset_config none

# nSRST defined on pin CN2-13 of the MiniModule (pin ADBUS5 [AD5] on the FT2232H chip)
# This choice is arbitrary. Use other GPIO pin if desired.
# ftdi_layout_signal nSRST -data 0x0020 -oe 0x0020

Board: ESP32-CAM(esp32-s) AI Thinker
Programmer: CJMCU-232H (FT232HQ chip)
OS: macOS
IDE: VSCode + PlatformIO plugin

The topic FT2232H Mini Module Debugger is maybe relevant too.

Did you load WinUSB drivers using zadig for the adapter device?

Maybe the pin mapping is wrong, too. Which pins of the adapter are you connecting to which pins of the board, and where does that information come from?

I have a macOS on my notebook, so Zadig is not relevant for me.

Wiring is taken from this article.
I have compared this article pinout with board pinout, they’re same.
So I have double checked a wiring, it seems correct.

I’ve tried different ftdi configs, commented out/edited and result is the same.

UPD:

wired 5v out from CJMCU to VIN at my esp32-cam
white led became brighter.
previously it was connected to esp32-cam 5V pin.

Looks line incorrect power wiring.

Now I have another traceback
> Executing task in folder blink led esp cam: platformio run --target upload <

Processing esp32cam (platform: espressif32; board: esp32cam; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32cam.html
PLATFORM: Espressif 32 (3.1.0) > AI Thinker ESP32-CAM
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES: 
 - framework-arduinoespressif32 3.10005.210308 (1.0.5) 
 - tool-esptoolpy 1.30000.201119 (3.0.0) 
 - tool-mkspiffs 2.230.0 (2.30) 
 - tool-openocd-esp32 2.1000.20201202 (10.0) 
 - toolchain-xtensa32 2.50200.97 (5.2.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 28 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/esp32cam/src/main.cpp.o
Generating partitions .pio/build/esp32cam/partitions.bin
Archiving .pio/build/esp32cam/libFrameworkArduinoVariant.a
Indexing .pio/build/esp32cam/libFrameworkArduinoVariant.a
Compiling .pio/build/esp32cam/FrameworkArduino/Esp.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/FunctionalInterrupt.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/IPv6Address.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/MD5Builder.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/Print.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/StreamString.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/WString.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/base64.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/cbuf.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-adc.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-bt.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-cpu.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-dac.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-gpio.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-i2c.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-ledc.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-log.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-matrix.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-misc.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-psram.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-rmt.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-sigmadelta.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-spi.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-time.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-timer.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-touch.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/esp32-hal-uart.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/libb64/cdecode.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/libb64/cencode.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/main.cpp.o
Compiling .pio/build/esp32cam/FrameworkArduino/stdlib_noniso.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/esp32cam/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/esp32cam/libFrameworkArduino.a
Indexing .pio/build/esp32cam/libFrameworkArduino.a
Linking .pio/build/esp32cam/firmware.elf
Retrieving maximum program size .pio/build/esp32cam/firmware.elf
Checking size .pio/build/esp32cam/firmware.elf
Building .pio/build/esp32cam/firmware.bin
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   4.1% (used 13588 bytes from 327680 bytes)
Flash: [=         ]   8.5% (used 266054 bytes from 3145728 bytes)
esptool.py v3.0
Configuring upload protocol...
AVAILABLE: esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esp-prog
Uploading .pio/build/esp32cam/firmware.bin
Open On-Chip Debugger  v0.10.0-esp32-20201202 (2020-12-02-17:38)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
debug_level: 1

none separate

WARNING: boards/esp-wroom-32.cfg is deprecated, and may be removed in a future release.
adapter speed: 5000 kHz

Error: Couldn't halt target before SoC reset
embedded:startup.tcl:449: Error: ** Unable to reset target **
in procedure 'program_esp' 
in procedure 'program_error' called at file "/Users/turbokach/.platformio/packages/tool-openocd-esp32/share/openocd/scripts/target/esp_common.cfg", line 73
at file "embedded:startup.tcl", line 449

*** [upload] Error 1

Hm seems like there’s a problem with the TRST line.

You can also try and lower the debugging speed because 5MHz is quite high speed. See docs, e.g.debug_speed = 500.

  1. I press RST board button
  2. Board white led blinks
  3. Upload
Traceback
Open On-Chip Debugger  v0.10.0-esp32-20201202 (2020-12-02-17:38)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
debug_level: 1

none separate

WARNING: boards/esp-wroom-32.cfg is deprecated, and may be removed in a future release.
adapter speed: 500 kHz

embedded:startup.tcl:449: Error: ** Unable to reset target **
in procedure 'program_esp' 
in procedure 'program_error' called at file "/Users/turbokach/.platformio/packages/tool-openocd-esp32/share/openocd/scripts/target/esp_common.cfg", line 73
at file "embedded:startup.tcl", line 449
*** [upload] Error 1
  1. board led stops blinking, soft white only.
  2. upload again
traceback
CURRENT: upload_protocol = esp-prog
Uploading .pio/build/esp32cam/firmware.bin
Open On-Chip Debugger  v0.10.0-esp32-20201202 (2020-12-02-17:38)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
debug_level: 1

none separate

WARNING: boards/esp-wroom-32.cfg is deprecated, and may be removed in a future release.
adapter speed: 500 kHz

Error: esp32.cpu0: DSR (8020CC1C) indicates target still busy!
Error: esp32.cpu0: DSR (8020CC1C) indicates DIR instruction generated an overrun!
Error: esp32.cpu0: DSR (8020CC1C) indicates target still busy!
Error: esp32.cpu0: DSR (8020CC1C) indicates DIR instruction generated an overrun!
Error: esp32.cpu0: DSR (8020CC1C) indicates target still busy!
Error: esp32.cpu0: DSR (8020CC1C) indicates DIR instruction generated an overrun!
Error: esp32.cpu0: DSR (8000CC1C) indicates target still busy!
Error: esp32.cpu0: DSR (8000CC1C) indicates DIR instruction generated an overrun!
Warn : esp32.cpu0: Failed writing 4 bytes at address 0x3ff5f064
Error: Failed to write ESP32_TIMG0WDT_PROTECT (-4)!
Error: esp32.cpu0: DSR (8000CC1C) indicates target still busy!
Error: esp32.cpu0: DSR (8000CC1C) indicates DIR instruction generated an overrun!
Warn : esp32.cpu0: Failed reading 212 bytes at address 0x50000000
Error: Failed to save contents of RTC_SLOW_MEM (-4)!
embedded:startup.tcl:449: Error: ** Unable to reset target **
in procedure 'program_esp' 
in procedure 'program_error' called at file "/Users/turbokach/.platformio/packages/tool-openocd-esp32/share/openocd/scripts/target/esp_common.cfg", line 73
at file "embedded:startup.tcl", line 449
*** [upload] Error 1

I am not sure about esp32_devkitj_v1.cfg, because I have edited it many times trying to find some solution.

Current config:

platformio.ini
[env:esp32cam]

platform = https://github.com/platformio/platform-espressif32.git

board = esp32cam

framework = arduino

debug_tool = esp-prog

upload_protocol = esp-prog

debug_init_break = tbreak setup

debug_speed = 500
esp32_devkitj_v1.cfg
#

# Driver for the FT2232H JTAG chip on the Espressif DevkitJ board

# (and most other FT2232H and FT232H based boards)

#

interface ftdi

ftdi_vid_pid 0x0403 0x6014

# interface 1 is the uart

ftdi_channel 0

# TCK, TDI, TDO, TMS: ADBUS0-3

# LEDs: ACBUS4-7

ftdi_layout_init 0x0008 0x000b

ftdi_layout_signal LED -data 0x1000

ftdi_layout_signal LED2 -data 0x2000

ftdi_layout_signal LED3 -data 0x4000

ftdi_layout_signal LED4 -data 0x8000

# ESP32 series chips do not have a TRST input, and the SRST line is connected

# to the EN pin.

# The target code doesn't handle SRST reset properly yet, so this is

# commented out:

# ftdi_layout_signal nSRST -oe 0x0020

reset_config none

# The speed of the JTAG interface, in KHz. If you get DSR/DIR errors (and they

# do not relate to OpenOCD trying to read from a memory range without physical

# memory being present there), you can try lowering this.

#

# On DevKit-J, this can go as high as 20MHz if CPU frequency is 80MHz, or 26MHz

# if CPU frequency is 160MHz or 240MHz.

# adapter_khz 20000