Jetson Nano – Serial Console

A Serial Console is a useful tool for embedded development, remote access, and those times when the development kit has issues that you need to observe. Looky here:

Background

The story of serial data transfer over wires goes back almost a hundred years. I’ve heard stories that Ferdinand Magellan first discovered a serial cable on his journeys, but lost it to a tangle in the battle of Mactan in 1521. Apparently it was later rediscovered in America where teletypewriters used serial communication technology over telegraph wires, the first patents around stop/start method of synchronization over wires being granted around 1916. 

Serial communication in the computer industry is ubiquitous, in this case we are going to connect a PC up to the Jetson Nano Developer Kit via the UART on J44. This UART is the serial console on the Jetson Nano which allows direct access to the serial and debug console. Quite a handy thing to have when the going gets hardcore.

In addition to providing the typical console, the serial console is useful in many other situations. This includes the ability to choose menu entries for different boot Images (Linux kernel images), as well accessing a Nano that does not have a keyboard, mouse, networking or display.

Installation

Because the Nano communicates over a basic serial cable, almost any computer with serial terminal software can communicate with the Jetson. There are a wide range and variety of software terminal emulators out there. In this video, a laptop running Ubuntu and the program Minicom is shown. Other platforms and software programs can be used including Windows and Macintosh boxen.

The Jetson Nano J44 header uses TTL logic. While there are various ways to interface with it, we chose to convert the signal to USB. In the video, we use an Adafruit USB to TTL Serial Cable – Debug / Console Cable [954] available from Amazon.

There are a wide variety of offerings for these types of cable. The products fall in two camps. The first camp uses FTDI chips for TTL to USB conversion, the second camp uses PL2303HX chips. The Adafruit cable is in the latter camp. One thing to keep in mind is that a driver for the appropriate chip may be required for the cable to work correctly with your particular operating system. The driver for the PL2303HX was already installed on the machine being used in the demonstration.

Wiring

The wiring is straightforward. Make sure that the Nano is not powered and wire:

Jetson Nano J44 Pin 2 (TXD) → Cable RXD (White Wire)
Jetson Nano J44 Pin 3 (RXD) → Cable TXD (Green Wire)
Jetson Nano J44 Pin 6 (GND) → Cable GND (Black Wire)

The Jetson Nano J44 pins are also silkscreened on the underside of the board. Here’s what it should look like:

Software

Before you can connect with a serial terminal application on the other computer, you will need to determine the port to which the Jetson Nano connects. This is dependent on the computer you are using.

In the video on the Ubuntu PC, we open a new Terminal and:

$ dmesg −−follow

Next, plug in the Serial Cable. You will see a driver assign the cable a port number. In the video, the cable is ttyUSB0.

In the video, we use the Minicom application. Other programs/platforms should be similar. We’ll cover the video walkthrough. Install Minicom:

$ sudo apt-get install minicom

To start Minicom:

$ sudo minicom

The ‘sudo’ is used because of serial port permissions. You’re then ready to configure the Settings to communicate with the Jetson Nano.

Settings

An important part of serial communication is settings that are used to communicate between the devices. Rather than go through a lengthy discussion of each setting and it’s meaning, let’s distill it into the settings themselves.

First set the device, in the video the device was ‘/dev/ttyUSB0‘.

Connection speed is 115200, with 8 bits, no parity, and 1 stop bit (115200 8N1). For these three wire cables, the correct setting is software control, no hardware control. If you choose a 5 wire setup with RTS and CTS lines, then select hardware control, and no software control.

In Minicom, Ctrl A Z brings up the main menu. Select the ‘cOnfigure Minicom’ menu item, enter the settings, and make sure that you save the configuration as described in the video. After that task is complete, exit Minicom and restart to have the settings take effect.

$ sudo minicom

Now power on the Jetson Nano, at which point you will see the kernel log starting to scroll on the Minicom window on the host.

There are a wide variety of ways to interact with the Nano through the serial console, one of the more useful tips is to interrupt the startup process with a keystroke to be able to interact with the bootloader.

You can also choose different kernels during this process when they are present. If you do not interrupt the process with a keystroke, the Nano will boot and you will be at a Terminal prompt.

Conclusion

The Serial Console is a useful tool to help debug the startup sequence, load different Linux kernels, or simply act as a headless console. All it takes is one wire, and you can talk to your Jetson Nano!


11 Comments

  1. Thank you for your article. Serial console works fine, but I’m unable to get /dev/ttyTHS1 to work on pin header J41 (TX pin 8 to white) and (RX pin 10 to green).

  2. Ok so I see that pins 8 and 10 are running at 1.8V so they’ll need level shifting. But I don’t see any exposed 1.8V pin that I can use as a reference for a level shifter.

  3. I do not own a jetson yet. So can you please confirm that the boot loader (grub or whatever) and the OS have the correct settings in place for the serial console to just work?

    In RHEL this would be something like:
    grub.cfg:
    GRUB_SERIAL_COMMAND=”serial –speed=115200″
    GRUB_CMDLINE_LINUX=”panic=15 unit=0 word=8 parity=no stop=1 console=ttyS0,115200n8″

    and adding ttyS0 to /etc/securetty.

    Thanks,
    Oliver

Leave a Reply

Your email address will not be published.


*