Інженерні посібники
I²C проти SPI для датчиків тиску — виберіть правильну шину або ненавидьте свою схему пізніше
Ви вибрали датчик тиску. Ви знаєте діапазон, точність, упаковку. Тоді ви побачите два варіанти на сторінці замовлення: I²C і Шпилька. Той самий датчик. Така ж ціна. Чотири різні літери. Ось як прийняти рішення — за допомогою реальних чисел, а не теорії підручників.
Двохвилинне оновлення
Пропустіть це, якщо ви підключали обидва автобуси раніше. Якщо ви цього не зробили, ось достатньо, щоб прочитати решту статті:
- Провід: 2 — SDA (дані) + SCL (годинник)
- Тип сигналу: Відкритий стік, висунутий резисторами
- Адресація: 7-бітна адреса на пристрій
- напрямок: Напівдуплекс
- швидкість: 100 кГц / 400 кГц / 1 МГц / 3,4 МГц
- КОНТРОЛЬ: За ініціативою майстра; раби відповідають лише тоді, коли до них звертаються
- Провід: 4 — MOSI, MISO, SCLK + 1× CS на пристрій
- Тип сигналу: Двотактний CMOS
- Адресація: Немає — лінія CS вибирає пристрій
- напрямок: Повний дуплекс
- швидкість: від 1 МГц до 50 МГц
- КОНТРОЛЬ: Майстер керує годинником; немає розтягування годинника
У цей момент ви можете подумати: "SPI is faster, so SPI wins, end of article." Не зовсім — швидкість майже ніколи не має значення для датчика тиску. Ось чому.
Аргумент швидкості, який не має значення
Типовий датчик тиску MEMS знімає показання кожного разу від 1 до 100 мілісекунд — домінує час перетворення АЦП, а не швидкість шини. Навіть при 1 мс на вибірку (1 кГц вибірка) ви просуваєте, можливо, 48 біт на зчитування. це так 48 кбіт/с.
I²C на 400 кГц передає ~320 Кбіт/с після накладних витрат. SPI на частоті 1 МГц передає 1 Мбіт/с. Будь-який є Від 7 до 20 разів швидше ніж швидкість передачі даних датчика. Якщо ви не знімаєте зразки на ультразвукових частотах, а це не так, оскільки тиск не змінюється так швидко, швидкість автобуса не має значення. Вузьким місцем є датчик, а не дроти.
Підсумок щодо швидкості: не має значення. Обмежуючим фактором є АЦП датчика. Вирішувати з інших підстав.
Кількість пінів: аргумент, який насправді має значення на малих дошках
| Сценарій | Використовуються контакти I²C | Використовуються контакти SPI |
|---|---|---|
| 1 датчик | 2 (SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 датчика | 2 (загальний автобус) | 5 (загальний автобус + 2× CS) |
| 4 датчика | 2 (загальний автобус) | 7 (загальний автобус + 4× CS) |
Якщо ваш мікроконтроллер STM32 із 80 портами вводу-виводу — кого це хвилює. Але на ESP32-C3 з 15 доступними інтерфейсами вводу-виводу (GPIO), які працюють з дисплеєм, BLE, двома кнопками та SD-картою — ці 2 додаткові контакти для SPI. I²C зберігає ваші піни незалежно від того, скільки датчиків спільно використовують шину.
Примітка: I²C коштує вам два резистора підтягування. SPI не коштує нічого. Два резистори 4,7 кОм 0402 коштують приблизно 0,002 доларів і займають 2 мм² площі плати — не нічого, але близько цього.
Підсумок щодо контактів: I²C виграє, коли GPIO напружено. З MCU з високим вмістом контактів перевага зникає — вирішуйте інші фактори.
Мультисенсорні конструкції: де I²C справді сяє
Три датчики тиску на одній друкованій платі — один барометричний еталонний, один рівень у баку, один випуск насоса. З I²C: призначте кожному датчику окрему адресу, підключіть SDA та SCL паралельно, готово. Два сліди. Три датчика. Нуль додаткових контактів MCU. З SPI: три окремі лінії CS поверх спільного MOSI/MISO/SCLK — всього шість проводів.
Увага: Пристроям I²C потрібні унікальні адреси. Більшість датчиків тиску пропонують точно дві адреси (шпилька, закріплена високо або низько). Це означає, що ви отримуєте два датчики на шині, перш ніж знадобиться мультиплексор I²C, як-от TCA9548A, що додає ~0,50 доларів США та кілька мм². SPI не має такого обмеження; просто додайте лінію CS на датчик.
Підсумок мультисенсорності: I²C виграє завдяки простоті підключення до двох ідентичних датчиків. Окрім цього, використовуйте SPI або мультиплексор I²C — жоден з них явно не кращий, це виклик макета.
Шумозахищеність: те, де SPI йде вперед
Датчики тиску з високою роздільною здатністю вимірюють зміни всього лише 0,03 гПа — приблизно вага комара, який приземлився на ваш стіл, у перекладі на електричний сигнал. За такої роздільної здатності шум має значення.
Шумові характеристики I²C
Лінії з відкритим стоком із підтягуючими резисторами створюють RC рамки, а не чисті переходи CMOS. Значення підтягування є компромісом: занадто сильне витрачає силу; занадто слабкий робить час наростання повільним і відкриває вікно для шумового зв’язку. У шумному середовищі — поруч із драйвером двигуна, комутаційним регулятором або чимось із ШІМ — I²C може виникати збій. Протокол не має вбудованого виявлення помилок, крім біта ACK (деякі датчики додають байт CRC до корисного навантаження, що допомагає).
Шумові характеристики SPI
Двухтактні драйвери CMOS активно керують як високими, так і низькими станами. Краї гострі. Лінія CS спрацьовує саме тоді, коли підлеглий пристрій має слухати — ігноруючи все, що є в шині, решту часу. За своєю суттю кращий SNR.
На практиці чиста компонування друкованої плати з короткими лініями, площиною заземлення та обхідними ковпачками зробить I²C задоволеним у більшості дизайнів. Але якщо ваш датчик знаходиться на кабелі за метр від мікроконтролера або в одному корпусі з чимось, що перемикає ампер струму, перешкодозахищеність SPI є справжньою перевагою.
Підсумок щодо шуму: SPI є безпечнішим вибором у електрично агресивних середовищах. На тій самій друкованій платі в декількох сантиметрах від мікроконтролера 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 не працює, ви перевіряєте чотири лінії логічним аналізатором і точно бачите, що відбувається. Коли I²C не працює, ви дивитеся на екран, повний NAK, і думаєте, чи це значення підтягування, адреса, синхронізація чи ємність шини. Логічний аналізатор за 8 доларів вирішує обидва, але I²C витратить більше вашого часу.
Підсумок прошивки: SPI менше дратує без використання металу. З HAL або бібліотекою це приблизно прання. I²C потребує більше часу для налагодження, якщо він зламався.
Енергоспоживання: обидва є помилками округлення
Шина I²C 400 кГц із підтягуваннями 4,7 кОм горить приблизно 00,7 мА під час активності. 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 на основі потужності. Різниця надто мала, щоб мати значення. Натомість виберіть контакти, шум або працездатність мікропрограми.
Потік рішень — чотири запитання, без матриці
1Скільки однакових датчиків на одній шині?
Жодної переваги в будь-якому випадку. Перейти до запитання 2.
Дві адреси, два дроти. Якщо датчики далеко один від одного — тоді SPI.
Якщо вам не подобається читати таблиці даних мультиплексора I²C.
2Як далеко датчик від MCU?
I²C добре працює на рівні плати з чітким макетом.
Або I²C з диференціальним буфером (PCA9615). I²C ніколи не розроблявся для кабелів.
Використовуйте 4–20 мА або RS-485. Ви на території промислових передавачів.
3Що таке EMI середовище?
Чисте розташування з байпасними кришками робить I²C задоволеним.
Двухтактні драйвери та стробування CS запобігатимуть фантомним показанням.
4Ви той, хто пише водія?
Абстракція робить різницю незначною. Використовуйте те, що використовує решта дошки.
Менше станів, без розтягування годинника, без конфліктів адрес.
Більшість бібліотек датчиків для любителів за замовчуванням використовують I²C. Спочатку перевірте бібліотеку.
The "Why Not Both" Card
Подвійний інтерфейсДеякі датчики постачаються разом як I²C, так і SPI на одному кристалі, який можна вибрати за допомогою шпильки або реєстру. Це справді корисно у двох сценаріях:
Гнучкість прототипування
Почніть з I²C на Arduino або коммутаційній платі, оскільки це легше підключати. Коли ви створюєте власну друковану плату, перейдіть на SPI, якщо це вигідно вашому макету. Той самий датчик, та сама логіка прошивки, просто інший виклик HAL.
Гнучкість виробництва SKU
Один дизайн друкованої плати, різні SKU. Один SKU використовує I²C, оскільки він ділиться шиною з датчиком температури/вологості. Іншому потрібен SPI для довшого трасування до плати віддаленого датчика. Ви нічого не змінюєте — змінюєте лінію специфікації та стрічку резистора.
Якщо ваш кандидат на датчик не підтримує обидві шини, це не порушує угоду. Але наявність вибору — це одна з тих речей, які ви не цінуєте, поки не покрутите дошку о 2 годині ночі.
Пліч-о-пліч Резюме
| Фактор | I²C | Шпилька | Переможець |
|---|---|---|---|
| Підрахунок проводів | 2 | 4 + 1 на датчик | I²C |
| швидкість | До 3,4 МГц | До 50 МГц | Зав’язка — датчик ADC є вузьким місцем |
| Мультисенсор (одного типу) | Макс. 2 без мультиплексора | Необмежено (один CS на датчик) | SPI більше 2 датчиків |
| Перешкодозахищеність | Відкритий дренаж, RC кромки | Двухтактний CMOS, гострі краї | Шпилька |
| Складність прошивки | Кінцевий автомат, ACK/NAK, тайм-аути | Затвердити CS, зрушити байти, готово | SPI (голий метал); Краватка (з HAL) |
| Складність налагодження | Важче — NAK полювання | Простіше — прості сигнали | Шпилька |
| Споживання електроенергії | ~0,7 мА (підтягування активні) | ~0 мА (без підтягувань) | Прив’язка — дельта — це піковат-години |
| Кабельні траси | Не рекомендується >200 мм | Витримує більш тривалі сліди | Шпилька |
| Зовнішні компоненти | 2 × підтягуючі резистори | Жодного | Зв’язка — 2 × резистори 0402 ≈ 0,002 $ |
TL; DR
Не знаєте, чи потрібен вам датчик абсолютного, манометричного чи диференціального тиску? Прочитайте посібник англійською мовою →
Не впевнені, який інтерфейс підходить для вашого дизайну? Повідомте нам свій MCU, обмеження плати та ваше середовище — ми підкажемо вам правильну частину, як правило, протягом години.
Звертайтеся →



