> ## Documentation Index
> Fetch the complete documentation index at: https://docs.embedder.com/llms.txt
> Use this file to discover all available pages before exploring further.

# UART

> Connect a serial port, read firmware output, and send commands with the correct baud rate and newline.

Use UART for boot logs, application messages, or a firmware command console. Open a Serial tab in the Monitor and choose the intended port.

## Prepare the connection

1. Connect the board's USB serial interface or a UART adapter supported by your operating system. Install its driver if the port is missing.
2. For a separate adapter, connect target TX to adapter RX and share ground. Connect adapter TX to target RX only when input is needed. Match the adapter's signal voltage to the board.
3. Identify the port in the Monitor. Linux ports may look like `/dev/ttyUSB0`, macOS ports like `/dev/cu.usbserial-...`, and Windows ports like `COM3`; use the actual listed port.
4. Choose **UART**, set **Baud** to the firmware's rate, and choose the newline convention for commands.

If another connection has the port open at a different baud rate, disconnect it before changing the rate. When using a [remote bridge](/integrations/remote-bridge), the port and driver belong to the hardware host.

Opening a new local UART connection asserts DTR and RTS. On boards wired to use those lines for reset or boot selection, connecting can affect execution even without an explicit reset request. Keep an existing connection open and read its history when preserving a fault.

## Read firmware output

Replace the example port with the board's listed port:

```text theme={"system"}
Open /dev/ttyUSB0 at 115200 baud and wait up to 30 seconds for READY.
Do not reset the board. Report whether READY appeared and include any errors.
```

The Monitor displays received output. A successful connection does not establish that the firmware is running correctly; verify the expected message. If it was emitted before connecting, it may not be available until the next run.

To inspect an existing run without opening another connection:

```text theme={"system"}
Read the last 50 lines already captured on the active UART. Do not wait for
new output or reset the device.
```

## Send a command

Enter a command supported by the firmware in the Monitor's send input. Choose **LF**, **CR**, **CRLF**, or **none** to match its parser. Check the response before sending another command.

For example, if the firmware implements a `status` command terminated by LF, send `status` with LF selected and confirm the expected status response. The command and response are defined by your firmware.

## Reset only when needed

Request DTR, RTS, or an ESP-style DTR/RTS reset only when it matches the board's wiring and the test you intend to run. Identify the reset method when asking to capture boot output. Closing a local UART connection deasserts DTR and RTS, which can also affect a board wired to those lines.

## Troubleshoot

* **Port missing:** check the USB cable, power, operating-system driver, and selected hardware host.
* **Access denied or port busy:** close competing serial applications and check the host's serial-device permissions.
* **Garbled output:** confirm the firmware's baud rate and the board or adapter voltage levels.
* **Connected but silent:** check TX/RX wiring, firmware logging, and whether the expected output happened before connection.
* **Command has no response:** verify the command, target RX connection, and newline convention.

Use a [hardware script](/debug-mode/hardware-scripts#a-simple-uart-check) for a repeatable UART pass/fail check, or [Live plots](/core-concepts/plot) for numeric output.
