엔지니어링 가이드
압력 센서용 I²C와 SPI 비교 — 올바른 버스를 선택하거나 나중에 레이아웃을 싫어하세요
압력 센서를 선택하셨습니다. 당신은 범위, 정확성, 패키지를 알고 있습니다. 그러면 주문 페이지에 두 가지 변형이 표시됩니다. i²c 그리고 SPI. 동일한 센서. 같은 가격. 네 글자가 다릅니다. 교과서 이론이 아닌 실제 숫자를 사용하여 결정하는 방법은 다음과 같습니다.
2분 복습
이전에 두 버스를 모두 연결한 경우 이 단계를 건너뛰십시오. 그렇지 않은 경우 다음 내용으로 기사의 나머지 부분을 따라갈 수 있습니다.
- 전선: 2 — SDA(데이터) + SCL(클럭)
- 신호 유형: 오픈 드레인, 저항으로 하이 풀링
- 주소: 장치당 7비트 주소
- 방향: 반이중
- 속도: 100kHz/400kHz/1MHz/3.4MHz
- 제어: 마스터 시작; 슬레이브는 주소가 지정될 때만 응답합니다.
- 전선: 4 — 장치당 MOSI, MISO, SCLK + 1× CS
- 신호 유형: 푸시풀 CMOS
- 주소: 없음 — CS 라인이 장치를 선택합니다.
- 방향: 전이중
- 속도: 1MHz ~ 50MHz
- 제어: 마스터는 시계를 제어합니다. 시계 스트레칭 없음
이 시점에서 다음과 같이 생각할 수 있습니다. "SPI is faster, so SPI wins, end of article." 그렇지 않습니다. 압력 센서에서는 속도가 거의 중요하지 않습니다. 이유는 다음과 같습니다.
중요하지 않은 속도 논쟁
일반적인 MEMS 압력 센서는 매 순간 판독합니다. 1~100밀리초 — 버스 속도가 아니라 ADC 변환 시간이 지배적입니다. 샘플당 1ms(1kHz 샘플링)에서도 판독당 48비트를 푸시하게 됩니다. 그건 48kbps.
400kHz의 I²C는 오버헤드 이후 ~320kbps를 전송합니다. 1MHz의 SPI는 1Mbps를 전송합니다. 어느 쪽이든 7배 ~ 20배 더 빠름 센서의 데이터 속도보다 압력이 그렇게 빨리 변하지 않기 때문에 초음파 주파수로 샘플링하지 않는 한 버스 속도는 중요하지 않습니다. 병목 현상은 센서이지 전선이 아닙니다.
속도에 대한 결론: 중요하지 않습니다. 센서의 ADC가 제한 요소입니다. 다른 근거로 결정하십시오.
핀 수: 소형 보드에서 실제로 중요한 논거
| 대본 | I²C 핀 사용 | SPI 핀 사용 |
|---|---|---|
| 센서 1개 | 2(SDA+SCL) | 4(MOSI + MISO + SCLK + CS) |
| 센서 2개 | 2(공용버스) | 5(공유 버스 + 2× CS) |
| 센서 4개 | 2(공용버스) | 7(공유 버스 + 4× CS) |
MCU가 80개의 GPIO를 갖춘 STM32라면 누가 신경쓰겠습니까? 그러나 디스플레이를 실행하는 15개의 사용 가능한 GPIO, BLE, 2개의 버튼 및 SD 카드가 있는 ESP32-C3에서는 SPI 스팅을 위한 2개의 추가 핀이 있습니다. I²C는 버스를 공유하는 센서 수에 관계없이 핀을 절약합니다.
참고: I²C에는 비용이 발생합니다. 풀업 저항 2개. SPI에는 비용이 들지 않습니다. 4.7kΩ 0402 저항기 2개의 가격은 총 $0.002 정도이며 보드 공간을 2mm² 차지합니다. 아무것도 아니지만 거의 비슷합니다.
핀에 대한 결론: GPIO가 부족할 때 I²C가 승리합니다. 핀이 풍부한 MCU를 사용하면 이점이 사라집니다. 다른 요소를 결정하십시오.
다중 센서 설계: I²C가 실제로 빛나는 곳
동일한 PCB에 3개의 압력 센서(기압 기준 1개, 탱크 레벨 1개, 펌프 배출구 1개) I²C 사용: 각 센서에 서로 다른 주소를 할당하고 SDA와 SCL을 병렬로 연결합니다. 두 개의 흔적. 세 개의 센서. 추가 MCU 핀이 없습니다. SPI 사용: 공유 MOSI/MISO/SCLK 위에 별도의 CS 라인 3개(총 6개 와이어)
조심하세요: I²C 장치에는 고유한 주소가 필요합니다. 대부분의 압력 센서는 두 개의 주소 (높거나 낮게 묶인 핀). 이는 TCA9548A와 같은 I²C 멀티플렉서가 필요하기 전에 버스에 2개의 센서를 확보한다는 의미입니다. 이 경우 ~$0.50와 몇 mm²가 추가됩니다. SPI에는 그러한 제한이 없습니다. 센서당 CS 라인을 추가하기만 하면 됩니다.
다중 센서의 결론: I²C는 최대 2개의 동일한 센서의 배선 단순성 측면에서 승리합니다. 그 외에도 SPI 또는 I²C mux를 사용하십시오. 둘 다 더 나은 것은 아니며 레이아웃 호출입니다.
잡음 내성: SPI가 앞서가는 부분
고해상도 압력 센서는 0.03hPa 정도의 작은 변화를 측정합니다. 이는 대략 책상 위에 앉은 모기의 무게를 전기 신호로 변환하는 것입니다. 그 해상도에서는 소음이 중요합니다.
I²C 잡음 특성
풀업 저항이 있는 오픈 드레인 라인은 깨끗한 CMOS 전환이 아닌 RC 램프 에지를 생성합니다. 풀업 값은 절충안입니다. 너무 강하면 전력이 낭비됩니다. 너무 약하면 상승 시간이 느려지고 노이즈 커플링의 창이 열립니다. 모터 드라이버, 스위칭 레귤레이터 또는 PWM이 있는 모든 것 옆에 있는 시끄러운 환경에서 I²C에 결함이 발생할 수 있습니다. 이 프로토콜에는 ACK 비트 이외의 오류 감지 기능이 내장되어 있지 않습니다(일부 센서는 페이로드에 CRC 바이트를 추가하는데 도움이 됩니다).
SPI 잡음 특성
푸시풀 CMOS 드라이버는 높은 상태와 낮은 상태를 모두 능동적으로 구동합니다. 가장자리가 날카롭습니다. CS 라인은 슬레이브가 들어야 할 정확한 시간에 게이트를 실행합니다. 나머지 시간에는 버스의 모든 내용을 무시합니다. 본질적으로 더 나은 SNR.
실제로 짧은 트레이스, 접지면 및 바이패스 캡을 갖춘 깔끔한 PCB 레이아웃은 대부분의 설계에서 I²C를 만족스럽게 유지합니다. 그러나 센서가 MCU에서 1미터 떨어진 케이블에 있거나 전류 전류를 전환하는 모든 것과 인클로저를 공유하는 경우 SPI의 잡음 내성은 진정한 이점입니다.
소음에 대한 결론: SPI는 전기적으로 적대적인 환경에서 더 안전한 선택입니다. MCU에서 몇 센티미터 떨어진 동일한 PCB에서는 I²C가 괜찮습니다.
펌웨어 복잡성: 아무도 말하지 않는 승자 결정권
I²C 펌웨어
A state machine. Start condition → send address + R/W bit → wait for ACK → read/write register pointer → read/write data → stop condition. Every step has a timeout, a retry path, and a "what if the sensor holds SDA low because it's still converting" case. Most MCU vendors provide a HAL. Most of those HALs have edge-case bugs you'll discover at 11 PM.
SPI 펌웨어
Assert CS → shift bytes → de-assert CS. That's it. The sensor doesn't get to say "I'm not ready" by clock-stretching or NAKing. The master controls the clock; the slave responds or stays silent.
디버깅 고통: SPI가 작동하지 않으면 로직 분석기로 4개의 라인을 조사하여 정확히 무슨 일이 일어나고 있는지 확인합니다. I²C가 작동하지 않으면 NAK로 가득 찬 화면을 바라보며 그것이 풀업 값인지, 주소인지, 타이밍인지, 버스 커패시턴스인지 궁금합니다. 8달러짜리 로직 분석기는 두 가지 모두를 해결하지만 I²C는 시간을 더 많이 소모합니다.
펌웨어에 대한 결론: SPI는 덜 성가신 베어메탈입니다. HAL이나 라이브러리를 사용하면 거의 세척이 가능합니다. I²C가 중단되면 디버깅하는 데 시간이 더 오래 걸립니다.
전력 소비: 둘 다 반올림 오류입니다.
4.7kΩ 풀업을 갖춘 400kHz I²C 버스는 약 00.7mA 활동하는 동안. SPI는 버스 수준에서 본질적으로 아무것도 소모하지 않습니다. 즉, 이러한 속도(마이크로암페어)에서는 순전히 CMOS 스위칭 전류만 소모됩니다.
Context: the pressure sensor element and ADC draw ~5 µA at 1 Hz sampling and 0.3 µA in standby. Whether the bus burns 0.5 mA or 0.05 mA for the 2 ms it takes to read a sample — the energy difference is picowatt-hours. Your BLE radio burns more power sending one "hello" packet than the bus choice will save across the sensor's entire operating lifetime.
전력에 대한 결론: 전력을 기준으로 I²C 또는 SPI를 선택하지 마십시오. 그 차이는 너무 작아서 중요하지 않습니다. 대신 핀, 소음 또는 펌웨어 온전성을 결정하십시오.
결정 흐름 - 4가지 질문, 매트릭스 없음
1하나의 버스에 동일한 센서가 몇 개 있습니까?
어느 쪽이든 이점이 없습니다. 질문 2로 이동하세요.
두 개의 주소, 두 개의 전선. 센서가 멀리 떨어져 있지 않으면 SPI입니다.
I²C 멀티플렉서 데이터시트를 읽는 것을 즐기지 않는 한.
2MCU에서 센서까지의 거리는 얼마나 되나요?
I²C는 깔끔한 레이아웃으로 보드 수준에서 적합합니다.
또는 차동 버퍼가 있는 I²C(PCA9615). I²C는 케이블용으로 설계된 적이 없습니다.
4~20mA 또는 RS-485를 사용합니다. 당신은 산업용 송신기 영역에 있습니다.
3EMI 환경은 무엇입니까?
바이패스 캡이 있는 깔끔한 레이아웃은 I²C를 만족시킵니다.
푸시풀 드라이버와 CS 게이팅은 팬텀 판독을 방지합니다.
4당신이 드라이버를 쓰는 사람인가요?
추상화는 차이를 무시할 수 있게 만듭니다. 보드의 나머지 부분이 사용하는 것을 사용하십시오.
상태 수가 적고, 시계 확장이 없으며, 주소 충돌이 없습니다.
대부분의 취미 센서 라이브러리는 기본적으로 I²C로 설정되어 있습니다. 먼저 도서관을 확인해 보세요.
The "Why Not Both" Card
듀얼 인터페이스일부 센서는 다음과 함께 배송됩니다. 동일한 다이에 I²C와 SPI가 모두 있음, 핀 스트랩이나 레지스터 비트를 통해 선택 가능. 이는 다음 두 가지 시나리오에서 정말 유용합니다.
프로토타입 제작 유연성
배선이 더 쉽기 때문에 Arduino 또는 브레이크아웃 보드에서 I²C로 시작하세요. 자신의 PCB를 회전시킬 때 레이아웃이 이점을 얻는다면 SPI로 전환하십시오. 동일한 센서, 동일한 펌웨어 로직, 단지 다른 HAL 호출일 뿐입니다.
생산 SKU 유연성
하나의 PCB 디자인, 다른 SKU. 하나의 SKU는 온도/습도 센서와 버스를 공유하기 때문에 I²C를 사용합니다. 또 다른 하나는 원격 센서 보드에 대한 더 긴 추적 실행을 위해 SPI가 필요합니다. 아무것도 재설계하지 않고 BOM 라인과 저항기 스트랩을 변경합니다.
센서 후보가 두 버스를 모두 지원하지 않는 경우 이는 거래 중단자가 아닙니다. 그러나 옵션이 있다는 것은 새벽 2시에 보드를 다시 돌릴 때까지 감사하지 못하는 것 중 하나입니다.
병렬 요약
| 요인 | i²c | SPI | 우승자 |
|---|---|---|---|
| 와이어 수 | 2 | 센서당 4 + 1 | i²c |
| 속도 | 최대 3.4MHz | 최대 50MHz | 동점 - 센서 ADC가 병목 현상입니다. |
| 다중 센서(동일 유형) | 멀티플렉서 없이 최대 2개 | 무제한(센서당 하나의 CS) | 센서 2개 이상의 SPI |
| 소음 내성 | 오픈 드레인, RC 엣지 | 푸시풀 CMOS, 날카로운 모서리 | SPI |
| 펌웨어 복잡성 | 상태 머신, ACK/NAK, 시간 초과 | CS 확인, 바이트 이동, 완료 | SPI(베어메탈); 동점(HAL 포함) |
| 디버그 난이도 | 더 어려움 - NAK 사냥 | 더 쉬움 - 간단한 신호 | SPI |
| 전력 소비 | ~0.7mA(풀업 활성) | ~0mA(풀업 없음) | 동점 — 델타는 피코와트시입니다. |
| 케이블이 달린다 | 권장되지 않음 >200mm | 더 긴 추적을 허용합니다. | SPI |
| 외부 구성 요소 | 2× 풀업 저항기 | 없음 | 타이 — 2× 0402 저항기 ≒ $0.002 |
TL;DR
처음에 절대압, 게이지 또는 차압 센서가 필요한지 혼란스러우신가요? 일반 영어 가이드 읽기 →
귀하의 디자인에 어떤 인터페이스가 적합한지 모르시나요? 귀하의 MCU, 보드 제약 사항, 환경을 알려주십시오. 일반적으로 한 시간 이내에 올바른 부분을 알려드리겠습니다.
연락하기 →



