Barion Pixel
Az SPI és a ChipSelect

🔀 Az SPI nem busz – több slave és CS kezelés a gyakorlatban

Az SPI-t sokan busznak hívják. Pedig valójában klasszikusan nem az. Ugyanakkor kívülről akár hasonlíthat is hozzá, hiszen:

  • több eszköz, és
  • közös vezetékek, és
  • gyors adatátvitel jellemzi.

De hiányzik belőle az, amitől egy valódi busz busz lenne:

  • nincs címzés,
  • nincs arbitrázs,
  • nincs ütközéskezelés.

Ezért az SPI inkább valódi pont-pont kommunikáció, amit csak “buszszerűen” használunk.

Miért nem valódi busz az SPI?

Egy klasszikus busz (I²C, CAN, RS-485) jellemzője, hogy:

  • több eszköz van egyetlen vezetéken,
  • azonos adatvonalat használnak az eszközök, és
  • valamilyen logika dönti el, ki beszél rajta.

Az SPI-nél viszont nm teljesen íg van, mert:

  • a master választja ki az eszközt, amihez
  • külön CS (Chip Select) vezeték kell minden slave-hez.

Azaz nem közös a kommunikáció, hanem vezérelt kiválasztás történik.

De hogyan működik több slave eszköz az SPI-n?

Az alap bekötés egyszerű. Közös vezetékek:

  • MOSI,
  • MISO,
  • SCLK / SCK.

Külön vezetékezéssel megoldott a CS (ChipSelect, azaz a chip kiválasztás):

  • CS1,
  • CS2,
  • CS3, …

A kiválasztás kötött szabálya, hogy:

egyszerre csak egy CS lehet aktív.

Ha kettő lenne mégis aktív, akkor:

  • két slave eszköz válaszolna egyszerre, és így
  • a MISO közössé vált vonal összeakad.

De z már nem “protokollhiba”, hanem fizikai konfliktus!

Miért nem szereti az SPI kialakítás a csillag topológiát?

Elsőre logikusnak is tűnik az oka, hiszen:

  • egy központi MCU van benne,
  • több irányba vezetékek futnak.

De az SPI esetén:

  • gyors fel- és lefutó jel-élek,
  • nincs differenciális jelátvitel,
  • nincs jelvisszaverődés-kezelés.

A csillag topológia pedig:

  • fokozott lecsengést,
  • túllövést,
  • instabil jelet okoz!

Ezért a kulcsmondat: SPI = rövid, rendezett vezetékek.

A CS kezelése – a legtöbb hiba forrása

Tipikus hibák, amiket tuti mindenki elkövet egyszer….

❌ Két CS egyszerre LOW → adatütközés
❌ CS túl korán felengedve → hiányzó bitek
❌ CS nincs stabil szinten resetkor → slave “összezavarodik”

Tipp: Sok SPI probléma nem a sebesség, hanem a CS miatt van.

Több slave esetén mire figyelj tervezéskor és programozáskor?

1️⃣ MISO tri-state viselkedés

A slave-nek: csak aktív CS-nél szabad meghajtani a MISO-t.Ha tartod be: a busz összeakad.

2️⃣ Időzítés CS és órajel között

Sok eszköz megköveteli: CS LOW → kis várakozás → első clock. Ha nincs betartva: az első bit elveszik.

3️⃣ Pull-up / pull-down a CS-en

Resetkor a GPIO lebeghet. A megoldás: fel- vagy lehúzó ellenállás beépítése és így determinisztikus indulás.

De mikor kezd szétesni az SPI kommunikáció?

Ha az alábbiakat sikerül külön-külön vagy akár egyszerre összehozni:

  • hosszú kábel használata,
  • sok slave eszköz beépítése,
  • csillag topológia kialakítása,
  • magas órajel használata.

Ilyenkor az SPI kommunikáció mér nem skálázható megfelelően.

Ezért az alábbiakat tarts szem előtt:

  • ha sok eszköz van → I²C vagy RS-485 buszrendszer,
  • ha nagy távolság → differenciális busz legyen

SPI vs. valódi busz – gyors összehasonlítási tipp

TulajdonságSPII²C / RS-485
Címzésnincsvan
Ütközéskezelésnincsvan
Kábelhosszrövidhosszabb
Több eszközCS kellnatív

Tipp: SPI = gyors, de nem skálázható jól.

Gyakori tévhitek a SPI kommunikációnál

❌ “SPI busz” elnevezés,
❌ “Csak kössük rá még egy eszközt” hibás elve,
❌ “Majd firmware-ben kezeljük” probléma (nem) megoldás.

Az SPI működésének ugyanis a a fizikai réteg szabja meg a határát!

Rövid “SPI-iránytű”

  • Sok SPI eszköz → több CS kell,
  • Hosszú vezeték → SPI nem ide való,
  • Random bitek → CS időzítés,
  • Több slave → ellenőrizd a MISO tri-state-et,
  • Skálázni kell → gondolkodj más buszrendszerben!

És egy összegző gyors zárógondolat

Az SPI:

  • nagyon gyors,
  • nagyon egyszerű,
  • de nem busz.

Amíg:

  • rövid vezeték,
  • kevés slave,
  • tiszta topológia,

alakítható ki – addig kiváló.

De ha elkezded “buszként” használni: a problémák törvényszerűen megjelennek.

 

Ez a cikk a → Buszrendszerek mikrokontroller-projektekhez mini-cikksorozat része.
← Előző: 🔀 🪢 Buszválasztó: hogyan döntsd el, melyik kommunikációs busz való a projektedbe?

További írások