Difference between revisions of "Jetson/GPIO"

From eLinux.org
Jump to: navigation, search
(PWM output)
(PWM output: Moved the PWM section to its own page)
Line 59: Line 59:
  
 
== PWM output ==
 
== PWM output ==
You can also play with PWM output via sysfs at runtime too! You’ll need to make sure that the pinmux is set up so that PWM is routed to the pin, and that the GPIO for that pin is not claimed, so that the pinmux function is not overridden. Again, you’ll need the following in .config:
+
To control the speed of a motor or brightness of an LED, you often should use PWM output. More details are in the [[Jetson/PWM|PWM page]].
CONFIG_PWM_SYSFS=y
 
 
 
Then:
 
cd /sys/devices/soc0/7000a000.pwm/pwm/pwmchip0
 
 
 
Note: In the L4T kernel, the “soc0” directory component might not be there, and the PWM controller might be named something different like “pwm.0” or “pwm.1”. You might want to just run:
 
cd /sys
 
find . –type d –name "pwmchip*"
 
 
 
Note: You might need to replace “0” in the commands below with a different PWM channel ID:
 
echo 0 > export
 
cd pwm0
 
echo 1000000 > period
 
echo  500000 > duty_cycle  # or whatever number 0..period you want; you can write to this file later to change the duty cycle
 
echo 1 > enable
 
 
 
and when you’re done:
 
cd ..
 
echo 0 > unexport
 
 
 
An hobby servo requires a separate power supply, eg USB, would be excellent to have complete working example - demo.
 
  
 
== I2C / I²C (I-squared-C) / TWI (Two-Wire-Interface) communication ==
 
== I2C / I²C (I-squared-C) / TWI (Two-Wire-Interface) communication ==

Revision as of 17:22, 7 January 2015

GPIO on Jetson TK1

The Jetson TK1 has both a 50-pin and a 75-pin expansion port, both with 2mm spacing in rows of 25 pins:

  • J3A1 (SKT2X25_THR_R 50-pin 2-row 2mm-spaced socket)
  • J3A2 (SKT3X25_THR_R 75-pin 3-row 2mm-spaced socket).

The sockets on the board are female, so you have a few options for physically connecting to the expansion ports:

  • The Samtec TW-25-06-F-5-420-110 header can cover the whole 5x25 expansion port. It might be difficult to find if you just want 1 or 2 of them.
  • You could use separate 3x25 + 2x25 connectors such as a 2-row connector from Digikey.
  • You could just connect to some of the pins individually with solid hookup work or breadboarding pins, particularly if you just want access to several pins.
  • You could build a PCB board with pins sticking out at 2mm spacing, providing you access to potentially all 125 expansion port pins.

If you are building your own kernel or using an early L4T kernel before 19.2, then you need to make sure your kernel .config file contains this before building your kernel:

CONFIG_GPIO_SYSFS=y

Controlling GPIO pins from user-space

Follow the simple Jetson TK1 GPIO tutorial to test a single GPIO pin using sysfs manually from the command-line.

You can also do the equivalent sysfs operations by writing code that accesses those files (eg: using C/C++, Python, Perl, Bash, Java or whatever you want) and then running your code using root permissions. There is an Introduction to sysfs-based GPIO video with associated source-code showing how to do this using C/C++ (shown for BeagleBone, but sysfs-based GPIO programming is the same on Jetson TK1). More details are in the Jetson TK1 Vision-controlled GPIO tutorial.

Jetson TK1 Power pinouts

+12V (VDD_MUX) is available on pin 25 on J3A1. It can supply upto 400mA (4.8W).

+5V is available on pin 1 on J3A1 (bottom-right pin of the dual-row header, next to the text saying "DISPLAY TOUCH"). It can supply upto 500mA (2.5W).

+3.3V is available on pin 16 on J3A1. It can supply upto 500mA (1.65W). Another +3.3V is available on pin 22 (+3.3V_RUN, intended for powering an LCD) that can supply an additional 450mA (1.5W).

+1.8V is available on pin 3 on J3A1 as well as pin 19. It can supply upto 400mA (0.7W).

GND is available on pin 2 on J3A1 (see the image above) as well as pins 8, 9, 14, 15, 26, 47 and many others.

Note: Several other pins can also supply 1.05V, 1.2V and 2.8V at lower currents, for powering CSI cameras.

Jetson TK1 GPIO pinouts

In addition to gpio57 shown in the GPIO Tutorial, you can also access gpio160 to gpio166 (ports GPIO_PU0 to GPIO_PU6) as GPIO, and potentially various other pins too if you don't use 2 CSI cameras, etc.

Port sysfs filename Physical pin Notes
GPIO_PU0 gpio160 Pin 40 on J3A2
GPIO_PU1 gpio161 Pin 43 on J3A2
GPIO_PU2 gpio162 Pin 46 on J3A2 (Disabled by default)
GPIO_PU3 gpio163 Pin 49 on J3A2
GPIO_PU4 gpio164 Pin 52 on J3A2
GPIO_PU5 gpio165 Pin 55 on J3A2
GPIO_PU6 gpio166 Pin 58 on J3A2
GPIO_PH1 gpio57 Pin 50 on J3A1

Click to enlarge

PWM output

To control the speed of a motor or brightness of an LED, you often should use PWM output. More details are in the PWM page.

I2C / I²C (I-squared-C) / TWI (Two-Wire-Interface) communication

See the I2C page for details about I2C on Jetson TK1.

Jetson TK1 GPIO electrical connections

Digital output using a transistor as a switch. Click to enlarge

The GPIO pins on Jetson TK1 are all 1.8V logic and can only supply a few milli-amps of current, so you can't simply attach common 5V or 3.3V logic signals or devices directly to the Jetson TK1 GPIO pins. There are several options for using the 1.8V GPIO:

  • Build your own transistor or FET based switching circuit. This is a reasonable solution if you just want to turn on 1-2 output pins and/or read 1-2 input pins and you don't need high-speed or bidirectional behavior. For example, if you only want to turn on a single LED or motor or relay then you could connect a GPIO pin through a resistor to a transistor, and get the transistor to turn on the LED, motor or relay (with a flyback diode for protection), such as shown in the circuit on the right. (You can download this schematic for KiCad). You can also learn more about using a Transistor as a switch. See the GPIO tutorial for an example circuit.
Bidirectional logic converter
  • Use a bidirectional logic level shifter to allow bidirectional behavior at high-speeds for multiple GPIO pins. This is the recommended option, particularly if you want to use more than 2 or 3 GPIO pins. Some examples are:
  • Use a one-way opto-isolated level shifter, such as a 2-channel opto-isolated level shifter for $5. Opto-isolation allows you to use a separate power circuit (eg: separate batteries) for a high-power load such as a robot's motor, compared to the logic circuitry, and this is fairly crucial for industrial or rugged projects such as outdoor robotics, but typically not needed for low-power hobby projects.