Tegra Combined UART#
The Tegra Combined UART (TCU) is a system that multiplexes debug information from the processors in the CCPLEX cluster with information from other processors.
The multiplexing is accomplished in the Sensor Processing Engine (SPE) for NVIDIA® Jetson™ Orin and the UART Trace Controller (UTC) for NVIDIA® Jetson™ Thor. It involves all of the processors that supply information. The nv_tcu_demuxer
utility runs on a host system and demultiplexes the debug information multiplexed by the TCU.
This diagram shows the relationship of the components for a native target.

nv_tcu_demuxer Utility#
The nv_tcu_demuxer binary is in the following SDK directory:
$ Linux_for_Tegra/tools/demuxer/
To run the binary, run the following command:
$ ./nv_tcu_demuxer <options>
Where <options>
represents any meaningful combination of the following command-line options:
nv_tcu_demuxer
writes a demultiplexed output to a set of consoles with device names in the /dev/pts/<n>
form, where <n>
is an integer. It lists the console’s device names, and the type of output is written to each device on stdout
. Typically, you need to display each console output data stream with an instance of a terminal utility like minicom
.
The following table describes the command-line options recognized by nv_tcu_demuxer
:
Command line option |
Meaning |
---|---|
-h |
Prints a help message that summarizes the command format and options. |
-m <chip> |
Sets the client/tag mapping for |
-i |
Enables the patch for line ending. This allows
some data streams to end lines with |
-u |
Writes the CCPLEX data to one output stream
that will be demultiplexed by |
-d <dev> |
Specifies the device name of the host UART that
receives debug data from the target. Defaults to
|
-r <rate> |
Specifies data rate of the UART in bits/second. Defaults to 115200. |
-s <path> |
Saves output streams to the directory specified by <path>. Each output stream is written to a .txt file whose name represents the source: SCE.txt, SPE.txt, etc. CCPLEX output is written to a single multiplexed file named CCPLEX.txt. |
-l <path> |
Saves the raw output with tags to the log file in
the directory specified by |
-t |
Prefixes the output with a timestamp. |
-p |
Set the timeout for output polling ready status. Defaults to 300 ms. |
Examples#
AGX Orin and Orin Nano#
Use the following example to write your own nv_tcu_demuxer
commands. If you use a different port, replace ttyACM0
with the appropriate name.
$ cd Linux_for_Tegra/tools/demuxer
$ ./nv_tcu_demuxer -d /dev/ttyACM0 &
Here is the output:
/dev/pts/2 RCE
/dev/pts/3 FSI
/dev/pts/4 PSCFW
/dev/pts/5 DCE
/dev/pts/7 BPMP
/dev/pts/8 SCE
/dev/pts/9 SPE
/dev/pts/10 TZ
/dev/pts/11 CCPLEX: 0
You can use minicom to get only the specific console output. To get only SPE logs, run:
$ minicom -D /dev/pts/9
Jetson Thor#
Use the following example to write your own nv_tcu_demuxer
commands. If you use a different port, replace ttyACM0
with the appropriate name.
$ cd Linux_for_Tegra/tools/demuxer
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM0 &
Here is the output:
/dev/pts/1 RCE
/dev/pts/2 FSI
/dev/pts/3 PSCFW
/dev/pts/4 DCE
/dev/pts/5 BPMP
/dev/pts/6 AON-F1
/dev/pts/7 HPSE
/dev/pts/8 SB
/dev/pts/9 ADSP0
/dev/pts/10 ADSP1
/dev/pts/11 UTC0
/dev/pts/12 UTC1
/dev/pts/13 UTC2
/dev/pts/14 UTC3
/dev/pts/15 CCPLEX: 0
/dev/pts/16 TZ: 0
/dev/pts/17 RAW
You can use minicom to get only the specific console output. Examples:
FSI logs:
$ minicom -D /dev/pts/2
BPMP firmware logs:
$ minicom -D /dev/pts/5
Guest OS (CCPLEX) logs:
$ minicom -D /dev/pts/15
All raw output (undemuxed):
$ minicom -D /dev/pts/17
Save logs to files with timestamps:
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM0 -s /tmp/thor_logs -t &
UART Trace Controller (UTC) Technical Details for Jetson Thor#
NVIDIA® Jetson™ Thor (T264) platforms use the UART Trace Controller (UTC) for hardware-based multiplexing, which is a significant improvement over the software-based approach used in Jetson Orin platforms.

UTC System-Level Data Flow#
Key Differences from Jetson Orin#
Aspect |
Jetson Orin (T234) |
Jetson Thor (T264) |
---|---|---|
Multiplexing Method |
Software (SPE firmware) |
Hardware (UTC controller) |
Performance |
Limited by SPE processing |
Up to 36Mbps throughput |
Client Support |
8 main clients |
16 TX + 16 RX clients |
FIFO Size |
Software buffers |
128 bytes per client (hardware) |
Latency |
Higher (software processing) |
Lower (hardware acceleration) |
UTC Architecture#

UTC Block Diagram#
The UTC is located in the Always-On (AON) cluster and connects to the following:
AON Fabric: Via the AMBA Peripheral Bus (APB).
UART0 Controller: Direct APB connection for UART access.
16 Client FIFOs: Each has 128 bytes for TX and RX directions.
Client Mapping for Thor#
The following table shows the authoritative client mapping as defined in bug 3917973:
Client ID |
Tag |
T264 Processor |
Description |
---|---|---|---|
Client 1 |
0xE1 |
CCPLEX |
Hypervisor/UEFI/Linux (default RX client) |
Client 2 |
0xE2 |
BPMP |
Boot and Power Management Processor |
Client 3 |
0xE3 |
AON-F1 |
Always-On Fabric 1 (replaces SCE from T234) |
Client 4 |
0xE4 |
TZ |
TrustZone |
Client 5 |
0xE5 |
RCE |
Real-time Camera Engine |
Client 6 |
0xE6 |
FSI |
Fabric Switch Interface |
Client 7 |
0xE7 |
PSC |
Platform Security Controller |
Client 8 |
0xE8 |
DCE |
Display Controller Engine |
Client 9 |
0xE9 |
HPSE |
High-Performance Security Engine |
Client 10 |
0xEA |
SB |
Secure Boot |
Client 11 |
0xEB |
ADSP0 |
Audio Digital Signal Processor 0 |
Client 12 |
0xEC |
ADSP1 |
Audio Digital Signal Processor 1 |
Clients 13–16 |
0xED-0xF0 |
CCPLEX |
HV/Guest VMs |
Note
The preceding client mapping is the final authoritative assignment. All unassigned FIFOs (Clients 13–16) are dedicated to HV/Guest VMs.
UTC Configuration#
UTC configuration is handled automatically by MB1 firmware. The following are the key parameters:
Parameter |
Description |
---|---|
enable_utc |
Enable/disable UTC functionality (configured in MB1 BCT). |
disable_utc_fifo |
0: FIFO mode (default); 1: PIO mode. |
default_rx_client |
Default client ID for untagged RX data (1–16). Set to 1 (CCPLEX) per bug 3917973. |
Example DTS Configuration#
For custom UTC configurations, you can modify the MB1 BCT DTS files:
/dts-v1/;
/ {
mb1_bct {
utc_params {
enable_utc = <1>;
disable_utc_fifo = <0>; // 0: FIFO mode, 1: PIO mode
default_rx_client = <1>; // CCPLEX (Client 1) - default
};
};
};
Security and Safety Considerations#
Safety Platforms: UTC is disabled and outputs are clamped for safety compliance.
Virtualization: Each client has a separate 64-KB MMIO space for VM isolation.
Access Control: Firewall and hypervisor controls limit client access to authorized VMs only.
Advanced Usage for Jetson Thor#
Multi-Die Support (Super-Thor)#
For Super-Thor configurations with multiple dies, run separate nv_tcu_demuxer
instances:
# Die 0
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM0 -s /logs/die0/
# Die 1
$ ./nv_tcu_demuxer -m T264 -d /dev/ttyACM1 -s /logs/die1/
Performance Notes#
Throughput: UTC achieves approximately 30–36 Mbps (combined TX/RX).
Hardware Acceleration: Dedicated UTC IP provides lower latency than software solutions.
FIFO Mode: Preferred for high-performance applications over PIO mode.
Troubleshooting#
Common Issues for All Platforms#
- Tool not found
Verify that you’re in the correct directory:
Linux_for_Tegra/tools/demuxer/
.Verify that the binary has execute permissions.
- No output or garbled output
Check UART device name (such as
/dev/ttyACM0
or/dev/ttyUSB3
, etc.).Verify that baud rate settings match the target configuration.
Ensure that target is actually outputting debug information.
Issues Specific to Jetson Thor#
- Console not responsive
Jetson Thor platforms require
nv_tcu_demuxer
for interactive console access.Use pseudo-terminal assigned to CCPLEX (typically
/dev/pts/15
).For direct access without
nv_tcu_demuxer
, UTC Client 1 (CCPLEX) is the default RX client.
- Missing client output
Verify that the correct
-m T264
flag is used withnv_tcu_demuxer
.Check that the expected processor is actually running and generating output.
Some clients might be disabled in certain build configurations.
- Performance issues
Check UART baud rate configuration (default: 115200).
Verify that FIFO mode is enabled for high-throughput applications.
Consider reducing debug verbosity if performance is critical.
- Multi-die debugging
Run a separate
nv_tcu_demuxer
instance for each die.Each die requires its own UART connection and tool instance.