# Getting Started: OpenTNC (NA6D)

Source: https://na6d.com/start/opentnc

The OpenTNC is an open-source AX.25 Terminal Node Controller (TNC) designed for amateur radio packet communications (supporting 1200-baud packet, with support for 300, 2400, and 9600-baud modes). Unlike simple sound card interfaces, the OpenTNC runs its own internal AX.25 protocol stack, manages modulation/demodulation on-board, and communicates via a standard USB serial port. It supports standard connected packet mode, KISS mode, and FX.25 forward error correction.

This guide focuses on the NA6D OpenTNC.

 Note: For DIY reference board assembly, LED orientations, other connector types (like DIN-5), and WeAct Black Pill STM32 board layouts, please refer to the official OpenTNC upstream GitLab repository (https://gitlab.com/davidplatt/opentnc).

# Physical Connection (Plug & Play)

The NA6D OpenTNC connects to your computer via a standard USB-C port.

- USB Cable: Connect the TNC to your computer using a high-quality USB-C data cable.
 Warning: Many generic USB-C cables are "power-only" charging cables and will not work. If your computer does not detect the TNC, try a different data-capable USB cable.

- Driver Compatibility: The OpenTNC enumerates as a class-standard USB CDC-ACM "virtual serial port". No custom drivers are required:

- Windows 10/11: Automatically recognized as a "USB Serial Device (COMx)".

- macOS: Automatically recognized as /dev/cu.usbmodem* or /dev/tty.usbmodem*.

- Linux: Automatically recognized as /dev/ttyACM0 (or similar).

- Verify Connection:

- On Windows, open Device Manager and expand Ports (COM & LPT) to find the assigned COM port.

- When in standard running mode, the device will display as a standard serial port. No yellow warning icons should appear.

# Opening & Disassembling the Enclosure

The NA6D OpenTNC is housed in a compact, black anodized aluminum extrusion enclosure with precision metal end-cap plates. Follow the instructions below to open or fully disassemble the unit.

## Basic Disassembly (Accessing BOOTSEL & RV202):

-
(Optional) Disconnect the USB-C and DB-9 radio cables from the TNC.

- Unscrew the 4 corner screws from the rear panel of the unit using a Phillips screwdriver.

- Gently slide the PCB board assembly out of the aluminum enclosure.

## Complete Disassembly & Reassembly:

If you need to completely disassemble or reassemble the unit:

- Unscrew the jackscrews on the DB-9 radio port which secure the PCB to the rear enclosure panel.

- Unscrew the front panel from the main aluminum enclosure body.

- Unscrew the LED separator from the PCB by removing the 2 Phillips screws threaded from the bottom side of the PCB.

 Reassembly Tip: When reinstalling the DB-9 jackscrews, it is recommended to plug a USB-C cable into the USB port while tightening the screws. This holds the PCB in proper alignment with the rear panel cutouts.

## Internal Layout Reference:

-
BOOTSEL Button: Located directly on the board near the USB-C connector.

-
RV202 Transmit Potentiometer: Located near the DB-9 radio port (multi-turn trimmer screw).

# Radio Connector Pinout

The NA6D board uses a single female DB-9 (DE-9) connector to interface with your transceiver's audio and PTT lines. Wire your custom radio cable according to the table below, or choose from our pre-made NA6D OpenTNC Radio Cables (/products/opentnc-cable).

 Pre-Made Radio Cables Available: If you prefer a plug-and-play setup without soldering, pre-made radio cables (including 6-Pin Mini-DIN data cables and Kenwood/Baofeng K1 HT cables) can be ordered directly from the NA6D OpenTNC Radio Cables product page (/products/opentnc-cable).

DB-9 / DE-9 Female Connector Pinout (Kantronics-Compatible Standard)

Looking directly into the female DB-9 connector jack on the TNC:

 |

 | Pin

 | Signal

 | Direction

 | Description

 | 1

 | TX Audio

 | Out (to Radio)

 | Transmit audio modulation

 | 2

 | Squelch Open

 | In (from Radio)

 | Optional squelch status / COR

 | 3

 | Push-To-Talk (PTT)

 | Out (to Radio)

 | Transmit gate (Active LOW/Grounded to transmit)

 | 4

 | N/C

 | -

 | Not connected

 | 5

 | RX Audio

 | In (from Radio)

 | Receive audio input

 | 6

 | Ground

 | -

 | Signal and power ground

 | 7

 | N/C

 | -

 | Not connected

 | 8

 | N/C

 | -

 | Not connected

 | 9

 | N/C

 | -

 | Not connected

 Note: Kantronics is a trademark of its respective owner and is referenced here solely to indicate pinout wiring compatibility.

# Initial Terminal Configuration

Before connecting the TNC to your radio, you must configure your amateur radio callsign and define your carrier detection settings.

- Open a Terminal Emulator: Use any standard terminal program (e.g., PuTTY or Tera Term on Windows, screen or minicom on Linux/macOS).

- Connection Settings:

- Port: Select the COM/serial port identified in the previous step.

- Baud Rate: Any (USB virtual serial ignores the baud rate setting, though 9600 or 115200 is standard).

- Format: `8-N-1` (8 Data bits, No parity, 1 Stop bit).

- Flow Control: None (OpenTNC does not implement RTS/CTS; flow control is managed automatically by the USB layers).

-
Configure the TNC:

- Press Enter to bring up the `cmd:` prompt.

-
Set Callsign: Type `MYCALL <YOUR_CALLSIGN>` (e.g., `MYCALL NA6D`) and press Enter.

-
Configure Carrier Detection Mode: OpenTNC needs to know how to detect that the channel is busy so it doesn't transmit over other stations.

-
If your radio squelch is always closed unless a signal is received (standard behavior for speaker outputs), type:
`CARRIER SQUELCH`

-
If your radio squelch is left wide open (continuous white noise is sent to the TNC), type:
`CARRIER AUDIO`

-
Save Settings: Type `SAVE!` and press Enter to write these configuration changes to the board's non-volatile flash memory.

-
Help Menu: Type `HELP` at any time to print a list of all available commands.

# Calibration

To ensure reliable packet transmission and reception, you must calibrate both transmit and receive audio levels.

## Transmit (TX) Calibration

You need to adjust the transmit audio level so that your radio transmits the signal with the proper amount of FM deviation (typically 2.5 to 3.5 kHz in most areas).

The NA6D board uses a multi-turn potentiometer (RV202) to adjust the transmit audio level.

 Tip - Pre-Calibrated out of the box: NA6D OpenTNC boards are shipped pre-calibrated to 50 mV peak-to-peak (50 mVpp), which is the optimal level for the vast majority of standard radio microphone inputs. If you are connecting to a microphone jack (or K1 interface), you likely do not need to adjust the transmit levels at all. Only perform TX calibration if you are driving a direct modulator input (which requires higher levels) or if you experience over/under-deviation issues.

-
Direct Modulator (9600-baud capable output): The output circuit can produce over 1 Volt peak-to-peak.

-
Microphone Input (1200-baud standard): If driving a microphone input (or the DIN-jack equivalent) and you need to customize the level, the potentiometer will need to be turned down almost all the way (typically 1/2 to 1 full turn up from the "fully off/counterclockwise" position).

### Calibration Procedure:

- Connect your TNC to your radio, and connect your radio to a dummy load (or a clear frequency).

- Open the enclosure (see Section 2) to access RV202.

- Connect to the TNC serial console.

- Type the command `CALIBRATE` and press Enter.

- Adjust the level using one of these three methods:

-
Method A (Service Monitor / Deviation Meter): Press `L` (low tone, 1200 Hz) or `H` (high tone, 2200 Hz) to transmit. Use a small screwdriver to turn RV202 until your deviation meter reads between 2.5 and 3.0 kHz deviation.

-
Method B (Bessel-Null Spectrum Analyzer): Monitor the transmit frequency with an RF spectrum analyzer using a sense antenna (do not connect the radio directly to the analyzer). Start `CALIBRATE`, press `L` to send the 1200 Hz tone. Slowly turn up RV202 until the center carrier amplitude drops to its first null (deepest minimum). This represents a peak deviation of exactly 2.86 kHz.

-
Method C (By Ear / Comparison): Monitor your transmit frequency using a second receiver. Listen to other active packet stations in your area to gauge their "loudness". Start `CALIBRATE`, press Enter to toggle transmit, and adjust RV202 until your transmit tone loudness matches the other stations.

- Press `Q` or Enter to stop transmitting and exit calibration mode.

## Receive (RX) Calibration

The RX level potentiometer (RV201) is NOT populated on NA6D boards to ensure maximum signal fidelity. Instead, receive levels are adjusted by controlling the volume output on the radio itself.

- Connect the TNC to your radio's audio output (speaker jack or data jack).

- Enter `CALIBRATE` mode on the console (do not trigger a transmit tone).

- Open your radio's squelch (or listen to active packet traffic/white noise).

- Monitor the RUN/Heartbeat LED (LED 1):

-
Normal behavior: Blinks briefly once per second.

-
Clipping / Overdrive warning: The LED will blink rapidly or stay illuminated solidly when audio is present.

- If the LED indicates clipping when squelch is open or a packet is received, turn down the volume control on your radio until the LED returns to its normal once-per-second flash.

# Common Software Setup Guides

OpenTNC operates in two modes: Command Mode (interactive terminal command line) and KISS Mode (binary packet interface for computer software).

To switch to KISS mode manually, connect to the terminal and type `KISS ON`. To exit KISS mode, either power cycle the TNC, send the KISS exit sequence (`0xC0 0xFF 0xC0`), or configure your software to release the port.

## Winlink Express (Packet KISS)

Unlike a sound card interface (like the AIOC), you do not run sound modem software on the PC. OpenTNC acts as the hardware packet TNC.

- In Winlink Express, open a Packet Winlink session.

- Click Settings in the session window.

- Set Packet TNC Type to KISS.

- Set PTT Port / Serial Port to the COM Port of your OpenTNC.

- Set Baud Rate to 9600 or 19200 (any value works, but must match what is selected in the serial config).

- Set Flow Control to None or Hardware (None is recommended).

## Direwolf (Connecting to Serial KISS TNC)

If you want to use Direwolf as a gateway or digipeater and use the OpenTNC as the physical radio modem:

- Open your `direwolf.conf` file.

- Disable local audio device capture (since the TNC handles all A/D conversion and modulation):
`ADEVICE - -`

- Connect Direwolf to the physical serial port of the TNC using the SERIALKISS command:
`SERIALKISS COMx 9600`
(Replace COMx with your actual COM port, e.g., /dev/ttyACM0 on Linux, and 9600 with the desired baud rate).

## APRS Clients (PinPoint APRS / APRSIS32)

- Open your APRS client's port configuration.

- Create a new connection:

-
Interface Type: Serial / TNC.

-
TNC Type: KISS.

-
COM Port: Select your OpenTNC COM port.

-
Baud Rate: 9600 or 115200.

-
Data Bits: 8, Parity: None, Stop Bits: 1.

-
Flow Control: None.

- The software will automatically send the command to initialize KISS mode on startup.

## Outpost Packet Manager

For interactive BBS and packet messaging:

- Go to Setup > Interface > COM Port.

- Select your OpenTNC COM port.

- Set Baud Rate to 9600 and Character Format to 8-N-1.

- Set Flow Control to None.

- For networks requiring pre-set commands (like SCC-ARES-RACES JNOS BBS), set the Commands to send before S/R to:

```
`SLOTTIME 10
PERSIST 63
PPERSIST ON
PACLEN 128
MAXFRAME 2
FRACK 6
RETRY 8
RESPTIME 5
CHECK 30
TXDELAY 40
SENDPAC $05
CR OFF
PACTIME AFTER 1
CPACTIME ON`
```

- Set the Commands to send after S/R to:

```
`SENDPAC $0D
CR ON
PACTIME AFTER 10
CPACTIME OFF`
```

# LED Diagnostic Guide

The NA6D OpenTNC features five LEDs (numbered left to right) which provide diagnostic details:

 |

 | LED

 | Function

 | Standard Mono-Color LED Behavior

 | Optional WS2812B NeoPixel Behavior

 | 1

 | RUN

 | Blinks briefly once a second. Blinks when data is sent to/from host. Remains ON if incoming audio is clipping (> 2V peak-to-peak).

 | Blinks Green once a second. Blinks Blue during USB data transfer. Blinks/remains Red if incoming audio is clipping.

 | 2

 | CONNECT

 | ON when establishing/established link, or when in KISS mode.

 | Red: Establishing link.
Green: Active standard link.
Blue: Active link using FX.25 error correction.
Yellow: Tearing down link.
White: Operating in KISS mode.

 | 3

 | CARRIER

 | ON when valid HDLC signal is detected, or if squelch/audio is open.

 | Green: Valid HDLC carrier detected.
Red: Audio signal present (CARRIER AUDIO).
Blue: Squelch line active (CARRIER SQUELCH).
OFF: Quiet channel.

 | 4

 | PACKET

 | Blinks when valid packet is received. ON when packets are queued to transmit.

 | Blinks Green: Valid AX.25 packet received.
Blinks Blue: Valid FX.25-protected packet received.
Red: Packets waiting to transmit.

 | 5

 | PTT

 | ON when transmitting.

 | Red: Transmitting guard tones (TXDELAY/ABORTs).
Green: Transmitting AX.25 frame.
Blue: Transmitting FX.25-protected frame.

# Advanced Features & Protocol Extensions

 Upstream Reference: The OpenTNC firmware and architecture were created by Dave Platt (AE6EO). For comprehensive technical documentation, firmware source code, and hardware schematics, visit the official OpenTNC Upstream GitLab Repository (https://gitlab.com/davidplatt/opentnc).

The OpenTNC includes advanced protocol extensions that go well beyond basic AX.25 TNC capabilities:

-
FX.25 Forward Error Correction: Wraps standard AX.25 frames inside Reed-Solomon RS(255,239) error correction blocks. This allows noise-damaged packets to be reconstructed without requiring time-consuming retransmissions, while maintaining 100% backward compatibility with standard TNCs. Configurable via `FX25Connection` (OFF, REACTIVE, OPPORTUNISTIC, ON) and `FX25Encoding` (OFF, MINIMUM, MAXIMUM, AUTOMATIC).

-
2400 bit/s V.26 Mode: Provides 1200 baud QPSK phase-shift keying over standard voice-grade radio channels, doubling throughput compared to 1200-baud AFSK.

-
9600-baud G3RUH FSK: High-speed packet communication using G3RUH scrambling for radios equipped with direct discriminator audio outputs and direct modulator inputs.

-
Built-in Digipeater & APRS Engine: Supports standard AX.25 digipeating (`DIGIPEAT ON`, up to 6 hops) and APRS fill-in digipeating (`APRSDIGI WIDE1-1`) equipped with a 30-second CRC32 duplicate suppression window.

-
AX.25 v2.2 & Selective Reject (SREJ): Modern link layer enhancements supporting Selective Reject (retransmitting only missing frames rather than the full window) and extended sequence numbers (modulo 128 windowing).

For in-depth technical details, Zephyr RTOS source code, and build files, explore the OpenTNC Upstream GitLab Repository (https://gitlab.com/davidplatt/opentnc).

# Updating Firmware

The NA6D OpenTNC runs on an RP2040 chip. Flashing is simple and does not require custom hardware programmers.

There are two ways to put the TNC into bootloader mode to flash new firmware:

## Method A: Software Command (Recommended - No need to open the case)

If your TNC is already plugged in and working, you can trigger bootloader mode via software:

- Open a terminal emulator (like PuTTY or Tera Term) and connect to the TNC's virtual COM port.

- In the terminal, type `mode expert` and press Enter.

- Type `plugh!` and press Enter.

- The TNC will immediately reboot and mount on your computer as a USB mass-storage drive named RPI-RP2.

## Method B: Physical BOOTSEL Button

If the firmware is corrupt or you cannot connect via serial:

- Download the latest `.uf2` firmware image from the images directory (https://gitlab.com/davidplatt/opentnc/-/tree/master/images) of the OpenTNC repository.

- Open the enclosure (see Section 2) to access the board.

- Locate the BOOTSEL button on the NA6D board (near the USB-C connector).

- Hold down the BOOTSEL button while connecting the TNC to your computer's USB port.

- Release the button. The TNC will mount on your computer as a USB mass-storage drive named RPI-RP2.

### Copying the Firmware File:

- Open the mounted RPI-RP2 drive.

- Drag and drop (or copy) the downloaded `.uf2` firmware file onto the drive.

- The TNC will automatically reboot, flash the new firmware, and reconnect as a virtual COM port. The heartbeat LED will resume its normal status.

# Troubleshooting

### My computer doesn't see a new COM port when I plug the TNC in.

-
USB Cable: You are likely using a "power-only" USB-C cable. Swap it for a high-quality USB-C data cable.

-
Port Conflict: Check your OS device manager. Try plugging into a different USB port directly on the motherboard.

### The TNC disconnects or freezes when I transmit.

-
Radio Frequency Interference (RFI): This happens when RF energy from your antenna leaks into the USB cable.

- Add ferrite chokes/beads to both ends of the USB cable.

- Use a high-quality shielded USB cable.

- Keep the USB cable rerouted away from your radio's antenna.

- Move the antenna further away from your computer/TNC setup (e.g. using a length of coax to an external or magnetic mount antenna).

### The TNC does not decode packets.

-
Audio Clipping: If LED 1 (or NeoPixel 1) is lit solid red during reception, your radio volume is too high and is distorting the signal. Turn down the radio volume.

-
Carrier Mode Configuration: Ensure your carrier mode (CARRIER AUDIO vs CARRIER SQUELCH) matches your physical radio's squelch configuration. Check Section 4 for configuration details. Remember to save changes by typing `SAVE!`.