Инженерлік нұсқаулықтар
Қысым сенсорларына арналған I²C және SPI - дұрыс автобусты таңдаңыз немесе кейінірек орналасуды жек көріңіз
Сіз қысым сенсорын таңдадыңыз. Сіз диапазонды, дәлдікті, пакетті білесіз. Содан кейін тапсырыс бетінде екі нұсқаны көресіз: I²C және SPI. Дәл сол сенсор. Бірдей баға. Әр түрлі төрт әріп. Міне, қалай шешуге болады — оқулық теориясымен емес, нақты сандармен.
Екі минуттық сергіту сәті
Бұрын екі автобусқа да сым қоссаңыз, мұны өткізіп жіберіңіз. Егер сізде жоқ болса, мақаланың қалған бөлігін орындауға жеткілікті:
- Сымдар: 2 — SDA (деректер) + SCL (сағат)
- Сигнал түрі: Ашық су төгетін, резисторлармен жоғары тартылған
- Адрес: Әрбір құрылғыға 7 биттік мекенжай
- Бағыты: Жартылай дуплекс
- Жылдамдық: 100 кГц / 400 кГц / 1 МГц / 3,4 МГц
- Бақылау: Шебердің бастамасымен; құлдар жауап бергенде ғана жауап береді
- Сымдар: 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-сұраққа көшу.
Екі мекенжай, екі сым. Егер сенсорлар бір-бірінен алыс болмаса - SPI.
I²C мультиплексорының деректер парағын оқуды ұнатпасаңыз.
2Сенсор MCU-дан қаншалықты алыс?
I²C тақта деңгейінде таза орналасуымен жақсы.
Немесе дифференциалды буфері бар I²C (PCA9615). I²C ешқашан кабельдерге арналмаған.
4–20 мА немесе RS-485 пайдаланыңыз. Сіз өнеркәсіптік таратқыш аумағындасыз.
3EMI ортасы қандай?
Айналма қақпақтары бар таза орналасу I²C-ті бақытты етеді.
Итеру драйверлері және CS қақпасы фантомдық көрсеткіштерді болдырмайды.
4Драйверді жазатын сен бе?
Абстракция айырмашылықты елеусіз етеді. Қалған тақта пайдаланатын нәрсені пайдаланыңыз.
Аз күйлер, сағаттың созылуы жоқ, мекенжай қақтығыстары жоқ.
Көптеген әуесқойлар сенсорлық кітапханалары әдепкі бойынша 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²C | SPI | Жеңімпаз |
|---|---|---|---|
| Сымдар саны | 2 | Әр сенсор үшін 4 + 1 | I²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
Сізге абсолютті, манометр немесе дифференциалды қысым датчигі қажет пе деп шатастырдыңыз ба? Қарапайым ағылшын нұсқаулығын оқыңыз →
Қандай интерфейс дизайныңызға сәйкес келетінін білмейсіз бе? Бізге MCU, тақта шектеулері және ортаңызды айтыңыз — біз сізді әдетте бір сағат ішінде дұрыс бөлікке бағыттаймыз.
Хабарласыңыз →



