XIAO ESP32C3 wont program without manually entering bootloader mode

Is there any place that describes the power-on tests and what the "FALT"s mean?

I’ve got several boards that report various FALTs on power-up and the GPIO pins appear not to work on those boards.

Hi there,

And Welcome here…

So when you say FALT do you mean Fault ?
Can you use the code tags above “</>” and paste it in there.
Have you set the Debug level for more verbosity in the IDE tools menu?
can you describe what it is you are trying to achieve also?

HTH
GL :slight_smile: PJ :v:

I assume it means “fault”, but it actually says “FALT”. When I first attach the board to my computer, this shows up on the serial monitor:

13:47:02.140 -> WIFI Setup done
13:47:02.140 -> WIFI Scanning....
13:47:03.943 -> scan done
13:47:03.943 -> 4WIFI NETworks Found
13:47:03.976 -> WIFI TEST is FALT!
13:47:10.227 -> BLE TEST IS FALT!
13:47:11.199 -> Begin First Test....
13:47:11.331 -> 0
13:47:11.331 -> 0
13:47:11.331 -> 1
13:47:11.331 -> 0
13:47:11.331 -> First Test finish!
13:47:12.316 -> Begin Second Test....
13:47:12.414 -> 0
13:47:12.414 -> 0
13:47:12.414 -> 1
13:47:12.414 -> 0
13:47:12.414 -> 0
13:47:12.414 -> 0
13:47:12.414 -> 0
13:47:12.414 -> 0
13:47:12.414 -> GPIO TEST FALT!
13:47:13.632 -> 714
13:47:13.632 -> ADC TEST FALT!
13:47:13.632 -> TEST DONE!

These look like built-in tests that are failing. I didn’t think much of it until I found that the GPIO pins aren’t working.

By that I mean that I installed the most basic of programs:

int pin = 0;

void setup() {
  pinMode(pin, OUTPUT);
}

void loop() {
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(1000);
}

I connected a resistor and LED to pin 0. No cycling lights.

I connected a multimeter from pin 0 to ground. It registers 0.7v, but no cycling between high and low.

Now I’m thinking the hardware is defective somehow. But I’d love to have some additional clues to confirm or deny that.

You probably have an LED connected to pin D0. If so,

//int pin = 0;.
int pin = 2;

Hi there,

Some of the pins are called strapping pins, if you connect a device to them i.e LED it needs to be not pulled low when resetting or power up.
Can you provide a picture of how you have it connected, Does the BootLoader mode come on if you (hold the boot button and press and release the reset button at the same time?)

HTH
GL :slight_smile: PJ :v:

PJ,
It’s possible that the D0 pin is pulled down by an LED.
OP might try Blink on D2 for example.

1 Like

Hi there,

Yea, seems so… He should switch pins or disconnect everything and get some Bootloader action going. :+1:
Good catch though. :wink:

GL :slight_smile: PJ :v:

I appreciate the help. I’ve tried to remove all the variables I can. I switched to pin 2. No LEDs, just a multimeter. Simple Blink program. Still no glory.

The same program and approach works with a XIAO ESP32-C6. I can’t figure out what can be different about this C3.

Try this
My LED is blinking.
D0pin ---- |<| ---- R ----- 3V3pin

int pin = 2;  // D0 -- LED+R -- 3V3

void setup() {
  pinMode(pin, OUTPUT);
}

void loop() {
  digitalWrite(pin, HIGH);
  delay(1000);
  digitalWrite(pin, LOW);
  delay(1000);
}

Are you running a Windows machine or have a serial terminal program that can toggle the DTR and RTS signals (115k2, N, 8, 1)?

If so, unset DTR, set RTS and then set/unset DTR.

The device should reboot and send some messages to the serial terminal.
My (working) XIAO ESP32-C3 sends the following…

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x15 (USB_UART_CHIP_RESET),boot:0xd (SPI_FAST_FLASH_BOOT)
Saved PC:0x40053ae0
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd5820,len:0x1148
load:0x403cc710,len:0xb40
load:0x403ce710,len:0x2f58
entry 0x403cc710

I tested the Deep Sleep app using D0 (GPIO2) high or low without any issues. GPIO0, 1 should be connected to the 32KHz crystal?

Can’t say I’ve seen any FALT boards!

@grobasoz and @msfujino both included hints that point to my mistake. I thought the C3 would be a drop-in replacement for a C6, but there’s a slight difference in the pin assignments between the chips.

I wired up the first pin, which is (for C6) “D0” = “A0” = “GPIO0”. I replaced the C6 with a C3 which has “D0” = “A0” = “GPIO2”. Since they both had pins with the same labels in the same places, I assumed they worked the same. Embarrassing.

So when wiring up the first pin, my

int pin = 0;  // works on C6 but not on C3

should be

int pin = D0;

to work properly on both chips.

My original question was about the FALTs that came from the power-on test –

13:47:12.414 -> GPIO TEST FALT!

My conclusion now is that those messages don’t necessarily indicate a hardware problem.

Thanks again for the responses.

1 Like