libgpiod
NVIDIA/Jetson

libgpiod

728x90

테스트 환경

  • AGX ORIN Devit
  • JETPACK 6.1

JETPACK6부터 GPIO sysfs가 linux 4.8 Linux 커널부터 더 이상 사용되지 않기 때문에 아래 링크에서 사용하던 sysfs 방식이 사용이 불가능해졌다. JetPack 5에서는 여전히 사용가능하지만 JetPack 6에서는 커널 버전의 변경으로 인해 더 이상 사용할 수 없게 되었다.

 

https://rorsi.tistory.com/94

 

Jetson GPIO Control

본 글은 ORIN NX 모듈의 GPIO에 액세스하고 제어하는 ​​방법을 보여준다. 해당 방법은 다른 모듈에서도 사용 가능하다. 1단계: 사용 중인 SoM에 따라 pinmux 문서를 다운로드한다. 여기서는 Jetson ORIN

rorsi.tistory.com

 

JETPACK 6에서 gpio를 제어하기 위해서는 libgpiod 라이브러리가 필요하다. gpiod는 libgpiod 라이브러리를 사용하는 linux GPIO 문자 장치와 상호 작용하기 위한 도구로써 아래 명령어로 설치 가능하다.

sudo apt install gpiod

명령어 옵션은 아래와 같습니다.

* gpiodetect - list all gpiochips present on the system, their names, labels
               and number of GPIO lines

* gpioinfo   - list all lines of specified gpiochips, their names, consumers,
               direction, active state and additional flags

* gpioget    - read values of specified GPIO lines

* gpioset    - set values of specified GPIO lines, potentially keep the lines
               exported and wait until timeout, user input or signal

* gpiofind   - find the gpiochip name and line offset given the line name

* gpiomon    - wait for events on GPIO lines, specify which events to watch,
               how many events to process before exiting or if the events
               should be reported to the console

 

설치 후 사용하고자 하는 GPIO의 설정을 확인해야 한다. 먼저 Pinmux 스프레드시트에서 사용하려는 핀이 output 또는 bidirectional로 설정되어 있는지 확인한다.

libgpiod 라이브러리의 gpioset명령을 사용합니다(예: gpioset PAC.06=1핀 7의 경우).

GPIO 칩은 핀이 아닌 오프셋으로 제어해야 한다.

 

사용 가능한 오프셋을 확인하기 위해서는 아래 gpiodetect 명령어를 사용하여 확인한다.

nvidia@tegra-ubuntu:~$ sudo gpiodetect
gpiochip0 [tegra234-gpio] (164 lines)
gpiochip1 [tegra234-gpio-aon] (32 lines)

 

또한 오프셋 안에 gpio 상태 값을 확인하기 위해서는 아래 명령어를 사용하여 확인한다.

nvidia@tegra-ubuntu:~$ sudo gpioinfo tegra234-gpio-aon
gpiochip1 - 32 lines:
	line   0:     "PAA.00"       unused   input  active-high 
	line   1:     "PAA.01"       unused   input  active-high 
	line   2:     "PAA.02"       unused   input  active-high 
	line   3:     "PAA.03"       unused   input  active-high 
	line   4:     "PAA.04"       unused   input  active-high 
	line   5:     "PAA.05"       unused   input  active-high 
	line   6:     "PAA.06"       unused   input  active-high 
	line   7:     "PAA.07"       unused   input  active-high 
	line   8:     "PBB.00"       unused   input  active-high 
	line   9:     "PBB.01"       unused   input  active-high 
	line  10:     "PBB.02"       unused   input  active-high 
	line  11:     "PBB.03"       unused  output  active-high 
	line  12:     "PCC.00"       unused   input  active-high 
	line  13:     "PCC.01"       unused   input  active-high 
	line  14:     "PCC.02"       unused   input  active-high 
	line  15:     "PCC.03"       unused   input  active-high 
	line  16:     "PCC.04"       unused   input  active-high 
	line  17:     "PCC.05"       unused   input  active-high 
	line  18:     "PCC.06"       unused   input  active-high 
	line  19:     "PCC.07"       unused   input  active-high 
	line  20:     "PDD.00"       unused   input  active-high 
	line  21:     "PDD.01"       unused   input  active-high 
	line  22:     "PDD.02"       unused   input  active-high 
	line  23:     "PEE.00"       unused   input  active-high 
	line  24:     "PEE.01"       unused   input  active-high 
	line  25:     "PEE.02"       unused   input  active-high 
	line  26:     "PEE.03"       unused   input  active-high 
	line  27:     "PEE.04"      "Power"   input   active-low [used]
	line  28:     "PEE.05"       unused   input  active-high 
	line  29:     "PEE.06"       unused   input  active-high 
	line  30:     "PEE.07"       unused   input  active-high 
	line  31:     "PGG.00"       unused   input  active-high

 

단일 gpio 핀의 상태 값을 확인하기 싶으면 아래 gpiofind, gpioget 명령어를 이용하여 확인 가능하다.

nvidia@tegra-ubuntu:~$ sudo gpiofind "PAC.06"
gpiochip0 144
nvidia@tegra-ubuntu:~$ sudo gpioget gpiochip0 24
0

이제 예를 들어, AGX Orin에서 핀 18(PAC.06)로 테스트한다고 하면, 위에서 확인한 것처럼 아래 gpiofind 명령어를 통해 실제 오프셋 값을 확인할 수 있다.

nvidia@tegra-ubuntu:~$ sudo gpiofind PAC.06
gpiochip0 144

해당 핀을 HIGH 값으로 변경하려면 gpioset 명령어를 통해 변경하고자 하는 오프셋 값의 1을 입력하면 된다.

nvidia@tegra-ubuntu:~$ sudo gpioset 0 144=1

반대로 핀을 LOW 값으로 변경하려면 0을 입력하면 된다.

nvidia@tegra-ubuntu:~$ sudo gpioset 0 144=0

하지만 위의 명령어로 진행 시 일시적으로 값이 변화한 후 다시 기본 상태로 되돌아 간다. 이를 방지하기 위해서는 mode 옵션을 설정해주어야 한다.

 

--mode=wait 옵션을 사용하면 사용자가 ENTER를 입력할 때 까지 해당 신호를 유지한다.

nvidia@tegra-ubuntu:~$ sudo gpioset --mode=wait 0 144=1

gpiofind 명령어를 gpioset 실행 할 때 명령 줄로 실행시키면 핀 이름으로도 설정이 가능하다.

sudo gpioset --mode=wait `gpiofind "PAC.06"`=1

--mode=time 옵션을 사용하면 사용자가 지정한 시간동한 해당 신호를 유지한다.

sudo gpioset --mode=time --sec=1 gpiochip0 144=0
*option
  -s, --sec=SEC:	specify the number of seconds to wait (only valid for --mode=time)
  -u, --usec=USEC:	specify the number of microseconds to wait (only valid for --mode=time)

 

 

참고 :

https://lloydrochester.com/post/hardware/libgpiod-intro-rpi/

 

The new GPIO Interface on the Raspberry PI: libgpiod

The new GPIO Interface on the Raspberry PI: libgpiod Allegedly, The GPIO Sysfs Interface is deprecated. The deprecated Sysfs would interact with GPIO using the /sys/class/gpio pseudo-filesytem. The Application Binary Interface - ABI - provides a character

lloydrochester.com

 

728x90

'NVIDIA > Jetson' 카테고리의 다른 글

Jetson dynamic overlay  (0) 2024.11.26
Jetson Fan Control  (0) 2024.11.18
JETSON UEFI DEBUG  (0) 2024.07.15
JETPACK 6 Flash  (0) 2024.06.23
Jetson Sytem Upgrade  (0) 2024.05.11