ESP32-S3 Baremetal Support

Console

console_print() writes to the USB-Serial-JTAG FIFO directly — two registers, no driver, no UART, no pin. The ROM has already enumerated the port, so output appears on the same COM port you flash over, and make monitor shows it.

This is not the UART. console_print() goes out of the USB-C socket to your PC; uart_print() goes out of a pin to whatever is wired to it. The two have nothing to do with each other.

src/main.c prints nothing, so a default build is silent by design. The examples all print — make i2c_scan flash monitor is a quick way to see it working:

i2c port 0 on sda=8 scl=9 at 100 kHz
scanning 0x08..0x77
  found 0x68  reg[0] = 0x19
1 device

Writes are dropped rather than blocking when no host is reading, so an unattended board keeps running at full speed.

That dropping has one consequence worth knowing: anything printed in the first moment after reset is lost. _start runs microseconds after reset, but the USB port takes about a second to enumerate with the host, and a terminal opened later still misses whatever came before it. If a program's startup lines never appear, tap RST with make monitor already running.