Rozhraní SPI¶
SPI je rychlé sériové komunikační rozhraní mezi kontrolérem a periferiálními zařízeními. Rozšíření: Serial Peripheral Interface.
SPI se často používá tam, kde je potřeba rychlejší přenos dat než I2C, nebo když je zařízení navrženo pro SPI: displej, SD karta, RFID modul, senzor, driver či čip paměti.
Kde se SPI používá¶
V 3D tiskárnách a zařízeních podobných iDryer se SPI může vyskytovat v:
- RFID/NFC modulech jako RC522;
- OLED/TFT displeji;
- SD kartách;
- akcelerometrech pro input shaper;
- stepper driverech, například TMC2130/TMC5160;
- čipech paměti;
- ADC/DAC a expanzních deskách;
- některých senzorech a specializovaných modulech.
SPI je obvykle rychlejší než I2C, ale vyžaduje více vodičů a pečlivější výběr pinů.
Základní linky¶
Typický SPI používá:
SCKneboCLK- hodinový signál;MOSI- data od kontroléru k zařízení;MISO- data od zařízení k kontroléru;CS,SSneboNSS- výběr konkrétního zařízení;GND- společná zem;- napájení modulu.
Diagram se dvěma zařízeními:
Zdroj: Wikimedia Commons, Em3rgent0rdr, CC0 Public Domain
SCK, MOSI a MISO mohou být sdíleny více zařízeními. Ale každé zařízení obvykle potřebuje vlastní CS.
CS místo adres¶
V I2C se zařízení rozlišují podle adres. V SPI obvykle nejsou adresy. Kontrolér si vybere zařízení oddělou CS linkou.
Příklad:
SCK -> běžné všem SPI zařízením
MOSI -> běžné
MISO -> běžné
CS1 -> RFID modul
CS2 -> displej
CS3 -> SD karta
Když chce kontrolér mluvit s RFID modulem, aktivuje CS1. Když chce mluvit s displejem, aktivuje CS2.
Nejčastěji je CS aktivní nízko: v klidu je linka HIGH, na výběr zařízení je LOW. Ale to musí být ověřeno v technickém datalisty.
MOSI/MISO a nová jména¶
Ve starých a velmi běžných schématech jsou jména:
MOSI- Master Out Slave In;MISO- Master In Slave Out;SS- Slave Select.
V novější dokumentaci můžete vidět neutrální jména:
PICO- Peripheral In Controller Out, ekvivalent MOSI;POCI- Peripheral Out Controller In, ekvivalent MISO;CS- Chip Select.
V elektronice 3D tiskáren jsou MOSI, MISO, SCK, CS stále velmi běžné. Hlavní věc je pochopit směr signálu a zkontrolovat rozložení pinů konkrétního modulu.
MISO nemusí být potřeba¶
Ne každé SPI zařízení skutečně posílá data zpět.
Například jednoduchý displej může jen přijímat příkazy a pixely. Pak linka MISO může chybět nebo se nepoužívá.
Ale na zařízení, která čtou data, je MISO potřeba:
- RFID modul;
- SD karta;
- senzor;
- driver s diagnostikou;
- čip paměti.
Pokud má modul reagovat a MISO není připojena či je prohozena, inicializace může selhat.
Rychlost SPI a režim¶
SPI má rychlost. Může být mnohem vyšší než I2C, ale to neznamená, že musíte nastavit maximum hned.
Práce je ovlivňena:
- délkou vodiče;
- kvalitou zem;
- modulem a jeho datalistem;
- úrovní šumu;
- frekvencí kontroléru;
- zvoleným SPI režimem.
SPI režim je nastaven parametry polarity a fáze hodinky: CPOL a CPHA. Režim 0 se často používá, ale ne vždy. Pokud je režim špatný, zařízení nemusí reagovat či vrátit špatná data.
Ve větši hotových knihoven je režim už nastaven. Ale pokud připojujete neobvyklý modul či píšete nízkoúrovňovou konfiguraci, musíte zkontrolovat datalist.
3.3V a 5V¶
Stejně jako ostatní rozhraní SPI nezaručuje bezpečné napěťové úrovně.
ESP32, RP2040, STM32 a mnoho moderních modulů pracují s logikou 3.3V. Arduino Uno/Nano často používá 5V.
Před připojením ověřte:
- napájení modulu;
- logickou úroveň
SCK,MOSI,MISO,CS; - zda je sladění úrovní;
- zda modul toleruje
5Vna vstupech signálů; - zda vstup kontroléru toleruje
5V.
Například RC522 typicky vyžaduje napájení a logiku 3.3V. Připojení na Arduino 5V bez sladění úrovní je špatný nápad.
SPI v Klipperu¶
V Klipperu se SPI používá na různá zařízení: TMC drivery, akcelerometry, některé displeje a sensory.
Konfigurace může obsahovat:
cs_pin- pin výběru zařízení;spi_bus- hardwarová SPI sběrnice;spi_speed- rychlost v Hz;spi_software_sclk_pin;spi_software_mosi_pin;spi_software_miso_pin.
Pokud je zařízení připojeno na dodatečný MCU, piny by měly patřit tomu MCU. Stejně jako u ostatních sekcí Klipperu je konkrétní rozložení pinů desky důležitější než odhady.
Hrubá představa:
[some_spi_device]
cs_pin: chamber:gpio9
spi_software_sclk_pin: chamber:gpio10
spi_software_mosi_pin: chamber:gpio11
spi_software_miso_pin: chamber:gpio12
To není hotová konfigurace konkrétního zařízení, ale ilustrace: všechny SPI piny musí být na MCU, ke kterému je modul skutečně připojen.
Délka vodiče a interference¶
SPI může fungovat rychle, ale nemá rád dlouhé, chaotické zapojení.
Praktická pravidla:
- udržujte
SCK,MOSI,MISO,CSkrátké; - vedete blízko
GND; - nevedete paralelně s vodiči topidla a motoru;
- snižte
spi_speed, pokud jsou chyby; - používejte správné konektory;
- nevedete SPI přes celou tiskárnu bez důvodu;
- pro vzdálené uzly si spíše vyberte CAN, UART/RS-485 nebo oddělený MCU blízko modulu.
Linka SCK je obzvláště citlivá: je to hodinový signál. Pokud je špinavá, všechna komunikace může být nestabilní.
SPI a RC522¶
RC522 je dobrý příklad SPI modulu s matením v pojmenování.
Na mnohých deskách RC522 je pin SDA skutečně používán jako SS/CS pro SPI. To není I2C SDA.
Na RC522 typicky potřebujete:
3.3V;GND;SCK;MOSI;MISO;SDA/SS/CS;RST;- někdy
IRQ, ale v jednoduchých projektech se často nepoužívá.
Podrobný diagram je v praktickém článku: Připojení RFID čtečky.
Co zkontrolovat před připojením¶
Před připojením SPI modulu ověřte:
- napájení modulu;
- logickou úroveň;
- rozložení pinů konkrétní desky;
- kde jsou
SCK,MOSI,MISO,CS; - zda se potřebují
RST,DC,IRQči jiné piny; - který
CSje přiřazen zařízení; - zda se
CSnekonfliktu s jiným modulem; - zda je potřeba hardwarový nebo softwarový SPI;
- jakou rychlost dokumentace doporučuje;
- zda firmware toto zařízení podporuje.
Typické chyby¶
- prohození
MOSIaMISO; - zapomenutí
CS; - připojení dvou zařízení na jeden
CS; - nepřipojení společné
GND; - aplikace
5Vna modul SPI3.3V; - plení si
SDAna RC522 s I2CSDA; - výběr příliš vysoké rychlosti;
- příliš dlouhé vodiče;
- připojení modulu na jeden MCU, ale zadání pinů z druhého;
- myšlenka, že SPI je silové rozhraní na řízení zátěže.
Klíčové pozorování¶
SPI je rychlé rozhraní na moduly blízko kontroléru. Obvykle potřebujete SCK, MOSI, MISO, CS, napájení a GND.
Hlavní rozdíl od I2C: SPI obvykle nemá adresy a každé zařízení se vybírá oddělou CS. Před připojením ověřte rozložení pinů, logickou úroveň, rychlost, délku vodiče a podporu firmwaru.
související materiály¶
- SparkFun: Serial Peripheral Interface - praktický výklad SPI, datových linek, nových jmen PICO/POCI a logiky základní výměny.
- SparkFun: SPI Chip Select - proč je
CSpotřeba a jak připojit více SPI zařízení. - Adafruit: SPI Devices - srovnání SPI vs I2C, oddělená
CS, rychlost, polarita/fáze a omezení. - DigiKey: SPI Simplifies Device Communication - možnosti připojení více SPI zařízení a role
CS. - Klipper Configuration Reference: Common SPI settings -
spi_speed,spi_bus, softwarový SPI a parametrycs_pinv Klipperu.
