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. Here’s a simple approach for adding a serial console. Looky here:
Serial Console 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 an Ubuntu PC up to the Jetson TX2 Development Kit through UART 1 on the TX2 J21 GPIO header. UART 1 is the serial console on the Jetson TX2 which allows direct access to the serial and debug console. Quite a handy thing to have when the going gets hardcore.
Note: Because the Jetson TX1 and the Jetson TX2 use the same carrier board, the procedure is the same for both devices. There is a nearly identical version of this post for the TX1, basically because we could not afford any new jokes for this article.
Installation
Because the Jetson 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, for this particular case the program Minicom was chosen. Other platforms and software programs can be used including Windows and Macintosh boxen.
One of the nice things about the Jetson TX2 is that it uses 2.54mm headers, which make interfacing easy with the Raspberry Pi and Arduino ecosystems. In this video, we use an Adafruit USB to TTL Serial Cable – Debug / Console Cable for Raspberry Pi. It’s also 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
Here are the signals for the J21 header: Jetson TX2 J21 Header Pinout Note: There is a small white triangle pointing to Pin 1 of the J21 Header on the Jetson TX2 carrier board.
The wiring is straightforward. Make sure that the Jetson is off and wire:
Jetson TX2 J21 Pin 8 (UART 1 TXD) → Cable RXD (White Wire)
Jetson TX2 J21 Pin 10 (UART 1 RXD) → Cable TXD (Green Wire)
Jetson TX2 J21 Pin 9 (GND) → Cable GND (Black Wire)
Then plug the USB connector into the host machine.
Here’s what it should look like:
Software
Once the Jetson is wired and connected, check to make sure that you can see it.
$ lsusb
Should list the device, the name is dependent on the chip being used by the USB-TTL cable. In the video, the device was listed as a PL2303 Serial Port.
You will then need to find the USB port to which the device is mapped.
$ ls /dev/ttyUSB*
This will list out the USB ports. On the machine in the video, there is only one device. Other machines may have more, you’ll have to figure out which is which. In this case, remember /dev/ttyUSB0 is the device to be later entered into the terminal emulator later.
You are then ready to install Minicom:
$ sudo apt-get install minicom
To start Minicom:
$ sudo minicom
The ‘sudo’ is used because of the serial port permissions. You’re then ready to configure the Settings to communicate with the Jetson TX2.
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
You may then start the Jetson, 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 Jetson 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 Uboot.
Warning
I did notice that on this installation if the serial cable is hooked up to the Jetson but is not plugged into the PC, then the display connected to the Jetson remains dark. I could not tell if the machine booted or not. Connecting the cable to the PC, or removing the cable from the Jetson solved that issue.
More Information
The carrier board of the Jetson TX1 and Jetson TX2 are the same. You can take advantage of a good tutorial on the Jetson TX1 wiki labeled Serial Console Wiring. This is a useful tutorial if you plan on build your own cable attached to a header, which is useful for dedicated development.
Conclusion
For the most part, there are two sets of developers who use the serial console. The first set is the casual user, people who only need access through the serial port occasionally. Hopefully this article helps, connect a couple of wires and be done with it. For the more hardcore developers, they will probably build their own cable with connector for a reliable connection.
32 Responses
Dear JetsonHacks,
Thank you very much for your tutorial. I wonder how I can use Teensy 3.2 on Jetson TX2. I read an old article mentioned about “Adding FTDI Module” to Kernel Modules (https://jetsonhacks.com/2015/07/15/jetsonbot-part-v-a-vision-robot-with-a-create-2-base-usb-ftdi-module/).
Is that a correct approach? My goal is to let Jetson TX2 detect Teensy as “ttyACM0”.
Hi Dat,
The FTDI module is built in to the Jetson TX1 and TX2 kernels, you should be able to use it with no problem. The FTDI comes in through the USB ports, so it’s something like /dev/USB* Thanks for reading!
Thank you for you prompt reply!
I just realized that it might be cumbersome to let Teensy 3.2 talk to Jetson TX2. The reason is the ARM 64-bit architecture does not have many supports. On Teensy’s website, they only support libraries for 32-bit ARM.
https://www.pjrc.com/teensy/td_download.html
I will update later if I could found a solution for this.
You might want to check out: https://github.com/DJTobias/Cherry-Autonomous-Racecar
As I recall, Daniel used a Teensy on his TX1 Racecar. The TX1 is running 64-bit 24.1.
Hi JetsonHacks,
It turned out that the `USB_ACM`, which allows Teensy to detect on TX2, disabled on Kernel.
I followed your tutorial on Build Custom Kernel Modules. Before calling makeKernel.h, I executed this command first
sudo sed -i ‘s/.*CONFIG_USB_ACM.*/CONFIG_USB_ACM=y/’ /usr/src/kernel/kernel-4.4/.config
Great to hear you got it to work!
Cheers! I managed to setup serial console with this tutorial.
I’m glad you found it useful. Thanks for reading!
hi, I’m using TX2 communicate with arduino uno via serial port.
however TX2 doesn’t detect USB(/dev/ttyUSB*)
so should i use solution to communicate with arduino uno? Thanks
Not quite sure what your question is. Did you plug the Uno into the USB port?
Hi,
I tried the tutorial and connected a Profilic USB to serial converter from an UBUNTU 16.04 PC station to the Jetson TX2 Evaluation board. On the PC I tried the Minicom app.
The result was a “junk” output on the console. I have measured with a scope the baud-rate and it was very close to 115200 (~8.6 uSec per bit).
Advises will be appreciated.
Igal
Does your cable support hardware flow control? If so, then the Minicom settings need to be adjusted. Another thing to check is the rest of the flow control settings: 8 bits, no parity, and 1 stop bit (115200 8N1). The last item is to make sure the cables are correct, and that TX and RX are properly connected. TX from the PC to RX of the Jetson and RX from the PC to TX of the Jetson . Unfortunately serial communications is very basic, it should “just work”. Outside of that, there isn’t much more. If you experience further problems, a good place to ask for help is the Jetson TX2 Developers forum: https://devtalk.nvidia.com/default/board/188/jetson-tx2/
Thanks for reading!
I’m using an FTDI cable, which has CTS and RTS pins in addition to the standard VCC, GND, RX and TX. Do I need to connect the CTS / RTS pins to anything in order to get it to work, or will the standard 3-wire approach work as above? Also, does it matter if I’m connected to UART0 or UART1?
I have only tried the 3-wire approach as shown in the video, and discussed in the article. I do not know what you have tried to get it to work. There is only one UART on the J21 header, I think it is UART0 but am not sure. Thanks for reading!
Looks like the eLinux Wiring page you linked to has moved to https://elinux.org/Jetson/TX1_Serial_Console ?
Thank you, good catch! It’s difficult to keep up with moving links. The link has been updated. Thanks for reading!
When connecting the adapter. Only the red led is working.
When pressing the power up button, nothing happens.
I connected to the board using serial console and minicom, following this tutorial: https://jetsonhacks.com/2017/03/24/serial-console-nvidia-jetson-tx2/
When pressing power up button, nothing is received with serial console.
I want to know 2 things:
1- How the debug the problem using the serial console to know if the problem is from the Jetson tx2 module itself or from the carrier board?
2- How to access the eMMC in the module to get my data using serial console or any other method? Ordinary recovery method using USB don’t work because the system does not start.
This is the full description of my problem:
https://stackoverflow.com/questions/49270245/nvidia-jetson-tx2-dont-boot-how-to-debug-using-the-serial-console
I do not know what caused your problem, if the system does not turn on then you can not debug it. Please ask your question on the official NVIDIA Jetson TX2 forum where a large group of developers and NVIDIA engineers can share their experience. The forum is located at: https://devtalk.nvidia.com/default/board/188/jetson-tx2/
I think those pins are for UART 0, and not UART 1 as the article says. Can you confirm?
Phil is correct. It is UART0. UART 1 is on J17 — pin 5 is Tx, pin 4 is Rx
Hi Kangalow
my question is not about that topic so i’m sorry
i’m asking if i’m using orb features or any other features for object detection with opencv how can i use different kernels to deal with a part from the image with my gpu
I do not know what you mean by different kernels. You can enable the GPU for use with OpenCV:
https://jetsonhacks.com/2018/06/29/how-to-package-opencv-3-4-with-cuda-nvidia-jetson-tx-dev-kits/
Thanks for reading!
Hi,
I have a problem with jetson for HDMI port. I purchased TX2 around 1 year. It all works fine. But then I moved to another city and shipped my jetson to the new place. I didn’t turn it for around 2 months. But there is no HDMI signal when open the TX2. I use the console serial to check: 1. systems and boards work fine. I can still use minicom access the file. 2 SSD is fine.
However, there is no signal from my HDMI monitor. My monitor is hp 22cwa, which works fine before I move. And I tested the HDMI cable and monitor with raspberry3 and pc, which are both working. Could you give me some suggestions to find the problem?
Thank you so much!
I don’t think I can help with your issue. Please ask this question on the official NVIDIA Jetson forum where a large number of developers and NVIDIA engineers share their experience. The forum is here: https://devtalk.nvidia.com/default/board/188/jetson-tx2/
Can we program the Atmega328p by just directly connecting the TX and RX lines from the Atmega328p chip to a Tx and Rx UART lines on the TX2? I am able to program when USB dongle is connected to the same Tx and Rx but not when I take the dongle out. I expected that I should not need the dongle since I have those lines directly connected but just wondering if I am wrong in my assumption. Any tips would be helpful thanks.
This article is about connecting to the serial console, which generally is not used for other purposes.
How are you powering the Atmega328p if you do not use the USB dongle?
The Atmega328p is standalone chip on our custom board. We have our own on-board power supply. I read your article and you seemed knowledgable with the TX2 and Arduino so I thought you might have some knowledge on whether we need a FTDI in order to program it. Thanks for the response.
what if i wanna run my program under clion and can not open the serial port cause i need a sudo permission
I do not understand your question. clion is an IDE. In the article, the connection to the serial console is via a terminal program.
Can we program the Arduino by just directly connecting the TX and RX lines from the Atmega328p chip to a Tx and Rx UART lines on the TX2? Which python libraries will be used in this UART programming on TX2 side?
I do not know the answers to your first question. Typically people use the Arduino IDE which, AFAIK, requires you use a USB port. You would connect to the Atmega with a USB to TTL converter. However, if you are using the CLI, there are a variety of options which may allow you to use the Jetson UART. I do not have anything to share in that regard. Python libraries are a matter of preference, any of the Linux ones should do.