I²C супраць SPI для датчыкаў ціску — Кіраўніцтва па выбары інтэрфейсу

Інжынерныя даведнікі

I²C супраць SPI для датчыкаў ціску — выберыце правільную шыну або ненавідзьце сваю схему пазней

Вы выбралі датчык ціску. Вы ведаеце дыяпазон, дакладнасць, пакет. Тады вы ўбачыце два варыянты на старонцы замовы: I²C і SPI. Той самы датчык. Тая ж цана. Розныя чатыры літары. Вось як вырашаць - з рэальнымі лічбамі, а не з падручніцкай тэорыі.


Двуххвіліннае абнаўленне

Прапусціце гэта, калі вы падключылі абодва аўтобусы раней. Калі вы гэтага не зрабілі, дастаткова прасачыць за астатняй часткай артыкула:

I²C
  • правады: 2 — SDA (дадзеныя) + SCL (гадзіны)
  • Тып сігналу: Адкрыты сцёк, падцягнуты высокі з дапамогай рэзістараў
  • Адрасаванне: 7-бітны адрас на прыладу
  • Напрамак: Паўдуплекс
  • хуткасць: 100 кГц / 400 кГц / 1 МГц / 3,4 МГц
  • кантроль: Па ініцыятыве майстра; рабы адказваюць толькі тады, калі да іх звяртаюцца
SPI
  • правады: 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)

Калі ваш MCU з'яўляецца STM32 з 80 GPIO - каму гэта цікава. Але на 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 mux — ні тое, ні другое відавочна не лепш, гэта выклік макета.


Шумаабароненасць: той, дзе SPI цягне наперад

Датчыкі ціску з высокім раздзяленнем вымяраюць змены ад 0,03 гПа - гэта прыкладна вага камара, які прызямліўся на ваш стол, пераведзены ў электрычны сігнал. Пры такім дазволе шум мае значэнне.

Шумавыя характарыстыкі I²C

Лініі з адкрытым сцёкам з падцягваючымі рэзістарамі ствараюць канты RC, а не чыстыя пераходы CMOS. Значэнні падцягвання - гэта кампраміс: занадта моцнае марнаванне сілы; занадта слабы робіць час нарастання павольным і адкрывае акно для шумавой сувязі. У шумным асяроддзі - побач з драйверам рухавіка, рэгулятарам пераключэння або чым-небудзь з ШІМ - I²C можа даць збой. Пратакол не мае ўбудаванага выяўлення памылак, акрамя біта ACK (некаторыя датчыкі дадаюць байт CRC да карыснай нагрузкі, што дапамагае).

Шумавыя характарыстыкі SPI

Двухтактныя драйверы CMOS актыўна кіруюць як высокімі, так і нізкімі станамі. Краю вострыя. Лінія CS спрацоўвае менавіта тады, калі падпарадкаваны павінен слухаць - ігнаруючы ўсё ў аўтобусе ў астатні час. Па сваёй сутнасці лепшы SNR.

На практыцы чысты макет друкаванай платы з кароткімі дарожкамі, плоскасцю зазямлення і байпаснымі каўпачкамі дазволіць I²C задаволіць большасць канструкцый. Але калі ваш датчык знаходзіцца на кабелі ў метры ад MCU або ў адным корпусе з чым-небудзь, што перамыкае ампер току — перашкодаўстойлівасць SPI з'яўляецца сапраўднай перавагай.

Вынік шуму: SPI з'яўляецца больш бяспечным выбарам у электрычна варожых асяроддзях. На той самай друкаванай плаце ў некалькіх сантыметрах ад MCU 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.

Два → I²C, верагодна, выйграе

Два адрасы, два провада. Калі датчыкі не знаходзяцца далёка адзін ад аднаго - тады SPI.

Тры і больш → SPI

Калі вам не падабаецца чытаць тэхнічныя табліцы мультыплексара I²C.

2Як далёка знаходзіцца датчык ад MCU?

Тая ж друкаваная плата, <100 мм → Альбо

I²C добры на ўзроўні платы з чыстай кампаноўкай.

Кабель >200 мм → SPI

Ці I²C з дыферэнцыяльным буферам (PCA9615). I²C ніколі не быў распрацаваны для кабеляў.

>1 метр → ні

Выкарыстоўвайце 4–20 мА або RS-485. Вы на тэрыторыі прамысловага перадатчыка.

3Што такое асяроддзе EMI?

Ціхая друкаваная плата, без рухавікоў → альбо

Чысты макет з байпаснымі каўпачкамі робіць I²C шчаслівым.

BLDC, GSM, паніжальны канвэртар побач → SPI

Двухтактныя драйверы і стробаванне CS прадухіляць фантомныя паказанні.

4Вы пішаце драйвер?

HAL / бібліятэка існуе → Альбо

Абстракцыя робіць розніцу нязначнай. Выкарыстоўвайце тое, што выкарыстоўвае астатняя частка дошкі.

Напісанне з нуля → SPI

Менш станаў, без расцягвання гадзінніка, без канфліктаў адрасоў.

Партаванне бібліятэкі Arduino → I²C

Для большасці бібліятэк датчыкаў для аматараў па змаўчанні выкарыстоўваецца I²C. Спачатку праверце бібліятэку.


The "Why Not Both" Card

Двайны інтэрфейс

Некаторыя датчыкі пастаўляюцца з як I²C, так і SPI на адной плашцы, які можна выбраць з дапамогай шпількі або рэгістрацыйнага біта. Гэта сапраўды карысна ў двух выпадках:

Гнуткасць прататыпаў

Пачніце з I²C на Arduino або раздзяляльнай плаце, таму што гэта прасцей падключыць. Калі вы круціце сваю ўласную друкаваную плату, пераключыцеся на SPI, калі гэта выгадна вашай кампаноўцы. Той жа датчык, тая ж логіка прашыўкі, проста іншы выклік HAL.

Гнуткасць вытворчасці SKU

Адзін дызайн друкаванай платы, розныя SKU. Адзін SKU выкарыстоўвае I²C, таму што ён падзяляе шыну з датчыкам тэмпературы/вільготнасці. Іншаму патрэбны SPI для працяглай трасіроўкі да аддаленай платы датчыка. Вы нічога не пераробіце — зменіце лінію спецыфікацыі і папружку рэзістара.

Калі кандыдат у датчык не падтрымлівае абедзве шыны, гэта не парушае здзелку. Але наяўнасць выбару - гэта адна з тых рэчаў, якія вы не ацэніце, пакуль зноў не пакруціце дошку ў 2 гадзіны ночы.


Паралельнае рэзюмэ

ФактарI²CSPIПераможца
Разлік правадоў24 + 1 на датчыкI²C
хуткасцьДа 3,4 МГцДа 50 МГцГалстук - датчык ADC з'яўляецца вузкім месцам
Мультыдатчык (таго ж тыпу)Макс 2 без мультыплікатараНеабмежавана (адзін CS на датчык)SPI больш за 2 датчыка
ПерашкодаўстойлівасцьКанты з адкрытым сцёкам, RCДвухтактная CMOS, вострыя краюSPI
Складанасць прашыўкіКанчатковы аўтамат, ACK/NAK, тайм-аўтыПацвердзіць CS, зрушыць байты, гатоваSPI (голы метал); Гальштук (з HAL)
Цяжкасць адладкіЦяжэй — NAK паляваннеПрасцей — прамыя сігналыSPI
Энергаспажыванне~0,7 мА (падцягванні актыўныя)~0 мА (без падцягванняў)Прывязка — дэльта складае пікават-гадзіны
Кабельныя трасыНе рэкамендуецца >200 ммПераносіць больш працяглыя слядыSPI
Знешнія кампаненты2 × падцягваючыя рэзістарыНямаСувязь — 2 × рэзістары 0402 ≈ $0,002

TL; DR

Колькасць шпілек I²C выкарыстоўвае менш правадоў. Вырашальнае, калі GPIO жорсткія.
хуткасць Не мае значэння. АЦП датчыка заўсёды з'яўляецца вузкім месцам.
Мультысенсар I²C больш чысты для ≤2 аднолькавых датчыкаў. SPI маштабуецца лепш, чым гэта.
Шум SPI выйграе. Вырашальна побач з рухавікамі, камутатарамі або модулямі GSM.
Прашыўка SPI - гэта прасцейшы голы метал. З HAL гэта мыццё. I²C патрабуе больш часу для адладкі, калі ён зламаўся.
Магутнасць Don't choose based on power. The difference is picowatt-hours.
Dual-interface Best of both worlds — one design, swap at will. Use it as a feature, not an afterthought.

Not sure which interface fits your design? Tell us your MCU, your board constraints, and your environment — we'll point you at the right part, usually within an hour.

Звяртайцеся →
Пракруціць да пачатку

паведамленне