Auto Power-on for Jetson TX1/TX2 with Arduino

Dumi Loghin
2 min readJan 30, 2020

For a long time, I had this problem with my Jetson TX1 and TX2 boards. If there is a power outage or the plug is accidentally pulled, next time when the power is up, the Jetson board won’t boot-up automatically. It seems there is no built-in support for that, but there are recommendations in the “OEM Product Design Guide for Jetson TX2” [1] on page 16. There are many topics about this issue on Nvidia’s Devtalk forum.I decided to build my auto power-on circuit for Jetson using an Arduino Uno board. Honestly, using Arduino is an overkill since we only need two pins, but it is very easy to setup and test.

Fig. 1. Arduino Uno-Jetson TX1/TX2 connection diagram

The idea is to send a power-on pulse (low) to the PNL pin of header J6 of the Jetson board when the board is not powered on. To check this, we can monitor the power LED exposed on header J4. For debugging, we can add our own LED which can be turned on when we send the power-on pulse. I connected Arduino’s pin 13 to the power LED of the Jetson board, pin 12 to the PNL pin to send the power-on signal, pin 11 for my own LED. I also connected the grounds of the two boards, as shown in Figure 1.

The Arduino code is listed below. I chose to drive the PNL signal for 1.5 seconds. I added some extra delay before and after calling the power-on method to avoid loops, in case the POWER_LED signal from Jetson is lazy.

#define ledPin 11
#define pnlPin 12
#define pwrPin 13

void powerOn() {
// wait 300ms
delayMicroseconds(300000);
// POWER_BTN low for 1s
digitalWrite(pnlPin, LOW);
delayMicroseconds(500000);
delayMicroseconds(500000);
delayMicroseconds(500000);
delayMicroseconds(500000);
digitalWrite(pnlPin, HIGH);
}

void setup() {
// LED pin low
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);

// pnl pin high (no power on)
pinMode(pnlPin, OUTPUT);
digitalWrite(pnlPin, HIGH);

// pwr pin as input
pinMode(pwrPin, INPUT);

// wait a bit
delayMicroseconds(100000);
}

void loop() {
// pwr pin low means board is up
if (digitalRead(pwrPin) == LOW) {
digitalWrite(ledPin, HIGH);
delayMicroseconds(100000);
}
else {
// wait a bit
delayMicroseconds(500000);
delayMicroseconds(500000);
powerOn();
delayMicroseconds(500000);
}
}

References

[1] http://developer.nvidia.com/embedded/dlc/jetson-tx2-oem-product-design-guide

--

--

Dumi Loghin

I am a Research Fellow in Computer Science with experience in parallel and distributed systems, blockchain, and performance evaluation.