Is there a fixed or a different current limit at each GPIO of a Jetson Nano? If it is fixed current limit across each GPIO, what may be the reason for different current limits from each pin?
Hi, same as TX1/TX2/Xavier, MPIO pad drive strength is +/-1mA or +/- 2mA.
@Trumany Thank you for you answer, this explains already enough why I had trouble with currrent limits in my project. Is it also 3.3 V logic across all these devices?
@Trumany thanks once again!
What is the drive current of 5V pin header(from J41 bank) on Jetson Nano?
The 5V pin header is connected directly to the 5V rail.
Beacuse the Jetson has no 5V regulator, the current limit on that pin is the same as the current limit on your power supply, minus anything consumed by the Jetson and any USB peripherals you have.
So, if you use the barrel connector, with a 4A power supply, and no particularly heavy peripherals, you may be able to draw 3A from the 5V header while the system is idle, but only 1.5A when it’s running full tilt.
The voltage limit of GPIO is 1.8V or 3.3V??? So anyone know connect GPIO to output of Arduino (5v)??
On the board that carries the Nano, there is a voltage level translator that pulls the GPIO to 3.3V, unless you reconfigure it to do 1.8V. The details are in the documentation for the Nano developer kit, which you can find here:
https://developer.nvidia.com/embedded/downloads#?search=Developer%20Kit%20User%20Guide
To go all the way to 5V, you would need to use a second voltage level translator; something like a TXB0108 could do it:
http://www.ti.com/lit/ds/symlink/txb0108.pdf
You can buy these on ready-made boards at AdaFruit, for example:
https://www.adafruit.com/product/395
That being said, I would highly recommend you try one of the 3.3V versions of the Arduino, or that you use some other easy-to-program microcontroller like the Teensy series. The Teensy 3.6 has tons of pins, all of which are 3.3V; the Teensy 3.5 has the same but also is 5.0V “tolerant” (it outputs 3.3V, but doesn’t die from 5V on the pins.) The Teensy 4.0 has fewer pins, is smaller, and is 3.3V only, but is quite fast at 600 MHz and costs under $20.
You program the Teensy series with the Arduino IDE after installing the TeensyDuino add-on, or with something like PlatformIO for Visual Studio Code, so it should be an easy port from Arduino boards for most projects.
https://www.pjrc.com/store/teensy35.html
I have a follow up question for Doge. What is the source current for pin 1 and pin 17 of the GPIO header? It is stated as 3.3V but what is the maximum current it can supply? No info in the datasheet.
Thank you.
Hi,
I am trying to figure out his for a while now, and I am still not sure I completely understand it. I have a controller that has a TTL circuit that outputs a signal with 5V 20mA which I need to connect to the GPIO at the nano. Can I do this directly or will I fry the board? If not would a simple step down converter do the job?
Thanks in advance
The GPIO is not 5V tolerant.
You will want to set up a resistive ladder, or a level converter.
A “step down converter” sounds like a device used for converting power voltage, not signal voltage. And, while the volts are the same, the response times are not – the “power converter” probably will take several hundred milliseconds to come up/down when you change its input.
So, easiest solution: wire a 2.2 kiloohm resistor between the Jetson GPIO pin and ground, and a 1.0 kiloohm resistor between the 5V-output TTL pin and the GPIO pin. Then also connect the grounds of the TTL-output device and the Jetson with wire. This will let you send a signal from the TTL device to the Jetson with good performance (megahertz or so, but not dozens of megahertz.)
If you need dozens-of-megahertz performance, you will want a signal voltage converter circuit like the TXB0101 series.
Many thanks snarky, I will try it out in the next couple of days. Just to be sure I got it right, is it like this below or is there an extra direct connection between TTL ground and gpio ground?
TTL signal (5V) → 1.0 kO → GPIO pin (3.3V)
TTL ground → 2.2 kO → GPIO ground pin
No, that’s not right.
Use 1% tolerance resistors to make sure that tolerance doesn’t overdrive the pins, which can happen if R18 is too low or R19 is too high.
R18 and R19 make a “resistor ladder” also known as “voltage divider.” I highly recommend you read up on that construct, because it’s quite handy when doing electronics!
Also, this will work for a typical “TTL, driven output,” such as typical UARTs and SPI bus connections, and simple “high/low” signals.
It won’t work for signals that are “open collector” such as I2C bus connections. For that, you need the TXS type voltage translators from Texas Instruments.
It also goes one way – you can’t turn this around and send a 3.3V signal out the Jetson GPIO and expect 5V to show up on the TTL side. For that, you need the TXB type voltage translators from Texas Instruments.
Thanks a lot, could not be more clear than the schematics :) I don’t have low tolerance resistors (only 5%), can I damage the board by using these?
Generally, 5% resistors will probably work okay, unless you’re really unlucky.
You could just use a multimeter. The important part is for the 2.2 kOhm resistor to not be much more than 2.2 kOhm, and the 1.0 kOhm resistor to not be much less than 1.0 kOhm.
Let’s call the 1.0 kOhm resistor Ru (for “upper” resistor) and the 2.2 kOhm resistor Rl (for “lower” resistor.)
Let’s call the voltage at the TTL device Vt.
The voltage Vj you will see at the Jetson GPIO pin with the circuit I posted is then:
Vj = Vt * Rl / (Ru + Rl)
(This is a basic voltage divider, or “resistor ladder.”)
With spot-on values, 5.0V * 2.2 / (1.0 + 2.2) is about 3.4 Volts, which is slightly higher than the nominal 3.3V, but looking at the datasheet, it looks as if the interface is actually buffered by a TXB0108 or SN74LVC4T245 or FXMA2102L8X, and these devices in turn are rated at up to 3.6 Volts. If your 5% resistors were maximally unfortunate, you’d get a 5,0 * (2.21.05) / (1.00.95 + 2.2*1.05) voltage, or about 3.54 Volts, which really is pushing it close to the typical 3.6 Volts “Vmax” rating of some of those devices – especially if there’s also some tolerance on the 5.0V side – maybe it’s a 5% device in turn, and the input is 5.25V?
Now, the good news is, in practice, most parts are better precision than their ratings, and more tolerant than their ratings, so you’ll probably be just fine with your particular devkit on your particular parts in normal room temperature, and if that’s all you care about, just do it. If you’re trying to build a system that’s robust over a range of circumstances, tolerances start mattering a whole lot more.
And if you’re really worried, use a 1.1 kOhm resistor on top with the 2.2 kOhm resistor on bottom. Even if they’re 5% off in the worst case, those will work out fine! (Of course, then you have to worry about the Vmin problem of not reaching the “high” level, but that’s typically at 0.7 x VDD, thus you typically have a 30% margin downwards, so that’s less of a problem.)
Thanks for the clear explanation. I was able to get hold of some 1% resistors from a company division where they are doing some production stuff. I am now testing the voltage divider. At the input of the circuit there is about 4.95V when an event is triggered, then at the end I get 2.99V. I am using 4 resistors to make the 2.2kO (it was what I could get hold of) and probably that justifies the loss(?)
However, this is not reliable enough. I am using the Jetson.GPIO python library and tried both the blocking call and using a callback function. Either way, sometimes I get the event (rising) immediately, other times with lag, and sometimes I don’t get the event at all. The controller sends a constant 5V signal during some seconds, for our use case we need only to detect the rising event each time that happens. Would the TXB0101 solve the problem (bare in mind that it does not need to be bi-directional as we only need to catch the event)?
If you can generally read the signal, chances are that the problem is with the software in some way, or maybe with the configuration of the pin.
You could also test with the 3.3V pin on the GPIO header. Get a female/female jumper wire, and hook it from your pin, to the GND pin on the header. Make sure your GPIO input reads 0. Then hook it to the 3.3V pin on the header. Make sure your GPIO input reads 1. If that’s not solid, reliable, and fast, then you have either configured the pin wrong, or your software isn’t doing what you think it is.
Hi,
I am not sure what you mean by “configured the pin wrong”. I did test already with different pins, all with the same result. Before taking on this experiment I did a test with a blinking led and everything worked as expected. I am just using Jetson.GPIO, the callback function is as simple as a print (I am running it with the std/err streams unbuffered), are you suggesting the problem may be with the client python library? I will be on holidays for the next couple of weeks but I will try it with the C++ library when I get back.