라즈베리파이, 아두이노

라즈베리파이 I2C 활성화와 /dev/i2c 확인 방법

포도알77 2026. 7. 15. 16:09

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.

라즈베리파이 I2C 활성화와 /dev/i2c 확인 방법

라즈베리파이에서 센서나 RTC 같은 저속 주변기기를 붙일 때 가장 먼저 확인할 항목이 I2C다. 2026년 7월 15일 확인 기준 Raspberry Pi Documentation은 I2C를 켜면 라즈베리파이의 I2C 인터페이스를 활성화하고, 부팅 시 I2C 커널 모듈을 로드한다고 설명한다.

실무에서 헷갈리는 지점은 세 가지다. Bookworm에서 어디에서 I2C를 켜야 하는지, 활성화 후 무엇이 실제로 달라지는지, 그리고 장치 파일이 어느 이름으로 생기는지다. 이 글은 Raspberry Pi 공식 문서와 Linux 커널 문서를 기준으로 확인 절차만 정리한다.

I2C를 먼저 켜야 하는 이유

I2C는 센서, RTC, 소형 확장 보드처럼 비교적 저속인 주변기기와 통신할 때 많이 쓰는 하드웨어 프로토콜이다. Raspberry Pi Documentation도 I2C를 이런 용도의 저속 주변기기 통신 인터페이스로 설명한다.

중요한 점은 배선을 연결했다고 바로 사용자 공간에서 접근 가능한 상태가 되지는 않는다는 점이다. 공식 문서 기준으로는 먼저 I2C 인터페이스 자체가 켜져 있어야 하고, 커널 쪽에서도 관련 모듈이 준비돼 있어야 한다.

Bookworm에서 가장 무난한 활성화 방법은 무엇일까?

Raspberry Pi Documentation이 안내하는 공식 경로는 두 가지다. 데스크톱 환경에서는 Preferences > Control CentreInterfaces 탭에서 I2C 토글을 켜면 된다. 터미널에서는 sudo raspi-config를 실행한 뒤 3 Interface Options > I5 I2C로 들어가서 ARM I2C 인터페이스 활성화를 선택하면 된다.

방법 경로 언제 무난한가
데스크톱 Preferences > Control Centre > Interfaces > I2C 모니터와 GUI가 연결된 개발용 장비
raspi-config sudo raspi-config3 Interface OptionsI5 I2C SSH 접속 장비나 GUI 없이 설정할 때

활성화하면 무엇이 바뀔까?

공식 문서는 I2C 활성화가 정확히 두 가지를 수행한다고 설명한다. 첫째, 라즈베리파이의 I2C 인터페이스를 켠다. 둘째, 연결된 장치가 통신할 수 있도록 부팅 시 I2C 커널 모듈을 로드한다.

따라서 설정 직후 확인 기준도 단순하다. 사용자 공간에서 I2C 장치 파일이 보이는지, 그리고 해당 어댑터 목록이 노출되는지를 보면 된다. 반대로 하드웨어 배선만 맞고 이 단계가 빠져 있으면 드라이버나 사용자 공간 도구에서 장치를 찾지 못할 수 있다.

/dev/i2c-*는 어떻게 확인할까?

Linux 커널 문서는 I2C 장치를 사용자 공간에서 /dev 인터페이스로 접근할 수 있다고 설명한다. 각 I2C 어댑터에는 번호가 붙고, 장치 파일 이름은 i2c-%d 형식이다. 즉 실제 장치 파일은 /dev/i2c-0, /dev/i2c-1처럼 나타난다.

여기서 중요한 점은 어댑터 번호를 고정값으로 가정하면 안 된다는 점이다. Linux 커널 문서는 어댑터 번호가 어느 정도 동적으로 할당되므로, /sys/class/i2c-dev/를 보거나 i2cdetect -l로 현재 시스템의 어댑터 목록을 확인하라고 안내한다.

ls /dev/i2c-*
i2cdetect -l

첫 번째 명령은 장치 파일이 생겼는지 빠르게 확인할 때 유용하고, 두 번째 명령은 각 번호가 어떤 어댑터를 가리키는지 사람이 읽기 좋은 형태로 볼 때 적합하다. 커널 문서는 i2cdetecti2c-tools 패키지의 일부라고 설명한다.

 

 

장치 파일이 보이면 바로 통신해도 될까?

Linux 커널 문서 기준으로는 /dev/i2c-N을 여는 것만으로 충분하지 않다. 먼저 어떤 장치 주소와 통신할지 ioctl(..., I2C_SLAVE, addr)로 지정해야 한다. 그 다음에 SMBus 함수나 일반 read(), write() 호출로 통신을 진행한다.

또한 커널 문서는 모든 I2C 동작이 단순 read(), write()만으로 해결되지는 않는다고 분명히 적고 있다. 읽기와 쓰기를 한 트랜잭션으로 묶는 combined transaction은 이 방식으로는 지원되지 않기 때문에, 사용자 공간 프로그램에서는 보통 SMBus 헬퍼나 적절한 라이브러리를 사용하는 편이 안전하다.

실무에서 무난한 확인 순서

  1. Bookworm 장비에서 먼저 데스크톱 또는 raspi-config로 I2C를 활성화한다.
  2. ls /dev/i2c-*로 I2C 장치 파일이 생성됐는지 본다.
  3. i2cdetect -l 또는 /sys/class/i2c-dev/로 실제 어댑터 번호를 확인한다.
  4. 코드에서는 어댑터 번호를 하드코딩하기보다 현재 시스템 기준으로 다시 확인한다.
  5. 사용자 공간 통신 전에는 대상 주소를 I2C_SLAVE로 먼저 지정한다.

FAQ

Q. 라즈베리파이에서 I2C를 켜면 센서가 바로 동작할까?

공식 문서 기준으로 I2C 활성화는 인터페이스를 켜고 커널 모듈을 부팅 시 로드하는 단계다. 실제 통신 가능 여부는 배선, 전원, 장치 주소, 사용자 공간 접근 방식까지 함께 확인해야 한다.

Q. 항상 /dev/i2c-1만 보면 될까?

Linux 커널 문서는 어댑터 번호가 어느 정도 동적으로 할당될 수 있으므로 가정하지 말라고 안내한다. 따라서 현재 시스템에서는 i2cdetect -l 또는 /sys/class/i2c-dev/로 다시 확인하는 편이 안전하다.

Q. 장치 파일만 열면 원하는 주소와 바로 통신하나?

아니다. 커널 문서는 먼저 I2C_SLAVE ioctl로 대상 주소를 지정해야 한다고 설명한다. 주소 지정 없이 장치 파일만 열어 두는 것으로는 충분하지 않다.

정리

라즈베리파이 Bookworm에서 I2C를 확인할 때 핵심은 세 가지다. 먼저 공식 경로인 Control Centre 또는 raspi-config로 I2C를 켠다. 그 다음 /dev/i2c-* 장치 파일과 i2cdetect -l 결과로 사용자 공간에서 접근 가능한 상태인지 확인한다. 마지막으로 코드에서는 어댑터 번호와 대상 주소를 고정값으로 가정하지 않는 편이 안전하다.

참고 자료

반응형
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사