시작하기
하드웨어 핀맵과 인터페이스
이 페이지의 내용
  1. 라즈베리파이
  2. 젯슨 나노
  3. 외부 GPIO 어댑터
  4. I2C 장치의 주소 확인
  5. 1-Wire 핀 변경
  6. 시리얼(UART) 포트

하드웨어 핀맵과 인터페이스

주의 Grablo 에서 입력하는 모든 핀 번호는 GPIO 번호입니다. 커넥터에 인쇄된 물리 핀 번호와 다르므로 혼동하지 않도록 유의합니다.

라즈베리파이

현재 출시되는 모든 모델이 40핀 헤더를 제공하며 각 핀의 기능은 모델과 무관하게 같습니다. 핀 번호를 매기는 방법은 커넥터 기준(Physical/Board)과 CPU 채널 기준(GPIO/BCM) 두 가지가 있고, Grablo 는 GPIO/BCM 을 사용합니다.

라즈베리파이 보드 사진과 40핀 헤더의 핀 번호, GPIO 번호, 전원 핀 배치
라즈베리파이 40핀 헤더입니다. 원 안의 숫자가 커넥터의 핀 번호이고, GPIO xx 로 표시된 숫자가 Grablo 에 입력하는 GPIO 번호입니다.
40핀 헤더 전체 대응표 (핀 번호 ↔ GPIO 번호)
이름핀핀이름
3.3V125V
GPIO 2 (SDA)345V
GPIO 3 (SCL)56GND
GPIO 4 (GPCLK0, 1-Wire 기본값)78GPIO 14 (TXD)
GND910GPIO 15 (RXD)
GPIO 171112GPIO 18 (PCM_CLK)
GPIO 271314GND
GPIO 221516GPIO 23
3.3V1718GPIO 24
GPIO 10 (MOSI)1920GND
GPIO 9 (MISO)2122GPIO 25
GPIO 11 (SCLK)2324GPIO 8 (CE0)
GND2526GPIO 7 (CE1)
GPIO 0 (ID_SD)2728GPIO 1 (ID_SC)
GPIO 52930GND
GPIO 63132GPIO 12 (PWM0)
GPIO 13 (PWM1)3334GND
GPIO 19 (PCM_FS)3536GPIO 16
GPIO 263738GPIO 20 (PCM_DIN)
GND3940GPIO 21 (PCM_DOUT)

외부 장치에 전원을 공급하는 핀은 3.3V 가 1·17번, 5V 가 2·4번이고, GND 는 6·9·14·20·25·30·34·39번 핀입니다. 시중에서 판매하는 GPIO 확장 보드를 사용하면 브레드보드 등에 더 편리하게 연결할 수 있습니다. 각 핀에 대한 상세 정보는 pinout.xyz 에서 확인할 수 있습니다.

기능별 핀 위치 그림
40핀 헤더에서 3.3V, 5V, GND 핀 위치를 강조한 핀맵
전원(3.3V, 5V)과 GND 핀
40핀 헤더에서 I2C 핀 GPIO 2(SDA), GPIO 3(SCL)을 강조한 핀맵
하드웨어 I2C 핀(GPIO 2, 3)
40핀 헤더에서 SPI 핀 GPIO 7, 8, 9, 10, 11을 강조한 핀맵
하드웨어 SPI 핀(GPIO 7, 8, 9, 10, 11)
40핀 헤더에서 UART 핀 GPIO 14(TXD), GPIO 15(RXD)를 강조한 핀맵
시리얼(UART) 핀(GPIO 14, 15)
40핀 헤더에서 하드웨어 PWM 핀 GPIO 12, 13을 강조한 핀맵
하드웨어 PWM 핀(GPIO 12, 13)
용도핀비고
I2CGPIO 2(SDA), 3(SCL)일반 디지털 입출력으로도 사용할 수 있습니다.
SPIGPIO 7, 8, 9, 10, 11일반 디지털 입출력으로도 사용할 수 있습니다.
UARTGPIO 14(TX), 15(RX)Primary UART 입니다. 일반 디지털 입출력으로도 사용할 수 있습니다.
하드웨어 PWMGPIO 12, 13일반 디지털 입출력으로도 사용할 수 있습니다.
1-WireGPIO 4기본값이며 아래 절차로 변경할 수 있습니다.

전원 핀을 제외한 모든 GPIO 핀의 전압 레벨은 3.3V 입니다. 허용 전류는 입력 최대 0.5mA, 출력 최대 약 8mA 이며 출력 핀 전체의 합이 50mA 를 넘지 않아야 합니다. 전원 핀의 허용 전류는 3.3V 핀이 약 800mA, 5V 핀은 약 2.5A 에서 보드 자체 소모 전류(카메라, USB 등 포함)와 3.3V 핀 소모 전류를 뺀 값입니다. 라즈베리파이에는 아날로그 입력 핀이 없으므로 아날로그 신호를 읽으려면 ADS1115 와 같은 ADC 를 함께 사용합니다.

주의 GPIO 핀에 5V 를 연결하면 보드가 손상됩니다. 모터나 다수의 LED 처럼 소모 전류가 큰 장치는 보드 전원이 아니라 별도의 외부 전원으로 공급합니다.

젯슨 나노

젯슨 나노는 핀 번호와 GPIO 번호가 서로 다른 체계입니다. Grablo 에는 GPIO 번호를 입력합니다.

젯슨 나노 40핀 헤더의 핀 번호별 SoC GPIO, 리눅스 GPIO 번호, 기본 기능과 대체 기능 표
젯슨 나노 40핀 헤더입니다. Linux GPIO # 열의 번호가 Grablo 에 입력하는 GPIO 번호입니다.

전원 핀은 3.3V 가 1·17번, 5V 가 2·4번이고, GND 는 6·9·14·20·25·30·34·39번 핀입니다. 디지털 입출력에 사용할 수 있는 핀과 GPIO 번호는 아래와 같습니다. 이 가운데 일부 핀은 PWM, SPI 핀을 겸하므로 해당 기능을 활성화하면 디지털 입출력으로 사용할 수 없습니다.

핀GPIO핀GPIO핀GPIO
7216191631200
1150211732168
127922133338
131423183576
1519424193651
1623226203712
1815291493877
----4078

I2C 는 3번(I2C1 SDA), 5번(I2C1 SCL) 핀을 사용합니다. I2C0 은 카메라 인터페이스 등 내부용이므로 외부 장치에 연결할 수 없습니다. UART 는 8번(TX), 10번(RX) 핀이며 포트 이름은 /dev/ttyTHS1 입니다. PWM 은 32번(PWM0), 33번(PWM2) 핀 두 개를 제공하며, SPI 는 포트 두 개를 제공합니다.

SPI 포트MOSIMISOSCLKCS0CS1
SPI019번21번23번24번26번
SPI137번22번13번18번16번

PWM 과 SPI 는 Jetson-IO 설정에서 활성화해야 사용할 수 있습니다. Jetson-IO 는 터미널에서 다음 명령으로 실행합니다.

sudo /opt/nvidia/jetson-io/jetson-io.py
  1. 화살표 키와 Enter 키로 Configure Jetson 40pin header 를 선택하고, 이어서 Configure header pins manually 를 선택합니다.
  2. 활성화할 기능을 선택하고 Enter 키를 누릅니다.선택된 기능에는 * 표시가 나타납니다.
  3. 선택을 마치면 Back 을 선택한 뒤 Save pin changes 를 선택합니다.
  4. Save and reboot to reconfigure pins 를 선택하여 재부팅합니다.
알아두기 위 표는 젯슨 나노 기준입니다. Orin Nano 와 AGX Orin 은 핀과 GPIO 번호 체계가 다르므로 해당 보드의 공식 자료를 확인합니다.

외부 GPIO 어댑터

보드에 GPIO 핀이 없거나 부족한 경우 USB-GPIO 어댑터를 사용합니다. 등록 방법은 6부를 참고합니다.

어댑터디지털 입출력그 밖의 기능로직 레벨
FT232H12개. AD4~AD7 이 GPIO 0~3, AC0~AC7 이 GPIO 4~11 입니다.I2C(AD0=SCL, AD1·AD2=SDA, 두 핀을 함께 연결), SPI(AD0=SCLK, AD1=MOSI, AD2=MISO, AD3=CS)3.3V. 입력은 5V 를 허용합니다.
MCP2221A4개. G0~G3 이 GPIO 0~3 입니다.I2C(SCL, SDA), UART(RX, TX), ADC 10비트(G1~G3), DAC 5비트(G2 또는 G3, 두 핀에 동시 출력)기본 3.3V. 모듈의 점퍼를 바꾸면 5V 로 변경됩니다.
NUMATO USB-GPIO모델에 따라 8~128개. IO0 부터 GPIO 0 으로 시작합니다.ADC 10비트 6채널(8채널 모델 기준 IO0~IO3, IO6~IO7)5V
주의 USB-GPIO 어댑터는 USB 포트에서 전력을 공급받습니다. 연결한 장치의 전류 합이 400~500mA 를 넘으면 USB 포트가 손상될 수 있습니다.
FT232H

FTDI 의 고속 USB 브리지 IC 로, USB 2.0 Hi-Speed(480Mb/s)를 통해 GPIO, UART, SPI, I2C, JTAG 등의 기능을 제공합니다. 로직 레벨은 3.3V 이지만 입출력 핀이 5V 입력을 견디는 구조(5V tolerant)이므로 GPIO 에 5V 입력을 연결할 수 있습니다. +5V, +3.3V, GND 핀은 LED, I2C·SPI 장치 등 외부 장치에 전원을 공급하는 데 사용합니다.

FT232H 모듈 뒷면의 핀 라벨 AC0~AC9, AD0~AD7, +5V, +3.3V, GND
FT232H 모듈(CJMCU-232H)의 핀 라벨
핀기능GPIO 번호
+5V, +3.3V전원-
GNDGND-
AD0I2C SCL, SPI SCLK-
AD1I2C SDA, SPI MOSI-
AD2I2C SDA, SPI MISO-
AD3SPI CS-
AD4, AD5, AD6, AD7GPIOL0~GPIOL30, 1, 2, 3
AC0 ~ AC7GPIOH0~GPIOH74 ~ 11 (AC0 이 4, AC7 이 11)
FT232H 의 I2C 결선. AD1 과 AD2 를 묶어 SDA, AD0 을 SCL 로 사용
I2C 결선: AD1 과 AD2 를 함께 연결하여 SDA 로, AD0 을 SCL 로 사용합니다.
FT232H 의 SPI 결선. AD0 SCLK, AD1 MOSI, AD2 MISO, AD3 CS
SPI 결선: AD0 이 SCLK, AD1 이 MOSI, AD2 가 MISO, AD3 이 CS 입니다.
MCP2221A

MCP2221A 칩을 탑재한 USB 변환 모듈로 GPIO, I2C, ADC, DAC, UART 를 제공합니다. 아래 설명은 Adafruit MCP2221A 보드 기준이며, 모듈에 따라 핀 배치와 점퍼 위치가 다를 수 있습니다.

MCP2221A 모듈의 핀 라벨 RX, TX, G3, G2, G1, G0, 5V, GND, 3V, R, SCL, SDA
MCP2221A 모듈의 핀 라벨
핀기능GPIO 번호
5VUSB 에서 공급되는 5V 전원-
3.3V (3V)내부 전압 레귤레이터에서 공급되는 3.3V 전원-
GND전원과 로직의 공통 GND-
RST (R)리셋. LOW 를 입력하면 모듈이 리셋됩니다.-
SCL, SDAI2C-
RX, TXUART 수신, 송신-
G0GPIO0
G1GPIO, ADC11
G2GPIO, ADC2, DAC2
G3GPIO, ADC3, DAC3

ADC 는 10비트(0~1023), DAC 는 5비트(0~31)이며 DAC 출력은 G2 와 G3 에 동시에 나옵니다. 디지털 입출력, ADC, DAC, I2C, UART 의 기본 전압 레벨은 3.3V 이고, ADC 입력과 DAC 출력의 전압 범위도 이 레벨에 따라 0~3.3V 또는 0~5V 가 됩니다. 5V 레벨로 바꾸려면 모듈 뒷면의 3V 점퍼 연결을 끊고 5V 점퍼를 납땜합니다.

UART 는 USB 시리얼 장치로 인식됩니다. Linux 에서는 /dev/ttyACM0 처럼 표시되며, Windows 에서는 COM 포트로 표시됩니다.

MCP2221A 모듈 뒷면의 로직 레벨 점퍼. 3V 쪽 연결을 끊고 5V 쪽을 납땜하는 위치
로직 레벨 점퍼: 3V 쪽 연결을 끊고 5V 쪽을 납땜하면 5V 레벨로 바뀝니다.
NUMATO USB-GPIO

GPIO 와 ADC 를 제공하는 USB 모듈로 8채널부터 128채널까지 여러 모델이 있습니다. 아래는 8채널 모델 기준입니다. 디지털 입출력의 전압 레벨은 5V 이고, ADC 는 10비트(0~1023)이며 입력 전압 범위는 0~5V 입니다. VDD 핀은 연결한 장치에 5V 전원을 공급합니다.

NUMATO 8채널 USB-GPIO 모듈의 핀맵. IO0~IO7, GND, USB 커넥터, 전원 선택 점퍼, EXT +5V
NUMATO 8채널 USB-GPIO 핀맵
핀기능GPIO 번호
IO0 ~ IO3GPIO, ADC0~ADC30 ~ 3
IO4, IO5GPIO4, 5
IO6, IO7GPIO, ADC4, ADC56, 7
VDD5V 전원-
GNDGND-

연결한 장치의 전류가 USB 포트의 허용 범위를 넘는 경우에는 전원 선택 점퍼를 1-2(Ext Pwr)로 바꾸고 5V Ext 핀으로 외부 전원을 공급합니다.

NUMATO USB-GPIO 의 전원 선택 점퍼(POWER SELECTION)와 외부 5V 입력 핀(EXT +5V) 위치
전원 선택 점퍼와 외부 5V 입력 핀

I2C 장치의 주소 확인

I/O 장치를 등록할 때는 I2C 주소가 필요합니다. 컨트롤러 터미널에서 다음 명령을 실행하면 하드웨어 I2C 핀에 연결된 장치의 주소가 16진수로 표시됩니다. 버스 번호는 보드에 따라 다를 수 있습니다.

sudo i2cdetect -y 1

이 명령은 주소만 표시하며 장치의 이름이나 종류는 알려주지 않습니다. 장치가 여럿이면 각 장치의 데이터시트에서 주소를 확인하여 대조합니다. 하드웨어 I2C 핀이 아닌 다른 핀에 연결한 장치(소프트웨어 방식)의 주소는 이 명령으로 찾을 수 없습니다.

1-Wire 핀 변경

라즈베리파이의 1-Wire 핀은 기본값이 GPIO 4 입니다. DS18B20 과 같은 장치를 다른 핀에 연결하려면 설정 파일을 편집합니다.

sudo nano /boot/firmware/config.txt

파일에서 dtoverlay=w1-gpio 를 찾아 사용할 핀을 지정합니다. 여러 개의 1-Wire 핀이 필요하면 줄을 여러 개 씁니다. 저장한 뒤 sudo reboot 로 재부팅하면 적용됩니다.

dtoverlay=w1-gpio,gpiopin=17
dtoverlay=w1-gpio,gpiopin=27
알아두기 설정 파일의 경로는 라즈베리파이 OS Bookworm 부터 /boot/firmware/config.txt 이며, 그 이전 버전에서는 /boot/config.txt 입니다.

시리얼(UART) 포트

모드버스와 사용자 정의 통신에서는 포트 이름을 입력해야 합니다. 라즈베리파이의 UART 는 다음과 같이 장치로 인식됩니다.

UART장치 이름설명
Primary/dev/serial0하드웨어 UART 핀(GPIO 14, 15)에 연결된 포트입니다. 모델에 따라 실제 타입이 다르므로 이 이름을 쓰는 것이 안전합니다.
Secondary/dev/serial1블루투스가 있는 모델에서는 블루투스 전용으로 사용됩니다.
Full UART/dev/ttyAMA0성능과 기능이 완전한 UART 입니다.
Mini UART/dev/ttyS0성능이 낮고 일부 기능이 없습니다.
USB-TTL 컨버터/dev/ttyUSB*FT232RL, CP2102, PL2303, CH340 등의 칩셋을 지원합니다. 연결 후 ls -l /dev/ttyUSB* 로 확인합니다.

라즈베리파이의 UART 는 Full UART(PL011)와 Mini UART 두 종류입니다. Mini UART 는 Full UART 보다 성능이 낮고 일부 기능(패리티 비트, 프레임 오류 검출 등)이 없으며, 클럭이 VPU 코어 클럭에 연동되어 코어 주파수가 바뀌면 통신 속도도 함께 바뀝니다. 하드웨어 UART 핀(GPIO 14, 15)에 연결되는 Primary UART 가 어느 종류인지는 모델에 따라 다릅니다.

모델Primary UARTSecondary UART
Raspberry Pi Zero, 1, 2Full UART (UART0)Mini UART (UART1)
Raspberry Pi Zero W, Zero 2 WMini UART (UART1)Full UART (UART0), 블루투스 전용
Raspberry Pi 3, 4Mini UART (UART1)Full UART (UART0), 블루투스 전용
Raspberry Pi 5UART10 (보드의 3핀 디버그 헤더)블루투스 전용 UART

설정 파일의 경로는 라즈베리파이 OS Bookworm 부터 /boot/firmware/config.txt 입니다. 아래 절차는 모두 이 파일을 편집한 뒤 재부팅해야 적용됩니다.

sudo nano /boot/firmware/config.txt

nano 편집기에서는 Ctrl + O, Enter 로 저장하고 Ctrl + X 로 종료합니다. 재부팅은 sudo reboot 로 합니다.

Mini UART 대신 Full UART 사용하기 (라즈베리파이 3, 4, Zero W, Zero 2 W)

Primary UART 가 Mini UART 인 모델에서는 코어 주파수 변화 때문에 시리얼 통신이 불안정할 수 있습니다. 모드버스 RTU 처럼 안정적인 통신이 필요하면 Full UART(UART0)를 Primary UART 로 바꿉니다. 방법은 두 가지이며, 둘 중 하나를 설정 파일 끝에 추가하고 재부팅합니다.

  • 블루투스를 끄고 Full UART 를 Primary 로: 블루투스 모뎀 서비스를 끄고(sudo systemctl disable hciuart) 설정 파일에 dtoverlay=disable-bt 를 추가합니다. 이후 블루투스는 사용할 수 없습니다.
  • 블루투스를 Mini UART 로 옮기고 Full UART 를 Primary 로: 설정 파일에 코어 클럭을 고정하는 core_freq=250 과 dtoverlay=miniuart-bt 를 추가합니다. 블루투스는 계속 사용할 수 있지만 블루투스의 최대 통신 속도가 낮아질 수 있습니다.
# 블루투스를 끄는 경우
dtoverlay=disable-bt

# 블루투스를 Mini UART 로 옮기는 경우
core_freq=250
dtoverlay=miniuart-bt

재부팅한 뒤에는 /dev/serial0 이 Full UART(/dev/ttyAMA0)를 가리킵니다.

숨겨진 UART 사용하기 (라즈베리파이 4)

라즈베리파이 4 에는 숨겨진 Full UART 네 개(UART2~UART5)가 있습니다. 설정 파일 끝에 필요한 줄을 추가하고 재부팅하면 ttyAMA1 부터 순서대로 추가되며, dmesg | grep tty 로 확인할 수 있습니다.

dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
UARTTXDRXD
UART2GPIO 0GPIO 1
UART3GPIO 4GPIO 5
UART4GPIO 8GPIO 9
UART5GPIO 12GPIO 13

TX, RX 핀의 GPIO 번호를 직접 지정할 수도 있습니다.

dtoverlay=uart2,txd2_pin=16,rxd2_pin=17
알아두기 라즈베리파이 5 에는 Mini UART 가 없고, 40핀 헤더에서 사용할 UART 는 uart0-pi5 부터 uart4-pi5 까지의 오버레이로 활성화합니다. 각 UART 가 사용하는 핀과 옵션은 dtoverlay -h uart2-pi5 처럼 확인할 수 있습니다.

USB-TTL 컨버터를 연결한 경우 ls -l /dev/ttyUSB* 를 실행하면 현재 연결된 컨버터의 포트(ttyUSB0, ttyUSB1 등)가 표시되며, 이 이름을 포트 이름으로 사용합니다.