I²C ընդդեմ SPI ճնշման սենսորների համար — Ինտերֆեյսի ընտրության ուղեցույց

Ինժեներական ուղեցույցներ

I²C ընդդեմ SPI ճնշման սենսորների համար. Ընտրեք ճիշտ ավտոբուսը կամ ավելի ուշ ատեք ձեր դասավորությունը

Դուք ընտրել եք ձեր ճնշման սենսորը: Դուք գիտեք շրջանակը, ճշգրտությունը, փաթեթը: Այնուհետև պատվիրման էջում տեսնում եք երկու տարբերակ. I²C մի քանազոր Սպի. Նույն սենսորը: Նույն գինը. Տարբեր չորս տառեր. Ահա թե ինչպես կարելի է որոշել՝ իրական թվերով, ոչ թե դասագրքերի տեսությամբ:


Երկու րոպեանոց թարմացում

Բաց թողեք սա, եթե նախկինում երկու ավտոբուսներն էլ միացրել եք: Եթե ​​չեք արել, ապա բավական է հետևել հոդվածի մնացած հատվածին.

I²C
  • Լարեր: 2 — SDA (տվյալներ) + SCL (ժամացույց)
  • Ազդանշանի տեսակը: Բաց արտահոսք, բարձր քաշված ռեզիստորներով
  • Հասցե: 7-բիթանոց հասցե յուրաքանչյուր սարքի համար
  • Ուղղություն: Half-duplex
  • Արագություն: 100 կՀց / 400 կՀց / 1 ՄՀց / 3,4 ՄՀց
  • Վերահսկում. Վարպետի նախաձեռնությամբ; ստրուկները արձագանքում են միայն այն ժամանակ, երբ դիմում են
Սպի
  • Լարեր: 4 — MOSI, MISO, SCLK + 1× CS մեկ սարքի համար
  • Ազդանշանի տեսակը: Push-pull CMOS
  • Հասցե: Ոչ մեկը — CS գիծն ընտրում է սարքը
  • Ուղղություն: Full-duplex
  • Արագություն: 1 ՄՀց-ից մինչև 50 ՄՀց
  • Վերահսկում. Վարպետը վերահսկում է ժամացույցը; ոչ մի ժամացույցի ձգում

Այս պահին դուք կարող եք մտածել. "SPI is faster, so SPI wins, end of article." Ոչ այնքան, արագությունը գրեթե երբեք կարևոր չէ ճնշման սենսորի համար: Ահա թե ինչու.


Արագության փաստարկը, որը կարևոր չէ

Տիպիկ MEMS ճնշման սենսորը յուրաքանչյուր ընթերցում է կատարում 1-ից 100 միլիվայրկյան — ADC-ի փոխակերպման ժամանակը գերակշռում է, ոչ թե ավտոբուսի արագությունը: Նույնիսկ 1 մվ մեկ նմուշի դեպքում (1 կՀց նմուշառում), դուք սեղմում եք 48 բիթ մեկ ընթերցման համար: դա է 48 կբիթ/վրկ.

I²C-ը 400 կՀց հաճախականությամբ փոխանցում է ~ 320 կբ/վ արագությամբ գլխից հետո: SPI-ը 1 ՄՀց հաճախականությամբ փոխանցում է 1 Մբիթ/վրկ: Մեկն էլ կա 7×-ից 20× ավելի արագ քան սենսորի տվյալների արագությունը: Եթե ​​դուք նմուշառում չեք կատարում ուլտրաձայնային հաճախականությամբ, ինչը դուք չեք, քանի որ ճնշումն այդքան արագ չի փոխվում, ավտոբուսի արագությունն անտեղի է: Սենսորը շիշն է, ոչ թե լարերը:

Ստորին գիծ արագության վրա. նշանակություն չունի: Սենսորի ADC-ն սահմանափակող գործոնն է: Որոշեք այլ հիմքերով:


Pin Count. Փաստարկը, որն իրականում կարևոր է փոքր տախտակների վրա

ՍցենարՕգտագործված 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 քարտով. I²C-ն պահպանում է ձեր քորոցները՝ անկախ նրանից, թե քանի սենսոր ունի ավտոբուսը:

Նշում. I²C-ն արժե ձեզ երկու ձգվող դիմադրություն. SPI-ն ոչ մի արժեք չունի: Երկու 4,7 կՕմ 0402 ռեզիստորների ընդհանուր արժեքը կազմում է մոտ 0,002 դոլար և զբաղեցնում է 2 մմ² տախտակի տարածք, ոչ թե ոչինչ, այլ մոտ է դրան:

Հիմնական գիծը կապում. I²C-ն հաղթում է, երբ GPIO-ները խիտ են: Պինով հարուստ MCU-ի դեպքում առավելությունն անհետանում է. որոշեք այլ գործոններ:


Բազմասենսորային ձևավորում. որտեղ I²C-ն իրականում փայլում է

Երեք ճնշման սենսոր նույն PCB-ի վրա՝ մեկ բարոմետրիկ հղում, մեկ տանկի մակարդակ, մեկ պոմպի ելք: 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 անցումներ: Ձգվող արժեքները փոխզիջում են. չափազանց ուժեղ ուժը վատնում է. չափազանց թույլ է դարձնում բարձրացման ժամանակը դանդաղ և բացում է աղմուկի միացման պատուհանը: Աղմկոտ միջավայրում` շարժիչի վարորդի, անջատիչ կարգավորիչի կամ PWM-ով որևէ այլ բանի կողքին, I²C-ն կարող է խափանվել: Արձանագրությունը չունի ներկառուցված սխալի հայտնաբերում ACK բիթից դուրս (որոշ սենսորներ ավելացնում են CRC բայթ բեռնատարին, որն օգնում է):

SPI աղմուկի բնութագրերը

Push-pull CMOS վարորդներն ակտիվորեն վարում են ինչպես բարձր, այնպես էլ ցածր վիճակներ: Ծայրերը սուր են: CS գիծը մուտք է գործում հենց այն ժամանակ, երբ ստրուկը պետք է լսի, մնացած ժամանակ անտեսելով ավտոբուսի ամեն ինչ: Իրականորեն ավելի լավ SNR:

Գործնականում, մաքուր PCB դասավորությունը կարճ հետքերով, վերգետնյա հարթությամբ և շրջանցող կափարիչներով կպահի I²C-ն երջանիկ դիզայնի մեծ մասում: Բայց եթե ձեր սենսորը գտնվում է MCU-ից մեկ մետր հեռավորության վրա գտնվող մալուխի վրա, կամ կիսում է պարիսպը այն ամենի հետ, որը փոխում է հոսանքի ուժեղացուցիչները, ապա SPI-ի աղմուկի իմունիտետը իսկական առավելություն է:

Աղմուկի հիմնական գիծը. SPI-ն առավել անվտանգ ընտրություն է էլեկտրական թշնամական միջավայրում: Նույն PCB-ի վրա MCU-ից մի քանի սանտիմետր հեռավորության վրա, I²C-ն լավ է:


Որոնվածը բարդություն. The Tiebreaker-ի մասին, որի մասին ոչ ոք չի խոսում

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-ն ավելի երկար ժամանակ է պահանջում վրիպազերծման համար, երբ այն խախտում է:


Էլեկտրաէներգիայի սպառում. երկուսն էլ կլորացման սխալներ են

400 կՀց հաճախականությամբ I²C ավտոբուսը 4,7 կՕմ լարումով այրվում է մոտավորապես 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-ից հեռու:

Նույն PCB, <100 մմ → Կամ

I²C-ը լավ է տախտակի մակարդակում՝ մաքուր դասավորությամբ:

Մալուխ >200 մմ → SPI

Կամ I²C դիֆերենցիալ բուֆերով (PCA9615): I²C-ն երբեք նախատեսված չի եղել մալուխների համար:

>1 մետր → Ոչ մեկը

Օգտագործեք 4–20 մԱ կամ RS-485: Դուք արդյունաբերական հաղորդիչի տարածքում եք:

3Ի՞նչ է EMI միջավայրը:

Հանգիստ PCB, առանց շարժիչների → Կամ

Մաքուր դասավորությունը շրջանցող գլխարկներով ապահովում է I²C-ի ուրախությունը:

BLDC, GSM, բաք փոխարկիչ մոտակայքում → SPI

Push-pull վարորդներն ու CS gating-ը կկանխեն ֆանտոմային ընթերցումները:

4Դո՞ւք եք գրում վարորդին։

HAL / գրադարանը գոյություն ունի → Կամ

Վերացականությունը տարբերությունն աննշան է դարձնում: Օգտագործեք այն, ինչ օգտագործում է տախտակի մնացած մասը:

Գրել զրոյից → SPI

Ավելի քիչ վիճակներ, ոչ մի ժամացույցի ձգում, ոչ հասցեական կոնֆլիկտներ:

Arduino գրադարանի տեղափոխում → I²C

Հոբբիստների սենսորային գրադարանների մեծ մասը լռելյայն է I²C: Նախ ստուգեք գրադարանը:


The "Why Not Both" Card

Կրկնակի ինտերֆեյս

Որոշ սենսորներ առաքվում են ինչպես I²C-ն, այնպես էլ SPI-ն միևնույն ձանձրալի վրա, ընտրելի է կապի ժապավենի կամ գրանցման բիտի միջոցով: Սա իսկապես օգտակար է երկու սցենարով.

Նախատիպի ճկունություն

Սկսեք I²C-ից Arduino-ի կամ բեկումնային տախտակի վրա, քանի որ այն ավելի հեշտ է կապել: Երբ դուք պտտում եք ձեր սեփական PCB-ն, անցեք SPI-ին, եթե ձեր դասավորությունը դրանից շահում է: Նույն սենսորը, նույն որոնվածի տրամաբանությունը, պարզապես այլ HAL զանգ:

Արտադրության SKU ճկունություն

Մեկ PCB դիզայն, տարբեր SKU-ներ: Մեկ SKU-ն օգտագործում է I²C, քանի որ այն կիսում է ավտոբուսը ջերմաստիճանի/խոնավության ցուցիչի հետ: Մեկ ուրիշին անհրաժեշտ է SPI՝ հեռավոր սենսորային տախտակին ավելի երկար հետագծելու համար: Դուք ոչինչ չեք վերանախագծում. փոխեք BOM գիծը և ռեզիստորի ժապավենը:

Եթե ​​ձեր սենսորային թեկնածուն չի աջակցում երկու ավտոբուսներին, դա գործարքի անջատիչ չէ: Բայց տարբերակի առկայությունը այն բաներից մեկն է, որը դուք չեք գնահատում մինչև գիշերը ժամը 2-ին կրկին պտտել տախտակը:


Կողք կողքի ամփոփում

ԳործոնI²CՍպիՀաղթող
Լարերի հաշվարկ24 + 1 մեկ սենսորի համարI²C
ԱրագությունՄինչև 3,4 ՄՀցՄինչև 50 ՄՀցՓողկապ - սենսորային ADC-ն խցանն է
Բազմասենսոր (նույն տեսակի)Առավելագույնը 2 առանց muxԱնսահմանափակ (մեկ CS յուրաքանչյուր սենսորի համար)SPI 2 սենսորից ավելի
Աղմուկի իմունիտետԲաց արտահոսք, RC եզրերPush-pull CMOS, սուր եզրերՍպի
Որոնվածը բարդությունՊետական ​​մեքենա, ACK/NAK, թայմաութներՀաստատեք CS, տեղափոխեք բայթերը, արված էSPI (մերկ մետաղ); Փողկապ (HAL-ով)
Վրիպազերծման դժվարությունԱվելի դժվար — ՆԱԿ որսԱվելի հեշտ - պարզ ազդանշաններՍպի
Էլեկտրաէներգիայի սպառում~0,7 մԱ (ակտիվ ձգումներ)~0 մԱ (առանց ձգումների)Վզկապ — դելտան պիկովատտ-ժամ է
Մալուխը անցնում էԽորհուրդ չի տրվում >200 մմՀանդուրժում է ավելի երկար հետքերՍպի
Արտաքին բաղադրիչներ2× pull up resistorsՈչ մեկըՓողկապ — 2× 0402 ռեզիստորներ ≈ 0,002 դոլար

TL; DR

Փին հաշվում I²C-ն օգտագործում է ավելի քիչ լարեր: Որոշիչ է, երբ GPIO-ները խիտ են:
Արագություն Կարևոր չէ: Սենսորի ADC-ն միշտ խցան է:
Բազմասենսոր I²C-ն ավելի մաքուր է ≤2 միանման սենսորների համար: SPI-ն ավելի լավ է չափվում դրանից դուրս:
Աղմուկ SPI-ն հաղթում է. Որոշիչ է շարժիչների, անջատիչների կամ GSM մոդուլների մոտ:
Որոնվածը SPI-ն ավելի պարզ մետաղ է: HAL-ով դա լվացք է: I²C-ն ավելի երկար ժամանակ է պահանջում վրիպազերծման համար, երբ այն խախտում է:
Իշխանություն Մի ընտրեք՝ ելնելով իշխանությունից: Տարբերությունը պիկովատ-ժամ է:
Երկակի ինտերֆեյս Երկու աշխարհներից լավագույնը՝ մեկ դիզայն, փոխանակում ըստ ցանկության: Օգտագործեք այն որպես հատկանիշ, այլ ոչ թե հետագա մտածողություն:

Չգիտե՞ք, թե որ ինտերֆեյսը համապատասխանում է ձեր դիզայնին: Ասացեք մեզ ձեր MCU-ի, ձեր տախտակի սահմանափակումների և ձեր միջավայրի մասին. մենք ձեզ ցույց կտանք ճիշտ հատվածը, սովորաբար մեկ ժամվա ընթացքում:

Կապվեք →
Ոլորեք դեպի վերև

Կապվեք մեզ հետ