
라즈베리파이에서 SPI를 어떻게 켤까? Bookworm 기준 활성화와 spidev 확인 방법
라즈베리파이에서 SPI 장치를 붙이기 시작할 때 가장 먼저 확인할 것은 두 가지다. Raspberry Pi OS Bookworm 이후에는 부트 설정 파일 경로가 주로 /boot/firmware/config.txt이고, SPI0는 기본적으로 비활성화되어 있어 직접 켜야 한다는 점이다.
공식 문서 기준으로 SPI를 켜는 방법은 raspi-config를 쓰거나, config.txt에 dtparam=spi=on을 설정하는 방식이다. 설정 후 재부팅하면 커널이 SPI 인터페이스를 로드하고, 필요한 경우 /dev/spidev0.0, /dev/spidev0.1 같은 장치 노드를 확인할 수 있다.
왜 먼저 경로부터 확인해야 할까?
라즈베리파이 공식 문서는 Bookworm 이전에는 부트 파티션을 주로 /boot/에서 다뤘지만, Bookworm 이후에는 /boot/firmware/를 기준으로 설명한다. 예전 글을 보고 /boot/config.txt만 찾다가 설정 위치를 잘못 잡는 경우가 가장 흔한 실수다.
따라서 지금 Raspberry Pi OS를 새로 설치했거나 Bookworm 계열을 쓰고 있다면, SPI 관련 설정은 먼저 /boot/firmware/config.txt 기준으로 보는 편이 안전하다.
SPI를 켜면 실제로 무엇이 바뀔까?
라즈베리파이 문서에 따르면 SPI 활성화는 두 가지 의미를 갖는다. SPI 인터페이스를 켜고, 부팅 시 SPI 커널 모듈이 자동으로 로드되게 한다는 뜻이다. 즉 단순히 설정 파일 한 줄을 추가하는 문제가 아니라, 운영체제가 해당 버스를 사용할 준비를 하게 만드는 과정에 가깝다.
공식 문서는 SPI0가 기본적으로 비활성화되어 있으며, 활성화하려면 raspi-config를 사용하거나 /boot/firmware/config.txt에 dtparam=spi=on이 주석 처리되지 않은 상태여야 한다고 설명한다.
가장 단순한 활성화 방법
터미널에서 대화형 설정을 쓸 수 있다면 sudo raspi-config가 가장 단순하다. 비대화형 문서 기준으로는 다음 명령도 제공된다.
sudo raspi-config nonint do_spi 0
라즈베리파이 설정 도구 문서에서 do_spi 0은 SPI 활성화, do_spi 1은 비활성화로 정의돼 있다. 자동화 스크립트나 원격 초기 설정에서는 이 방식이 더 다루기 쉽다.
config.txt로 직접 설정할 때 볼 것
설정을 파일로 관리하고 싶다면 /boot/firmware/config.txt에 다음 줄을 둔다.
dtparam=spi=on
공식 하드웨어 문서는 이 설정이 기본 SPI0를 켜는 기준이라고 설명한다. 기본적으로 SPI0는 두 개의 칩 셀렉트 라인을 사용하며, 필요하면 dtoverlay=spi0-1cs처럼 칩 셀렉트 수를 조정하는 오버레이도 사용할 수 있다.
여기서 중요한 점은 재부팅 전까지 설정이 실제 동작에 반영되지 않는다는 것이다. 설정을 바꾼 뒤 장치 노드가 바로 보이지 않아도 먼저 재부팅 여부를 확인하는 편이 맞다.
활성화 뒤 무엇을 확인하면 될까?
커널의 SPI userspace API 문서는 SPI 장치가 spidev 드라이버에 바인딩되면 /dev/spidevB.C 형식의 문자 장치가 만들어진다고 설명한다. 예를 들어 버스 0, 칩 셀렉트 0이면 일반적으로 /dev/spidev0.0 형태다.
다만 SPI를 켰다고 해서 모든 주변기기가 자동으로 바로 통신 가능한 상태가 되는 것은 아니다. 문서상으로도 spidev는 바인딩된 SPI 디바이스가 있어야 의미가 있다. 즉 버스 활성화와 실제 디바이스 바인딩은 구분해서 봐야 한다.
Python이나 C에서 바로 읽고 쓸 수 있나?
가능하다. Linux 커널 문서 기준으로 spidev는 기본적인 read(), write()와 함께 ioctl() 기반의 전송 설정을 제공한다. 다만 이 인터페이스는 어디까지나 사용자 공간용 저수준 API이므로, 인터럽트 처리나 커널 내부 서브시스템 연동이 필요한 드라이버를 완전히 대체하는 용도는 아니다.
간단한 센서 실험, 마이크로컨트롤러와의 프로토콜 테스트, 프로토타이핑처럼 사용자 공간에서 빠르게 검증하려는 목적에는 잘 맞는다.
언제 SPI1 이상 오버레이까지 봐야 할까?
기본 장치가 SPI0만으로 충분하지 않거나 칩 셀렉트 구성이 더 필요할 때다. 라즈베리파이 문서는 SPI1에 대해 1개, 2개, 3개 칩 셀렉트 오버레이를 제공한다고 설명하고, 비슷한 오버레이가 SPI2부터 SPI6까지도 있다고 적고 있다.
반대로 대부분의 입문형 연결에서는 SPI0부터 확인하는 것이 맞다. 센서 하나나 디스플레이 하나를 붙이는 수준이라면 먼저 SPI0를 정상 활성화하고 /dev/spidev0.0 또는 /dev/spidev0.1가 기대대로 보이는지 확인하는 순서가 실용적이다.
FAQ
Bookworm인데 예전 글처럼 /boot/config.txt를 수정해도 되나?
공식 문서는 Bookworm 이전과 이후의 기본 부트 파티션 경로 차이를 분명히 구분한다. 최신 Raspberry Pi OS Bookworm 기준으로는 /boot/firmware/config.txt를 우선 확인하는 편이 안전하다.
SPI를 켰는데 /dev/spidev0.0가 바로 안 보일 수 있나?
그럴 수 있다. SPI 설정은 재부팅 후 반영되고, spidev 장치 노드는 해당 SPI 디바이스가 드라이버에 바인딩될 때 생성된다. 따라서 재부팅 누락과 디바이스 바인딩 상태를 함께 봐야 한다.
raspi-config와 config.txt 중 무엇이 더 낫나?
한 번만 설정할 때는 raspi-config가 단순하고, 여러 대를 같은 방식으로 맞출 때는 config.txt 또는 raspi-config nonint가 더 관리하기 쉽다. 둘 다 공식 문서에 있는 경로다.
정리
라즈베리파이에서 SPI 설정을 헷갈리지 않으려면 기준은 간단하다. Bookworm이면 /boot/firmware/config.txt를 본다, SPI0는 기본적으로 꺼져 있으니 dtparam=spi=on 또는 raspi-config로 켠다, 재부팅 후 /dev/spidev* 존재 여부를 확인한다는 세 단계면 된다.
이 순서만 지켜도 예전 문서 경로와 최신 문서 경로를 섞어서 생기는 시행착오는 많이 줄일 수 있다.
참고 자료
'라즈베리파이, 아두이노' 카테고리의 다른 글
| 라즈베리파이 UART 활성화와 /dev/serial0 확인 방법 (0) | 2026.07.20 |
|---|---|
| 라즈베리파이 I2C 활성화와 /dev/i2c 확인 방법 (1) | 2026.07.15 |
| 라즈베리파이에서 one-wire 온도센서(DS18B20) 읽는 제일 쉬운 방법 (0) | 2021.11.27 |
| 라즈베리와 아두이노 USB로 통신하기 (3) | 2021.11.27 |
| [간단한 아두이노 코딩] 21. MAX7219 도트 매트릭스 SPI 사용하기 (0) | 2020.12.09 |





