I2C/SPI/UART 활성화와 센서 연결하기: Raspberry Pi 5 인터페이스 기초

대상: Raspberry Pi 5로 IMU, 카메라, 모션 센서 등 외부 장치를 연결하려는 임베디드 개발자
환경: Raspberry Pi 5 + Raspberry Pi OS (Bookworm / Debian 12 기반)
기본 조건: sudo 권한, 터미널 사용 가능


1. 문제/주제 요약

Raspberry Pi 5에서는 기존 모델보다 GPIO 하드웨어 구조가 조금 달라졌고,
raspi-config 대신 rpi-config 또는 raspi-config nonint 명령을 사용하는 환경이 생겼다.

I2C, SPI, UART 같은 인터페이스를 활성화하지 않으면 센서가 /dev/i2c-*, /dev/spi*, /dev/tty* 장치로 나타나지 않는다.
이 글에서는 Raspberry Pi 5에서 I2C/SPI/UART를 활성화하고 센서를 연결하는 기본 절차를 정리한다.


2. 원인/배경 설명

Raspberry Pi의 GPIO 핀은 다기능 핀(Multiplexed Pin)으로, 기본적으로는 GPIO 모드(입출력) 로 설정되어 있다.
이를 I2C, SPI, UART 등의 주변장치 기능(Alternate Function) 으로 변경해야 하며,
이 설정은 디바이스 트리 오버레이(Device Tree Overlay) 로 관리된다.

Pi 5에서는 GPIO 핀맵이 이전과 유사하지만, 내부 컨트롤러 주소와 드라이버 구조가 BCM2712 기반으로 변경되어 있다.
따라서 /boot/config.txt 수정 시 기존 모델과 동일한 설정이지만, 시스템 레이어는 다르다.


3. 설정 및 연결 단계

(1) 시스템 업데이트

sudo apt update && sudo apt full-upgrade -y
sudo reboot

(2) 인터페이스 설정 진입

Raspberry Pi OS Desktop이 아닌 Lite 환경이라면 다음 명령으로 설정 메뉴를 연다:

sudo raspi-config

메뉴 → Interface Options

  • I2C: Enable
  • SPI: Enable
  • Serial Port: Enable (→ Login Shell: No, Serial Port HW: Yes)

변경 후 재부팅한다:

sudo reboot

(3) 설정 확인

✅ I2C 확인

ls /dev/i2c*
# 예시 출력: /dev/i2c-1

I2C 툴 설치:

sudo apt install -y i2c-tools
sudo i2cdetect -y 1

센서가 연결되어 있다면 아래처럼 주소가 표시된다:

     0 1 2 3 4 5 6 7 8 9 a b c d e f
00:          -- -- -- -- -- -- -- --
10: -- -- -- 1e -- -- -- -- -- -- -- --

위 예시는 I2C 주소 0x1e (예: LSM303, HMC5883L 등) 감지된 상황


✅ SPI 확인

ls /dev/spi*
# 예시 출력: /dev/spidev0.0 /dev/spidev0.1

SPI 테스트용 패키지:

sudo apt install python3-spidev

테스트 코드 예시 (Python):

import spidev

spi = spidev.SpiDev()
spi.open(0, 0)  # Bus 0, Device 0
spi.max_speed_hz = 500000
resp = spi.xfer2([0xAA, 0xBB])
print(resp)
spi.close()

✅ UART 확인

기본 UART 장치는 /dev/serial0 또는 /dev/ttyAMA0 로 매핑된다.

ls -l /dev/serial*
# → /dev/serial0 -> /dev/ttyAMA0

테스트 (Loopback):

sudo apt install -y minicom
sudo minicom -b 115200 -o -D /dev/serial0

RX-TX를 직접 연결한 후 입력하면 동일한 문자가 에코되면 정상 동작이다.


(4) 하드웨어 연결 요약

인터페이스기본 핀참고예시 센서
I2CSDA(핀 3), SCL(핀 5)3.3V Pull-up 필요BME280, MPU6050
SPIMOSI(19), MISO(21), SCLK(23), CE0(24), CE1(26)3.3V 레벨MCP3008, MAX7219
UARTTX(핀 8), RX(핀 10)3.3V TTL 레벨GPS, Bluetooth 모듈

⚠️ 주의: Raspberry Pi 5는 5V 신호 비호환이므로 반드시 3.3V 장치만 연결할 것.


4. 추가 팁 / 자주 하는 실수

문제 상황원인해결 방법
/dev/i2c-1 없음오버레이 비활성화/boot/config.txt 확인 (dtparam=i2c_arm=on)
SPI 장치 감지 안 됨MOSI/MISO 교차 연결배선 방향 재확인 (센서 GND/3.3V 포함)
UART 동작 안 함Login shell이 UART 점유raspi-config → Interface Options → Serial → No (login shell)
I2C 주소 충돌여러 장치 동일 주소I2C 멀티플렉서(TCA9548A 등) 사용
I2C 통신 불안정Pull-up 저항 미비SDA/SCL에 4.7kΩ 저항 추가

5. 정리

  • Raspberry Pi 5에서도 I2C/SPI/UART 설정은 기존과 유사하지만, 커널 및 디바이스 트리 구조가 새로워졌으므로 최신 OS에서 설정해야 한다.
  • raspi-config 또는 /boot/config.txt 편집으로 활성화 후 /dev/* 장치를 반드시 확인.
  • 각 인터페이스는 3.3V TTL 기준으로 동작하며, 하드웨어 배선 오류가 가장 흔한 문제다.

댓글 남기기