ESP32-C6 pocket dev board loads code but does not (seem to) run

I have a new SparkFun Qwiic Pocket Development Board - ESP32-C6 and the project I’m copying has been a total failure. So I removed the sensor, removed the display - down to just the dev board. Let’s try the simplest thing possible. Nope.

Specifically my code compiles fine. I’ve tried little Serial hello world and blinking the LED - stuff like that. And then it even seems to upload. An LED on the board quickly blinks and I get this at the end of the console:

Writing at 0x0004c330 [==============================] 100.0% 138027/138027 bytes... 
Wrote 246576 bytes (138027 compressed) at 0x00010000 in 0.9 seconds (2119.4 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...

And that’s it. No serial messages ever come back. The light never blinks. Nothing.

I’ve tried holding down the Reset button on the board during upload and that (correctly) makes it say there is no free port. I’ve tried holding the other (boot?) button during upload and that does nothing noticeable. I’ve tried changing all the settings I can (the combinatorics are daunting), especially the “USB CDC On Boot” which I’ve seen mentioned in other posts. Baud is 115200 but I’ve tried others.

I’m doing all this from a normal updated Debian 12 Linux machine with a user in the dialout group. I’m using arduino-ide Version: 2.3.7 Date: 2025-12-17T16:01:58.874Z. I have two USB cables that both produce the same (lack of) result. The IDE says I’m using “ESP32C6 Dev Module” on /dev/ttyACM0 (which appears when I connect the dev board to the USB).

So I’m stumped. This is not my normal programming environment and maybe I just didn’t turn on the magic “Results appear here!” window or something obvious to everyone else. But to me it looks like enough is working (compiling, uploading, quickly blinking the light on upload, being affected by the reset button state, etc) that I should expect a tiny bit more to work so that this board is actually useful. Thanks for any help.

I borrowed a computer with Windows (10 Home) on it and tortured myself with installing the arduino-ide there. Interestingly I was able to get a blinking light demo to actually blink the LED on the dev board. In other words the code compiled, uploaded, and ran.

However, when I tried serial tests, they did not work. No serial messages ever were picked up by the monitor even when the blinking light told me the program was running.

This means that something is not quite right with the Linux tools. And the Serial output failure is still a mystery. But the cable, dev board, and chip itself are capable of running some code, and I am not, apparently, incapable of making that happen.

After traumatizing myself even further by installing Windows 11 in a qemu VM, I was able to repeat the successful blinking light demo showing again that the hardware, cable, and blinking light program were all good. This also now exonerates Linux USB handling which Linux happily passed through to the Windows VM.

This shows there is a clear problem with the ESP32 Arduino-IDE Linux tools that is not a problem with the Windows tools.

Why no Serial output ever is observed (even on native Windows) is still a mystery.

can you share the sketch ?

In case of the ESP32-CAM I had to press the RST button after seeing the msg Hard resetting via RTS pin… However, I looked at the pic of the board that you mentioned and found no RST button. Is it possible to find the RST pin? SparkFun Qwiic Pocket Development Board - ESP32-C6 - SparkFun Electronics

Here is an example of what I’m doing. I’ve tried different baud rates. I’m trying to do the simplest thing to demonstrate that this board is doing anything. (The blinking light code untouched from File → Examples → 01.Basics → Blink does work but that does not seem simpler than Hello world and at some point I will probably need something a little more descriptive than a blinking light.)

It has a reset button (marked RST) and another button (BOOT - left of Qwiic connector). I’ve mashed them in every combination I can think of before, during, and after uploading.

pressing reset-switch after upload is sometimes necessary for me as well, but not always

Looking at : Arduino Example - SparkFun Qwiic Dev Board ESP32-C6

I see a remark about a tools menu option :

Take note of the option labeled “USB CDC on Boot” when selecting the Board from the Tools menu. This option sets the serial outputs and defines their label for use in code. The SparkFun variants default to Enable USB CDC on boot which sets both Serial and Serial0 as available serial ports. In this configuration, Serial corresponds to the direct USB/Serial converter on the chip (and the USB-C interface) and Serial0 corresponds to the UART0 bus (default pins are 16 and 17).

With either setting, Serial1 is available and refers to the UART1 bus (default pins are 4 and 5).

Does that make a difference to enable or disable ?

1 Like

Thanks for your reply @paulvha and that is a good thing to check. I did check it before but just rechecked using Serial, Serial0, and Serial1 both with USB CDC on Boot enabled and disabled. In all six cases, the same behavior - no serial feedback.

It is reasonable to ask if I am understanding the interface correctly since I’ve never actually seen a Serial.println() function work. Does the output of those functions appear in the “Output” section after the compilation messages? Or over in the “Serial Monitor”? I’ve tried looking for activity in both places. I’ve also fired up minicom to look for any serial activity there, and I’ve not detected any.

It is “serial monitor” you should see the Serial.print() from the ESP32.

Try this (for some reason it does not format well). At least we know the program is running, make sure USB CDC is set enabled and your Serial monitor to 115200

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

  Serial.begin(115200);

}


// the loop function runs over and over again forever

void loop() {

  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)

  Serial.println("HIGH");

  delay(1000);                      // wait for a second

  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW

  Serial.println("LOW");

  delay(1000);                      // wait for a second

}

Ok, I don’t know what exactly is different, but now it does work. I was unsure about how the Serial Monitor worked but now that it’s working, it’s clear and maybe sometimes I thought it wasn’t working I didn’t check there properly. I only checked it a couple of times and maybe the port or reset was off then and I only saw it doing nothing.

For others who may have the same confusion, I’ll include this screenshot of how to watch the Serial monitor in one sketch while you work on testing in another.

This means that all functionality is working as expected on Windows running in a VM on Linux.
So that’s progress. :+1:

1 Like

Ok, I went back to native Linux Arduino-IDE and I have it working now. I think the CDC setting was important. I think I was overlooking the serial monitor at key times. I am not 100% sure I had selected the exact board (“Sparkfun ESP32-C6 Qwiic Pocket”) but rather some more generic “ESP32-C6”. And I was more aggressive about uploading a couple of times if it didn’t work immediately.
Hopefully the tips in this thread will help if anyone else has the problems I have.
Thanks to everyone who responded in the thread!

1 Like