Қысым сенсорларына арналған 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 әр құрылғыға
  • Сигнал түрі: Push-pull CMOS
  • Адрес: None — CS желісі құрылғыны таңдайды
  • Бағыты: Толық дуплексті
  • Жылдамдық: 1 МГц - 50 МГц
  • Бақылау: Мастер сағатты басқарады; сағаттың созылуы жоқ

Осы кезде сіз ойлануыңыз мүмкін: "SPI is faster, so SPI wins, end of article." Толық емес - қысым датчигі үшін жылдамдық ешқашан маңызды емес. Міне, себебі.


Маңызды емес жылдамдық аргументі

Әдеттегі MEMS қысым датчигі әрбір оқуды алады 1-ден 100 миллисекундқа дейін — шина жылдамдығы емес, ADC түрлендіру уақыты басым болады. Тіпті үлгіге 1 мс болса да (1 кГц дискретизация), сіз оқуға 48 бит итермелейсіз. Яғни 48 кбит/с.

400 кГц кезінде I²C үстеме жүктемеден кейін ~320 кбит/с тасымалдайды. 1 МГц жиіліктегі SPI 1 Мбит/с тасымалдайды. Біреуі де 7× – 20× жылдамырақ than the sensor's data rate. Егер сіз ультрадыбыстық жиіліктерде сынама алмасаңыз - бұл сіз емес, өйткені қысым соншалықты тез өзгермейді - автобус жылдамдығы маңызды емес. The sensor is the bottleneck, not the wires.

Жылдамдық туралы қорытынды: маңызды емес. Сенсордың ADC шектеуші фактор болып табылады. Басқа негіздер бойынша шешім қабылдаңыз.


Pin саны: Кіші тақталардағы шын мәнінде маңызды аргумент

Сценарий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 болса - кімге маңызды. Бірақ дисплей, BLE, екі түйме және SD картасы бар 15 қолдануға болатын GPIO бар ESP32-C3 құрылғысында - SPI тітіркенуіне арналған бұл 2 қосымша түйреуіш. I²C шинаны қанша сенсор бөлісетініне қарамастан, түйреуіштерді сақтайды.

Ескертпе: I²C сізге төлейді екі тартылатын резистор. SPI құны жоқ. Екі 4,7 кОм 0402 резистордың құны шамамен $0,002 құрайды және тақтаның 2 мм² кеңістігін алады - ештеңе емес, бірақ оған жақын.

Түтіктердегі төменгі сызық: GPIO тығыз болған кезде I²C жеңеді. Шыңға бай MCU арқылы артықшылық жоғалады - басқа факторларды шешіңіз.


Көп сенсорлы конструкциялар: I²C шын мәнінде жарқыраған жерде

Бір ПХД-дегі үш қысым датчигі — бір барометрлік анықтама, бір резервуар деңгейі, бір сорғы шығысы. I²C көмегімен: әр сенсорды басқа мекенжайды тағайындаңыз, SDA және SCL сымын параллельді орындаңыз. Екі із. Үш сенсор. Қосымша MCU түйреуіштері жоқ. SPI көмегімен: ортақ MOSI/MISO/SCLK жоғарғы жағындағы үш бөлек CS желісі — барлығы алты сым.

Абайлаңыз: I²C құрылғыларына бірегей мекенжайлар қажет. Көптеген қысым сенсорлары дәл ұсынады екі мекенжай (жоғары немесе төмен байланған түйреуіш). Бұл TCA9548A сияқты I²C мультиплексорын қажет етпес бұрын автобуста екі сенсорды алатыныңызды білдіреді - бұл ~ $0,50 және бірнеше мм² қосады. SPI-де мұндай шектеу жоқ; сенсорға CS сызығын қосыңыз.

Мультисенсордағы қорытынды: I²C екі бірдей сенсорға дейін сымдарды қосудың қарапайымдылығы үшін жеңеді. Бұдан басқа, SPI немесе I²C mux пайдаланыңыз — екеуі де жақсырақ емес, бұл орналасу қоңырауы.


Шуға қарсы иммунитет: SPI алға тартады

Ажыратымдылығы жоғары қысым сенсорлары 0,03 гПа шамасындағы өзгерістерді өлшейді — бұл электр сигналына аударылатын үстелге қонған масаның салмағына тең. Бұл шешімде шу маңызды.

I²C шуының сипаттамалары

Тартылатын резисторлары бар ашық ағызу желілері таза CMOS ауысуларын емес, RC рампасының жиектерін жасайды. Тарту мәндері компромисс болып табылады: тым күшті қуат жоғалтады; тым әлсіз көтерілу уақытын баяу етеді және шуды байланыстыру үшін терезені ашады. Шулы ортада — мотор драйверінің, коммутация реттегішінің жанында немесе PWM бар кез келген нәрседе — I²C ақауы болуы мүмкін. Протоколда ACK битінен басқа кірістірілген қатені анықтау мүмкіндігі жоқ (кейбір сенсорлар пайдалы жүктемеге CRC байтты қосады, бұл көмектеседі).

SPI шуының сипаттамалары

Push-pull 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 үзілген кезде жөндеуге ұзағырақ уақыт қажет.


Қуатты тұтыну: екеуі де дөңгелектеу қателері

4,7 кОм тартылатын 400 кГц I²C шинасы шамамен жанып кетті. 0,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 пайдаланыңыз. Сіз өнеркәсіптік таратқыш аумағындасыз.

3EMI ортасы қандай?

Тыныш ПХД, қозғалтқыштар жоқ → Бірде

Айналма қақпақтары бар таза орналасу I²C-ті бақытты етеді.

BLDC, GSM, жақын жерде бак түрлендіргіші → SPI

Итеру драйверлері және CS қақпасы фантомдық көрсеткіштерді болдырмайды.

4Драйверді жазатын сен бе?

HAL / кітапхана бар → Немесе

Абстракция айырмашылықты елеусіз етеді. Қалған тақта пайдаланатын нәрсені пайдаланыңыз.

Нөлден бастап жазу → SPI

Аз күйлер, сағаттың созылуы жоқ, мекенжай қақтығыстары жоқ.

Arduino кітапханасын тасымалдау → I²C

Көптеген әуесқойлар сенсорлық кітапханалары әдепкі бойынша I²C мәнін береді. Алдымен кітапхананы тексеріңіз.


The "Why Not Both" Card

Қос интерфейс

Кейбір сенсорлар бірге жеткізіледі I²C және SPI екеуі бір штампта, түйреуіш белбеу немесе тіркеу биті арқылы таңдауға болады. Бұл екі сценарийде шынымен пайдалы:

Прототиптеу икемділігі

Arduino немесе үзіліс тақтасында I²C арқылы бастаңыз, себебі сымды қосу оңай. Жеке ПХД-ді айналдырған кезде, макетіңіздің пайдасы болса, SPI-ге ауысыңыз. Бірдей сенсор, бірдей микробағдарлама логикасы, тек басқа HAL қоңырауы.

Өндірістік SKU икемділігі

One PCB design, different SKUs. Бір SKU I²C пайдаланады, себебі ол автобусты температура/ылғалдылық сенсорымен бөліседі. Басқа қашықтағы сенсорлық тақтаға ұзағырақ бақылау жүргізу үшін SPI қажет. Сіз ештеңені қайта жасамайсыз — BOM ​​сызығын және резистор бауын өзгертіңіз.

Егер сенсор кандидаты екі автобусты да қолдамаса, бұл мәміле емес. Таңертеңгі сағат 2-де тақтаны қайта айналдырмайынша, опцияның болуы сіз бағаламайтын нәрселердің бірі болып табылады.


Қатардағы түйіндеме

ФакторI²CSPIЖеңімпаз
Сымдар саны2Әр сенсор үшін 4 + 1I²C
Жылдамдық3,4 МГц дейін50 МГц дейінБайланыс — сенсор ADC – бұл кедергі
Көп сенсор (бір типті)Мультификаторсыз максимум 2Шексіз (әр сенсорға бір CS)2 сенсордан тыс SPI
Шуға қарсы иммунитетАшық су төгетін, RC шеттеріCMOS итеріңіз, өткір жиектерSPI
Микробағдарламаның күрделілігіКүй машинасы, ACK/NAK, күту уақытыCS бекіту, байттарды ауыстыру, орындалдыSPI (жалаңаш металл); Галстук (HAL бар)
Түзету қиындығыҚаттырақ — NAK аң аулауОңай - тікелей сигналдарSPI
Қуатты тұтыну~0,7 мА (тартқыштар белсенді)~0 мА (тартпаларсыз)Галстук — дельта — пиковат-сағат
КабельдерҰсынылмайды >200 ммҰзақ іздерге шыдайдыSPI
Сыртқы компоненттер2 × тартылатын резисторларЖоқБайланыс — 2× 0402 резисторлар ≈ $0,002

TL; DR

PIN саны I²C сымдарды азырақ пайдаланады. GPIO тығыз болған кезде шешуші.
Жылдамдық Маңызды емес. Сенсордың ADC әрқашан кедергі болып табылады.
Көп сенсор I²C ≤2 бірдей сенсор үшін тазарақ. SPI одан жоғары масштабталады.
Шу SPI жеңеді. Қозғалтқыштардың, қосқыштардың немесе GSM модульдерінің жанында шешуші.
Микробағдарлама SPI қарапайым металл болып табылады. HAL көмегімен бұл жуу. I²C үзілген кезде жөндеуге ұзағырақ уақыт қажет.
Қуат Қуатқа қарап таңдамаңыз. Айырмашылық пиковат-сағат.
Қос интерфейс Екі әлемнің ең жақсысы - бір дизайн, өз қалауыңыз бойынша ауыстырыңыз. Оны кейіннен ойланбаған мүмкіндік ретінде пайдаланыңыз.

Қандай интерфейс дизайныңызға сәйкес келетінін білмейсіз бе? Бізге MCU, тақта шектеулері және ортаңызды айтыңыз — біз сізді әдетте бір сағат ішінде дұрыс бөлікке бағыттаймыз.

Хабарласыңыз →
Жоғарыға жылжытыңыз

Бізбен хабарласыңы