센서 여러 개를 연결한다면 I2C 통신 vs SPI 무엇이 맞을까
온도, 습도, 조도, 가속도 센서를 한 보드에 붙이려는 순간 선택이 갈립니다. 배선을 줄이기 좋은 I2C 통신과 빠른 데이터 전송에 강한 SPI 중 무엇을 골라야 할까요? 답은 단순히 속도표만 보고 정할 수 없습니다. 센서 개수, 케이블 길이, 전압, 실시간성, 사용할 핀 수까지 함께 따져야 프로젝트 후반의 재설계를 피할 수 있습니다.
I2C 통신 vs SPI, 배선부터 성격이 다릅니다
두 가닥을 공유하는 I2C의 매력
I2C는 일반적으로 데이터선 SDA와 클록선 SCL을 여러 장치가 함께 사용합니다. 전원과 접지를 제외하면 통신선 두 가닥으로 다수의 센서를 연결할 수 있어, 핀이 부족한 아두이노나 소형 마이크로컨트롤러에서 특히 유리합니다. 각 장치는 주소로 구분하므로 센서가 늘어나도 기본 통신선 수는 증가하지 않습니다.
반면 SPI는 SCLK, MOSI, MISO를 공유하되 장치마다 CS 또는 SS라고 부르는 선택 신호가 필요합니다. 센서 한두 개일 때는 단순하지만 장치가 늘수록 선택 핀과 배선이 증가합니다. 대신 주소 충돌이 없고 송신과 수신을 동시에 처리할 수 있어 고속 ADC, 디스플레이, 외장 플래시처럼 데이터가 많은 부품에 잘 맞습니다.
- I2C: 적은 핀으로 여러 저속·중속 센서를 묶고 싶을 때 유리합니다.
- SPI: 핀을 더 사용하더라도 빠르고 예측 가능한 전송이 필요할 때 유리합니다.
- 공통점: 두 방식 모두 클록을 사용하는 동기식 직렬 통신이므로 신호 품질과 전압 호환성을 확인해야 합니다.
센서 개수가 많다는 이유만으로 I2C를 확정하지 마세요. 카메라, 고속 ADC, 컬러 디스플레이처럼 데이터량이 큰 장치가 하나라도 있다면 별도의 SPI 버스를 두는 편이 안정적입니다.
속도 숫자보다 실제 데이터량을 먼저 계산합니다
샘플 크기와 주기를 곱해 보는 방법
I2C는 흔히 100kHz 표준 모드와 400kHz 고속 모드를 사용하며, 부품에 따라 1MHz 이상을 지원하기도 합니다. SPI는 수 MHz에서 수십 MHz까지 설정할 수 있어 표면적인 속도 대결에서는 우세합니다. 하지만 센서가 1초에 몇 바이트만 보내는 환경이라면 높은 클록은 실질적인 이점이 거의 없습니다.
예를 들어 온습도 센서가 1초마다 6바이트, 조도 센서가 100ms마다 2바이트를 전달한다면 I2C 100kHz로도 여유가 큽니다. 반대로 6축 IMU에서 가속도와 자이로 데이터를 1kHz로 읽고, 동시에 화면까지 갱신한다면 주소 전송과 응답 확인에 쓰이는 오버헤드가 체감됩니다. 이런 상황에서는 IMU 또는 디스플레이를 SPI로 옮기는 편이 지연 편차를 줄이기 쉽습니다.
| 판단 항목 | I2C | SPI |
|---|---|---|
| 일반적인 강점 | 다중 센서와 적은 배선 | 고속 전송과 낮은 지연 |
| 장치 식별 | 주소 사용 | 장치별 CS 핀 사용 |
| 통신 방향 | 반이중 방식이 일반적 | 전이중 가능 |
| 권장 사례 | 환경 센서, RTC, EEPROM | 디스플레이, ADC, 플래시 |
- 데이터시트에서 한 번에 읽는 바이트 수를 확인합니다.
- 바이트 수에 초당 측정 횟수를 곱해 기본 데이터량을 구합니다.
- 주소, 명령, 확인 응답과 다른 장치의 사용 시간을 고려해 최소 두 배 이상의 여유를 둡니다.
센서 연결 실패는 주소와 전기 조건에서 갈립니다
I2C 주소 충돌과 풀업 저항
동일한 I2C 센서 두 개가 고정 주소를 사용하면 같은 버스에서 서로를 구분할 수 없습니다. 주소 변경 핀이 있는 부품은 설정을 달리하면 되지만, 선택 가능한 주소가 하나뿐이라면 I2C 멀티플렉서나 별도 버스가 필요합니다. 구매 전에 데이터시트의 기본 주소와 변경 가능 범위를 확인하는 습관이 비용을 크게 줄입니다.
I2C의 SDA와 SCL은 일반적으로 오픈드레인 구조이므로 풀업 저항이 필요합니다. 여러 센서 모듈에 풀업 저항이 각각 실장돼 있으면 병렬 합성 저항이 지나치게 낮아져 전류가 커질 수 있고, 반대로 저항값이 너무 크면 상승 시간이 길어져 고속 통신이 불안정해집니다. SPI는 같은 방식의 풀업 계산은 필요 없지만 빠른 에지 때문에 긴 점퍼선에서 링잉과 누화가 발생하기 쉽습니다.
- I2C 스캐너로 연결된 주소를 먼저 확인합니다.
- 3.3V 센서와 5V 보드를 연결할 때는 신호 전압과 모듈 내 레벨 시프터 유무를 점검합니다.
- 브레드보드에서는 배선을 짧게 유지하고 전원 근처에 바이패스 커패시터를 배치합니다.
- SPI 장치의 통신 모드인 CPOL과 CPHA가 라이브러리 설정과 일치하는지 확인합니다.
아두이노의 개념과 활용 범위를 먼저 확인하고 싶다면 지식백과의 아두이노 설명도 참고할 만합니다. 보드 이름이 같아도 모델마다 핀 전압과 하드웨어 버스 구성이 다르므로 실제 회로에서는 해당 보드의 공식 핀맵을 우선해야 합니다.
개발 편의성과 디버깅 비용도 대결의 일부입니다
라이브러리가 있어도 데이터시트는 필요합니다
I2C 센서 라이브러리는 주소를 지정하고 측정 함수를 호출하는 방식이 많아 입문자가 빠르게 결과를 확인하기 좋습니다. 문제는 라이브러리 두 개가 서로 다른 버스 속도를 가정하거나, 내부에서 통신 설정을 바꾸는 경우입니다. 여러 센서를 합친 뒤에만 오류가 난다면 각 라이브러리의 초기화 순서와 클록 변경 코드를 살펴봐야 합니다.
SPI는 장치마다 클록 속도와 비트 순서, 통신 모드가 달라 설정 항목이 더 많습니다. 대신 로직 애널라이저로 CS가 내려가는 시점과 클록, 데이터 흐름을 분리해 관찰하기 쉬워 원인이 명확하게 드러나는 편입니다. 임베디드 개발에서는 코드를 짧게 쓰는 것보다 재현 가능한 진단 경로를 확보하는 일이 더 중요할 때가 많습니다.
- I2C 선택 질문: 장치 주소가 겹치지 않는가, 전체 풀업 저항이 적절한가, 요구 속도에 여유가 있는가?
- SPI 선택 질문: CS 핀이 충분한가, 장치별 모드를 전환할 수 있는가, 배선을 짧게 구성할 수 있는가?
- 공통 진단: 전원 전압 측정, 공통 접지 확인, 낮은 클록에서 시험, 단일 장치부터 순차 연결을 진행합니다.
통신 오류가 보이면 코드를 반복 수정하기 전에 오실로스코프나 로직 애널라이저로 파형을 확인하세요. ACK 누락, 잘못된 SPI 모드, 느린 상승 시간은 파형에서 훨씬 빨리 드러납니다.
드라이버와 개발 도구의 역할이 낯설다면 디바이스 드라이버 통합개발환경의 개요를 함께 읽어 두면 하드웨어 제어 코드가 어떤 계층에서 동작하는지 이해하는 데 도움이 됩니다.
스마트 화분 한 대에서 두 통신을 끝까지 적용해 봅니다
환경 센서는 I2C, 화면은 SPI로 분리
토양 수분, 온습도, 조도를 측정하고 작은 컬러 화면에 그래프를 표시하는 스마트 화분을 만든다고 가정해 보겠습니다. 측정값은 몇 초 간격으로 갱신되므로 환경 센서 세 개는 I2C 버스에 묶습니다. 배선이 단순해지고 마이크로컨트롤러의 핀을 펌프 릴레이와 경고 LED에 남겨 둘 수 있습니다.
화면은 한 번 갱신할 때 전송해야 할 픽셀 데이터가 많으므로 SPI에 연결합니다. 화면 갱신 때문에 센서 측정이 밀리지 않도록 측정 시각을 먼저 기록하고, 화면은 변경된 영역만 갱신합니다. 만약 토양 센서 두 개의 I2C 주소가 같다면 주소 선택 핀을 다르게 설정하고, 불가능한 모델이면 멀티플렉서를 추가합니다.
- 보드 전원을 끈 상태에서 I2C 센서의 SDA, SCL, 전원, 접지를 연결합니다.
- I2C 스캐너를 실행해 각 주소가 한 번씩만 나타나는지 확인합니다.
- 센서를 하나씩 초기화하고 10분 동안 측정 누락과 비정상 값이 없는지 기록합니다.
- SPI 화면을 낮은 클록으로 연결한 뒤 CPOL, CPHA와 CS 동작을 확인합니다.
- 센서 측정과 화면 갱신을 합치고, 오류 횟수와 루프 실행 시간을 시리얼 모니터에 출력합니다.
실제 시험에서는 화분에 물을 준 직후 토양 수분 값이 변하고, 그 값이 화면 그래프에 반영되는 과정까지 추적합니다. 센서 읽기는 정상인데 화면을 갱신할 때만 값이 누락된다면 SPI 전송을 작은 단위로 나누거나 측정 주기를 분리합니다. 이렇게 구성하면 I2C는 다중 센서 연결의 효율을, SPI는 화면 전송의 속도를 담당하며 서로의 약점을 보완합니다. 마지막으로 케이블을 실제 화분 배치 길이로 늘린 상태에서 펌프를 여러 번 작동시켜도 주소 누락과 화면 깨짐이 없는지 확인하면 현장 조건까지 반영한 스마트 화분이 완성됩니다.

등록된 댓글이 없습니다.
