Školicí kurz AVR. Práce s modulem SPI. Čtení a zápis dat. Ch2. Jak pracovat s SPI - Theory Spi input

Přenosová rozhraní.

Pro přenos dat z jednoho zařízení do druhého nebo z jednoho čipu na druhý bylo vyvinuto mnoho rozhraní pro přenos dat. Každé rozhraní má pozitivní i negativní stránky, takže musíte vědět, jaká rozhraní existují, jejich klady a zápory a používat správné rozhraní pro přenos dat v dané situaci.

Rozhraní přicházejí s asynchronním a synchronním přenosem dat. Při synchronním přenosu dat je současně s daty přenášen hodinový signál, což umožňuje synchronizaci přijímače a vysílače. Příkladem takového protokolu je rozhraní SPI.

Při asynchronním přenosu dat neexistuje žádný hodinový signál. V takových vedeních existuje nebezpečí nesouladu mezi přijímačem a vysílačem, v důsledku čehož nebudou další data správně přijímána. Aby se tomu zabránilo, provádějí asynchronní rozhraní periodickou synchronizaci podél datových linek. Výhodou takových rozhraní je menší počet vodičů potřebných pro přenos.

Podívejme se blíže na několik nejoblíbenějších rozhraní.

Rozhraní USART.

Rozhraní USART je sériový univerzální synchronně-asynchronní transceiver. Data jsou do USART přenášena v pravidelných intervalech. Toto časové období je určeno zadanou rychlostí USART a je specifikováno v baudech (pro znaky, které mohou nabývat pouze hodnot nula nebo jedna, je baud ekvivalentní bitům za sekundu). Existuje obecně přijímaný rozsah standardních rychlostí: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 baud.

Kromě datových bitů USART automaticky vkládá do streamu synchronizační značky, tzv. start a stop bity. Při příjmu jsou tyto extra bity odstraněny. Obvykle počáteční a koncové bity oddělují jeden bajt informace (8 bitů), ale existují implementace USART, které umožňují přenos 5, 6, 7, 8 nebo 9 bitů. Bity oddělené signálem start a stop jsou minimálním posíláním. USART umožňuje vložit dva stop bity během přenosu, aby se snížila pravděpodobnost desynchronizace přijímače a vysílače v hustém provozu. Přijímač ignoruje druhý stop bit a považuje jej za krátkou pauzu na lince.

Konvencí je, že pasivní (při absenci dat) stav vstupu a výstupu USART je logická „1“. Počáteční bit je vždy logická „0“, takže přijímač USART čeká na přechod z „1“ na „0“ a počítá z něj časový interval poloviny doby trvání bitu (střed přenosu startovacího bitu) . Pokud je v tuto chvíli zadání stále „0“, spustí se proces příjmu minimálního balíku. K tomu přijímač počítá 9 bitových trvání za sebou (pro 8bitová data) a zaznamenává stav vstupu v každém okamžiku. Prvních 8 hodnot jsou přijatá data, poslední hodnota je testovací hodnota (stop bit). Hodnota stop bitu je vždy „1“, pokud se skutečná přijatá hodnota liší, zaznamená USART chybu.

Pro vytváření časových intervalů mají vysílací a přijímající USART zdroj přesného času (takto). Přesnost tohoto zdroje musí být taková, aby součet chyb (přijímače a vysílače) v nastavení časového intervalu od začátku startovacího impulsu do poloviny zastavovacího impulsu nepřesáhl polovinu (nebo ještě lépe alespoň čtvrtina) bitového intervalu. Pro 8bitovou zprávu 0,5/9,5 = 5 % (ve skutečnosti ne více než 3 %). Vzhledem k tomu, že se jedná o součet chyb přijímače a vysílače plus možné zkreslení signálu na lince, není doporučená tolerance pro přesnost taktování USART větší než 1,5 %.

Protože hodinové bity zabírají část bitového toku, výsledná propustnost UART se nerovná rychlosti připojení. Například u 8bitových přenosů ve formátu 8-N-1 zabírají hodinové bity 20 % toku, což při fyzické rychlosti 115 200 baudů dává datovou bitovou rychlost 92 160 bps nebo 11 520 bajtů/s.

Kontrola parity

Protokol USART má schopnost automaticky monitorovat integritu dat pomocí metody bitové parity. Když je tato funkce povolena, poslední bit dat ("paritní bit") je vždy 1 nebo 0, takže počet jedniček v bajtu je vždy sudý.

Řízení toku

Za starých časů mohla být zařízení USART tak pomalá, že nestíhala držet krok s příchozím datovým tokem. K vyřešení tohoto problému byly moduly USART vybaveny samostatnými výstupy a vstupy řízení průtoku. Když byla vstupní vyrovnávací paměť plná, logika přijímajícího USART nastavila úroveň blokování na odpovídajícím výstupu a vysílající USART přenos pozastavil. Později bylo řízení toku přiřazeno ke komunikačním protokolům a potřeba samostatných linek řízení toku postupně mizela.

Fyzické provedení.

USART je výměnný protokol, tzn. určuje způsob tvorby bitů, parametry přenosu bajtů, přenosovou rychlost atd.

Ale fyzická implementace USART může být odlišná. Například pro přenos dat v rámci jedné desky jsou signály přenášeny na úrovních +5V a 0V. Pro přenos dat na velké vzdálenosti a mezi zařízeními se používají jiné fyzické napěťové úrovně a standardy jako: proudová smyčka (4-20 mA), RS-232 (COM port), RS-485 a podobně.

Pro převod úrovní „řadiče“ 0-5V na „standardní“ úrovně existuje velké množství specializovaných mikroobvodů, například ADM202 pro RS-232.

Sériové rozhraní SPI

Název SPI je zkratkou pro „Serial Peripheral Bus“, což odráží její účel – sběrnici pro připojení externích zařízení. Sběrnice SPI je organizována na principu master-slave. Master sběrnice je obvykle mikrokontrolér, ale může to být také programovatelná logika, DSP kontrolér nebo ASIC. Zařízení připojená k masteru jsou slave. Jejich roli hrají různé druhy mikroobvodů, vč. paměťová zařízení (EEPROM, Flash paměti, SRAM), hodiny reálného času (RTC), ADC/DAC, digitální potenciometry, specializované ovladače atd.

Hlavním stavebním kamenem rozhraní SPI je konvenční posuvný registr, jehož synchronizace a vstupní/výstupní signály bitového toku tvoří signály rozhraní. Proto je správnější nazývat protokol SPI nikoli protokolem přenosu dat, ale protokolem výměny dat mezi dvěma posuvnými registry, z nichž každý současně plní funkci přijímače i vysílače. Předpokladem pro přenos dat na sběrnici SPI je generování synchronizačního signálu sběrnice. Pouze vedoucí má právo generovat tento signál a práce otroka na něm zcela závisí.

Spojení.

Existují tři typy připojení ke sběrnici SPI, z nichž každý zahrnuje čtyři signály. Účel signálů SPI je popsán v tabulce 7.1.

Nejjednodušší zapojení, které zahrnuje pouze dva mikroobvody, je znázorněno na obrázku 7.2. Zde master sběrnice přenáší data po lince MOSI synchronně s jím generovaným signálem SCLK a slave zachycuje přenášené datové bity na určitých hranách přijatého synchronizačního signálu. Slave zároveň odešle svůj datový balíček. Prezentovaný obvod lze zjednodušit eliminací MISO linky, pokud použitý slave IC nezajišťuje přenos dat odezvy nebo jej není potřeba. Jednosměrný přenos dat lze nalézt v takových čipech, jako jsou DAC, digitální potenciometry, programovatelné zesilovače a ovladače. Uvažovaná možnost připojení podřízeného IC tedy vyžaduje 3 nebo 4 komunikační linky.

Aby podřízený IC mohl přijímat a vysílat data, kromě hodinového signálu musí být SS linka také snížena. Jinak bude podřízený IC neaktivní. Když je použit pouze jeden externí IC, může být lákavé eliminovat linku SS tím, že bude selektovaný vstup podřízeného IC silně nízko. Toto řešení je krajně nežádoucí a může vést k poruchám nebo dokonce znemožnění přenosu dat, protože Vstup výběru čipu slouží k resetování IC do jeho počátečního stavu a někdy iniciuje výstup prvního bitu dat.

Pokud je potřeba na sběrnici SPI zapojit více mikroobvodů, použije se buď nezávislé (paralelní) zapojení (obr. 7.3) nebo kaskádové (sériové) zapojení (obr. 7.4). Samostatné připojení je běžnější, protože dosažené při použití jakýchkoli čipů kompatibilních s SPI. Zde jsou všechny signály, kromě výběru mikroobvodů, zapojeny paralelně a master sběrnice převedením jednoho nebo druhého signálu SS do stavu nízkého napětí určí, se kterým podřízeným IC si bude vyměňovat data. Hlavní nevýhodou tohoto zapojení je nutnost dalších linek pro adresování slave čipů (celkový počet komunikačních linek je 3+n, kde n je počet slave čipů).

Pokud není dostatek noh mikrokontroléru, můžete použít demultiplexní čip. Demultiplexor připojuje jeden vstupní signál k jednomu z výstupních signálů v závislosti na kódu na řídicích pinech. Obrázek 7.4 ukazuje schéma zapojení demultiplexoru. Na jeho vstup je přiveden signál SS, který nabývá hodnoty rovné 0, pokud je potřeba vybrat jeden z mikroobvodů. Číslo požadovaného mikroobvodu v binárním kódu je přivedeno k nohám Am-A0. To umožňuje snížit počet nohou použitých v mikrokontroléru na m=log 2 n. Kde n je počet podřízených čipů. Tito. pro připojení 128 zařízení je potřeba 8 pinů mikrokontroléru. Jeden pro nastavení povolovacího signálu a 7 pro nastavení čísla čipu, který se má zapnout. Je třeba poznamenat, že na nezapojených nohách demultiplexoru musí být logická jednička. Jinak se používá signálový invertor, který převádí logickou nulu na logickou jedničku.

Kaskádové přepínání je bez této nevýhody, protože zde několik čipů tvoří jeden velký posuvný registr. Za tímto účelem je výstup vysílaných dat jednoho IC propojen se vstupem pro příjem dat druhého, jak je znázorněno na obrázku 3. Vstupy pro výběr čipu jsou zde zapojeny paralelně, takže celkový počet komunikačních linek je udržován stejný. až 4. Použití kaskádového zapojení je však možné pouze v případě, že je jeho podpora uvedena v dokumentaci k použitým čipům. Pro zjištění je důležité vědět, že takovému spojení se anglicky říká „daisy-chaining“.

Přenosový protokol

Přenosový protokol přes rozhraní SPI je v podstatě shodný s logikou posuvného registru (obrázek 7.6), který spočívá v provedení operace posuvu a podle toho bitového vstupu a výstupu dat na určitých hranách synchronizačního signálu. Nastavení dat při vysílání a vzorkování při příjmu se vždy provádí na opačných hranách hodin. To je nezbytné, aby bylo zajištěno, že údaje budou odebrány, jakmile budou spolehlivě stanoveny. Pokud vezmeme v úvahu, že první hranou v přenosovém cyklu může být náběžná nebo sestupná hrana, pak existují čtyři možné logické varianty fungování rozhraní SPI. Tyto možnosti se nazývají režimy SPI a jsou popsány dvěma parametry:

· CPOL - počáteční úroveň synchronizačního signálu (je-li CPOL=0, pak má synchronizační linka před začátkem přenosového cyklu a po jeho konci nízkou úroveň (tj. první hrana stoupá a poslední klesá), jinak, pokud CPOL=1, - vysoká (tj. první fronta klesá a poslední stoupá));

· CPHA - synchronizační fáze; Tento parametr určuje pořadí, ve kterém jsou data instalována a načítána. Je-li CPHA=0, pak na vzestupné hraně hodinového cyklu budou data vzorkována a poté na sestupné hraně budou data nastavena. Je-li CPHA=1, instalace dat bude provedena na vzestupné hraně synchronizačního cyklu a vzorkování bude provedeno na sestupné hraně.

Informace o režimech SPI jsou uvedeny na obrázcích 7.7 a 7.8.

Master a slave čipy pracující v různých režimech SPI jsou nekompatibilní, proto je před výběrem slave čipů důležité objasnit, které režimy jsou podporovány masterem sběrnice. Hardwarové SPI moduly integrované do mikrokontrolérů ve většině případů podporují možnost volby libovolného režimu a lze k nim tedy připojit libovolné slave SPI čipy (platí pouze pro možnost nezávislého připojení). Navíc je protokol SPI v kterémkoli z režimů snadno softwarově implementován.

Rozhraní RS-485

Rozhraní RS-485 (jiný název je EIA/TIA-485) je jedním z nejběžnějších standardů fyzické komunikační vrstvy. Fyzická vrstva je komunikační kanál a způsob přenosu signálu (vrstva 1 modelu propojení otevřených systémů OSI).

Síť postavená na rozhraní RS-485 se skládá z transceiverů propojených pomocí kroucené dvoulinky - dvou kroucených vodičů. Rozhraní RS-485 je založeno na principu diferenciálního (vyváženého) přenosu dat. Jeho podstatou je přenos jednoho signálu po dvou vodičích. Navíc jeden vodič (podmíněně A) nese původní signál a druhý (podmíněně B) nese jeho inverzní kopii. Jinými slovy, pokud je na jednom vodiči „1“, pak na druhém „0“ a naopak. Mezi dvěma vodiči kroucené dvoulinky tedy vždy existuje potenciální rozdíl: v „1“ je kladný, v „0“ záporný (obrázek 7.9).

Je to tento potenciálový rozdíl, který přenáší signál. Tento způsob přenosu poskytuje vysokou odolnost vůči rušení v běžném režimu. Běžné rušení je rušení, které ovlivňuje oba vodiče linky stejně. Například elektromagnetická vlna procházející částí komunikační linky indukuje potenciál v obou vodičích. Pokud je signál přenášen potenciálem v jednom vodiči vzhledem ke společnému, jako u RS-232, pak rušení na tomto vodiči může zkreslit signál vůči společnému (země), který dobře absorbuje rušení. Kromě toho zemní potenciálový rozdíl klesne na odporu dlouhého společného vodiče - další zdroj zkreslení. A u diferenciálního převodu ke zkreslení nedochází. Ve skutečnosti, pokud dva dráty leží blízko sebe a jsou dokonce propletené, pak je sběr na obou drátech stejný. Potenciál v obou stejně zatížených vodičích se mění stejně, zatímco informativní potenciálový rozdíl zůstává nezměněn.

Hardwarová implementace rozhraní RS485.

Hardwarová implementace rozhraní - čipy transceiveru s diferenciálními vstupy/výstupy (na linku) a digitálními porty (do UART portů regulátoru). Existují dvě možnosti pro toto rozhraní: RS-422 a RS-485.

RS-422 je plně duplexní rozhraní. Příjem a přenos probíhá přes dva samostatné páry vodičů. Na každém páru vodičů může být pouze jeden vysílač.

RS-485 je poloduplexní rozhraní. Příjem a přenos probíhá po jednom páru vodičů s časovým odstupem. V síti může být mnoho vysílačů, protože je lze v režimu příjmu vypnout (obrázek 7.10).

Vysvětlení symbolů na obr. 7.10

D (řidič) - vysílač;
R (receiver) - přijímač;
DI (driver input) - digitální vstup vysílače;
RO (receiver output) - digitální výstup přijímače;
DE (driver enable) - povolení k obsluze vysílače;
RE (receiver enable) - povolení k obsluze přijímače;
A - přímý diferenciální vstup/výstup;
B - inverzní diferenciální vstup/výstup;
Y - přímý diferenciální výstup (RS-422);
Z - inverzní diferenciální výstup (RS-422).

Pojďme se blíže podívat na transceiver RS-485. Digitální výstup přijímače (RO) je připojen k portu UART přijímače (RX). Digitální vstup vysílače (DI) do portu vysílače UART (TX). Vzhledem k tomu, že přijímač a vysílač jsou propojeny na diferenciální straně, musí být vysílač během příjmu vypnutý a přijímač musí být během vysílání vypnutý. K tomuto účelu slouží ovládací vstupy - oprávnění přijímače (RE) a oprávnění vysílače (DE). Protože RE vstup je inverzní, lze jej připojit k DE a přepínat přijímač a vysílač jedním signálem z libovolného portu ovladače. Na úrovni "0" - práce pro příjem, na "1" - pro vysílání (obr. 7.11).

Přijímač přijímající rozdíl potenciálů (UAB) na diferenciálních vstupech (AB) je převádí na digitální signál na výstupu RO. Citlivost přijímače může být různá, ale výrobci čipů transceiveru píší do dokumentace garantovaný prahový rozsah pro rozpoznání signálu. Obvykle jsou tyto prahové hodnoty ±200 mV. To znamená, že když UAB > +200 mV - přijímač detekuje "1" při UAB< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

Všechna zařízení jsou připojena k jednomu kroucenému páru kabelu stejným způsobem: přímé výstupy (A) na jeden vodič, inverzní výstupy (B) na druhý.

Vstupní impedance přijímače na straně linky (RAB) je obvykle 12 kΩ. Protože výkon vysílače není neomezený, vytváří se tím omezení počtu přijímačů připojených k lince. Podle specifikace RS-485 s přihlédnutím k zakončovacím odporům může vysílač řídit až 32 přijímačů. Existuje však řada mikroobvodů se zvýšenou vstupní impedancí, která umožňuje připojit k lince výrazně více než 32 zařízení.

Maximální komunikační rychlost podle specifikace RS-485 může dosáhnout 10 Mbaud/s. Maximální vzdálenost je 1200 metrů. Pokud je potřeba organizovat komunikaci na vzdálenost větší než 1200 metrů nebo připojit více zařízení, než umožňuje zatížitelnost vysílače, používají se speciální opakovače.

I2C rozhraní.

Toto rozhraní navrhla společnost Philips, která jej používala k organizaci komunikace mezi čipy ve svých televizorech. I 2 C (zkratka pro Inter-Integrated Circuit) je obousměrná asynchronní sériová sběrnice. Fyzicky se sběrnice I 2 C skládá ze dvou signálových linek, z nichž jedna (SCL) je určena pro přenos hodinového signálu a druhá (SDA) pro výměnu dat. Pro ovládání linek se používají koncové stupně s otevřeným kolektorem, takže sběrnicová vedení musí být připojena ke zdroji +5 V přes odpory s odporem 1...10 kOhm v závislosti na fyzické délce vedení a rychlost přenosu dat. Délka spojovacích linek ve standardním režimu může dosáhnout 2 metry, rychlost přenosu dat je 100 kbit/s.

Všichni účastníci sběrnice jsou rozděleni do dvou tříd – „Leader“ a „Slave“. Hlavní zařízení generuje hodinový signál (SCL). Může nezávisle přistupovat na sběrnici a adresovat libovolné podřízené zařízení za účelem vysílání nebo příjmu informací. Všechna podřízená zařízení „poslouchají“ sběrnici, aby detekovala svou vlastní adresu a po jejím rozpoznání provedou předepsanou operaci. Kromě toho je možný takzvaný režim „MultiMaster“, kdy je na sběrnici instalováno několik hlavních zařízení, která buď společně sdílejí společná zařízení slave, nebo střídavě fungují jako master, když samy iniciují výměnu informací, nebo jako slave, když čekají na přístup z jiného hlavního zařízení. Režim „MultiMaster“ vyžaduje neustálé sledování a rozpoznávání konfliktů. V tomto ohledu je tento režim obtížněji implementovatelný (myšleno softwarová implementace) a v důsledku toho se méně často používá v reálných produktech.

V počátečním okamžiku - v pohotovostním režimu - jsou obě linky SCL a SDA v logickém stavu (tranzistor koncového stupně s otevřeným kolektorem je uzavřen). V režimu vysílání (obrázek 7.12) je datový bit SDA taktován vzestupnou hranou SCL. Informace na lince SDA se změní, když je linka SCL v nulovém stavu. Podřízené zařízení může „podržet“ linku SCL v nulovém stavu, například při zpracování dalšího přijatého bajtu, zatímco hlavní zařízení musí počkat, dokud se linka SCL neuvolní, než bude pokračovat v přenosu informací.

Pro synchronizaci paketů sběrnice I 2 C se rozlišují dvě podmínky – „START“ a „STOP“, omezující začátek a konec informačního paketu (obrázek 7.13). Pro zakódování těchto stavů se používá změna stavu SDA linky s jediným stavem SCL linky, což je při přenosu dat nepřijatelné. Podmínka "START" se vytvoří, když se na lince SDA objeví sestupná hrana, když je čára SCL v jediném stavu, a naopak podmínka "STOP" se vytvoří, když se na lince SDA objeví stoupající hrana, když SCL linka je v jednom stavu.

Přenos dat začíná na první vzestupné hraně na lince SCL, která taktuje nejvýznamnější bit prvního informačního bytu. Každý informační bajt (8 bitů) obsahuje 9 hodinových period SCL linky. V devátém cyklu vydá přijímací zařízení potvrzení (ACK) - sestupná hrana indikující příjem dat. Je třeba poznamenat, že každý účastník sběrnice, jak hlavní, tak podřízený, může být v různých okamžicích jak vysílačem, tak přijímačem a v souladu s režimem musí buď přijímat nebo vydávat signál ACK, jehož nepřítomnost je interpretována jako chyba.

Pro zahájení operace výměny dat vydá hlavní zařízení na sběrnici podmínku "START". Po podmínce „START“ následuje byte s adresou podřízeného zařízení (obrázek 7.14), který se skládá ze sedmibitové adresy zařízení (bity 1...7) a jednobitového příznaku operace čtení-zápis - „ R/W“ (bit 0). R/W bit určuje směr výměny, přičemž 0 znamená přenos dat z masteru na slave (obrázek 7.14a) a 1 znamená čtení z slave (obrázek 7.14b). Všechny bity na sběrnici I 2 C jsou přenášeny v pořadí od vysokého k nízkému, to znamená, že 7. bit je vysílán jako první, 0. jako poslední. Po adrese může následovat jeden nebo více informačních bajtů (ve směru určeném příznakem R/W), jejichž bity jsou taktovány masterem na sběrnici SCL.

Při provádění operace čtení musí hostitel ACK přečtený bajt, pokud chce číst další bajt, a nevydává ACK, pokud se chystá dokončit čtení paketu (viz obrázek 7.14b).

Je povoleno obnovit adresu podřízeného zařízení vícekrát v jednom přenosovém cyklu, to znamená vysílat opakovanou podmínku „START“ bez předchozí podmínky „STOP“ (obrázek 7.14c).

Je třeba poznamenat některé vlastnosti paměťových čipů pracujících přes rozhraní I 2 C a postupy pro výměnu dat s nimi. Za prvé, energeticky nezávislá datová paměť těchto mikroobvodů je rozdělena na paměťové stránky, takže při zápisu bajtu se celá stránka nejprve zkopíruje do vnitřní paměti RAM mikroobvodu, kde se změní požadovaná buňka. Poté se stará stránka vymaže a na její místo se zapíše nová. Další funkcí je, že nejvýznamnější čtyři bity podřízené adresy se musí vždy rovnat 1010. Tento požadavek je regulován samotnou společností Philips.

Sběrnice 1-Wire používá pro komunikaci a napájení pouze jeden vodič. Komunikační režim je asynchronní a poloduplexní, který se striktně řídí vzorem master-slave. Na stejnou sběrnici může být současně připojeno jedno nebo více podřízených zařízení. Na jednu sběrnici lze připojit pouze jedno hlavní zařízení.

Klidový stav sběrnice odpovídá vysoké úrovni, která je generována pull-up rezistorem. Hodnota pull-up rezistoru je uvedena v dokumentaci k podřízenému IC. Všechny čipy připojené ke sběrnici musí být schopny produkovat nízkou úroveň. Pokud výstup mikrokontroléru nepodporuje tři stavy, je nutné zajistit ovladač, který má výstup s otevřeným kolektorem nebo otevřeným odtokem

Přenos signálu po sběrnici 1-Wire je rozdělen do časových úseků o délce 60 µs. V jednom časovém slotu je přenášen pouze jeden bit dat. Slave zařízení mohou mít významné rozdíly od jmenovitých časových zpoždění. To však vyžaduje přesnější načasování ze strany vedoucího, aby byla zajištěna správná komunikace s podřízenými, kteří mají různé časové základny.

Základní sběrnicové signály.

Master zahájí každou komunikaci na bitové úrovni. To znamená, že přenos každého bitu, bez ohledu na směr, musí být iniciován masterem. Toho je dosaženo nastavením sběrnice na nízkou úroveň, což synchronizuje logiku všech ostatních zařízení. Pro komunikaci přes sběrnici 1-Wire existuje 5 hlavních příkazů: „Write log. 1“, „Zapsat protokol. 0“, „Číst“, „Resetovat“ a „Přítomnost“.

Signál „Zapsat protokol. 1"

Signál „Zapsat protokol. 1“ je znázorněno na Obr. 7.15. Master nastaví nízkou úroveň na 1...15 µs. Poté uvolní sběrnici na zbytek časového úseku.

Rýže. 7.15 – Signál „Zapsat protokol. 1"

Signál „Zapsat protokol. 0"

Signál „Zapsat protokol. 0“ je znázorněno na obrázku 7.16. Master generuje nízkou úroveň po dobu alespoň 60 µs, ale ne déle než 120 µs.

Obr 7.16 – Signál „Zapsat log. 0"

Číst signál

Signál „Čtení“ je znázorněn na obr. 7.17. Master nastaví nízkou úroveň na 1...15 µs. Slave pak drží sběrnici nízko, pokud si přeje vysílat log. 0. Pokud je nutné přenést log. 1, pak linku jednoduše uvolní. Skenování sběrnice musí být provedeno do 15 µs od poklesu sběrnice. Při pohledu ze strany mastera je signál „Čtení“ v podstatě signálem „Zápis do protokolu“. 1". Skutečný vnitřní stav podřízeného zařízení bude určen signálem „Record log“. 1" nebo "Čtení".

Obrázek 7.17 – Signál „Čtení“.

Reset/signál přítomnosti

Signály „Reset“ a „Presence“ jsou znázorněny na obrázku 7.18. Vezměte prosím na vědomí, že časové intervaly pulzů jsou různé. Master táhne nízko po 8 časových slotů (480 µs) a poté uvolní sběrnici. Toto dlouhé období nízkého stavu se nazývá signál "Reset".

Pokud je na sběrnici přítomen slave, musí do 60 µs poté, co master uvolní sběrnici, nastavit nízkou úroveň po dobu alespoň 60 µs. Tato odpověď se nazývá „Přítomnost“. Pokud takový signál není detekován, musí master předpokládat, že na sběrnici nejsou připojena žádná zařízení a není možná žádná další komunikace.

USB (Universal serial bus) byl vyvinut pro rychlé připojení externích zařízení k osobnímu počítači a následné vyhledání a instalaci potřebného softwaru. Nízkoenergetická zařízení jsou napájena přímo přes rozhraní.

Standard USB předpokládá přítomnost pouze jednoho hlavního (hostitelského) zařízení v síti. Kromě toho standard podporuje až 127 podřízených zařízení v síti. Pro rozlišení mezi master a slave zařízeními byly vyvinuty různé typy konektorů (obrázek 7.19): Typ A pro master a typ B pro slave. Je akceptováno, že napětí 5V je přítomno pouze na konektoru typu A, což je hlavní konektor. Zbytek zařízení je napájen přímo z něj.

Standard USB používá 4 stíněné vodiče, z nichž dva přenášejí energii (+5V & GND) (obrázek 7.19 a tabulka 7.2). Další dva představují diferenciální datové signály kroucené dvojlinky. Použité schéma kódování NRZI(Non Return to Zero Invert) pro přenos dat se synchronizačním polem pro synchronizaci hlavních a podřízených hodin.

Standard USB 2.0 zavedl standard On-The-Go (OTG), který zavedl Host Negotiation Protocol, který umožňuje dvěma USB zařízením dohodnout se na tom, kdo bude vystupovat jako master. To je zamýšleno a omezeno na jednotlivá připojení typu point-to-point, jako je například mobilní telefon k osobnímu počítači.

USB podporuje „hot“ (plug’n’play) připojení s dynamicky načítanými a odebíranými ovladači. Uživatel jednoduše zapojí zařízení a tím jej připojí ke sběrnici. Hostitel detekuje připojení, dotazuje se nově vloženého zařízení a načte příslušný ovladač, přičemž okamžik načtení označí přesýpacími hodinami na obrazovce (pokud je ovladač pro USB zařízení již v systému nainstalován). Koncový uživatel se nestará o ukončení resp IRQ(přerušení) a adresy portů, ani o restartování počítače (není nutný restart). Když uživatel skončí se zařízením USB, jednoduše je vyjme (nebo odpojí kabel), hostitel zjistí nepřítomnost zařízení a automaticky stáhne ovladač.

SB verze 1.1 podporuje dvě rychlosti – režim plné rychlosti s rychlostí 12 Mbit/s a režim nízké rychlosti s rychlostí 1,5 Mbit/s. Režim 1,5 Mbit/s je pomalejší a méně citlivý na EMI (rušení), což snižuje náklady na feritové kuličky a snižuje požadavky na kvalitu součástí.

Kabel vysokorychlostní sběrnice je kabel s kroucenou dvojlinkou, chráněný stíněním a lze jej použít i pro nízkorychlostní provoz. Kabel pro provoz pouze při minimální rychlosti (například pro připojení myši) může být libovolný a nestíněný.

Standard USB 2.0 zavádí režim High Speed ​​s rychlostí přenosu dat 480 Mbit/s.

Přenos dat.

Všechny datové přenosy přes rozhraní jsou iniciovány hostitelem. Data jsou přenášena ve formě paketů. Rozhraní USB používá několik typů paketů:

A) podepsat balíček (balíček tokenů) popisuje typ a směr přenosu dat, adresu zařízení a sériové číslo koncového bodu (CT je adresovatelná část USB zařízení); Balíčky funkcí jsou k dispozici v několika typech: V, VEN, SOF, ZALOŽIT;

B) datový balíček (datový paket) obsahuje přenášená data;

B) schvalovací balíček (handshake paket) je určen k hlášení výsledků přenosu dat; Existuje několik typů koordinačních balíčků: ACK, N.A.K., STÁNEK.

Přenos dat přes USB se provádí následovně:

První paket, tzv. token, je generován nadřízeným zařízením a popisuje typ přenášených dat, přenosovou operaci (čtení nebo zápis), adresu zařízení a koncový bod. Dalším obvykle přenášeným datovým paketem je datový paket nesoucí užitečné informace, po kterém následuje handshaking paket indikující, že data nebo token byly úspěšně přijaty, nebo že koncový bod je pozastaven nebo nedostupný pro přijetí dat.

Koncové body ve standardu USB jsou zdroje a jímky dat. Všechna zařízení musí podporovat koncový bod 0. Toto je koncový bod, který přijímá všechny požadavky na řízení a stav během výčtu (požadavek na zpracování k určení typu připojeného zařízení) a tak dlouho, dokud zařízení zůstane funkční na sběrnici.

Koncové body očíslované od 1 se používají k přenosu uživatelských informací. Podívejme se na pár příkladů.

Ovladač zařízení vysílá do koncového bodu EP1 hlavního zařízení. Protože Toto zařízení je master, pak data jdou do OUT bufferu EP1. V tomto případě se odešle OUT token, což znamená, že data jsou připravena k odeslání. Po přijetí tohoto tokenu může podřízené zařízení číst data z vyrovnávací paměti OUT.

Pokud slave zařízení potřebuje přenést data do masteru, umístí je do IN bufferu. Tato vyrovnávací paměť bude uchovávat data, dokud master neodešle IN token požadující data z koncového bodu. Všechny vyrovnávací paměti koncových bodů jsou pojmenovány relativně k hlavnímu, tzn. Výstupní vyrovnávací paměť podřízeného zařízení se nazývá IN, protože je to vstupní vyrovnávací paměť pro hlavní zařízení.

Přenos dat z jednoho koncového bodu do druhého se provádí prostřednictvím proudů. Tok – logické spojení mezi hostitelem a koncovým bodem (koncovými body).

Toky mají také sadu parametrů, jako je typ přenosu (Control, Bulk, Iso nebo Interrupt), směr toku dat a maximální velikosti paketů/bufferů.

Například výchozí tok je obousměrný tok složený z IN koncového bodu 0 a OUT koncového bodu 0 s řízením typu přenosu.

USB definuje dva typy potrubí

A) Proudové potrubí nemají předdefinovaný formát USB, takže můžete posílat jakýkoli typ dat přes stream potrubí a obnovit data na druhém konci. Datové toky jsou sekvenční a mají předem určený směr – IN nebo OUT. Proudová potrubí podporují hromadné, izochronní a přerušované typy přenosu. Streamové kanály lze ovládat buď z hostitele, nebo ze zařízení.

B) Trubky zpráv mají předdefinovaný formát USB. Jsou řízeny hostitelem a jsou iniciovány požadavkem odeslaným z hostitele. Data jsou odeslána požadovaným směrem uvedeným v požadavku. Roury zpráv tedy umožňují přenos dat oběma směry, ale podporují pouze řídicí přenosy.

Standard USB popisuje čtyři typy přenosu dat:

A) Ovládání přesměrování (kontrolní přenos) se používá pro konfiguraci zařízení i pro jiné účely specifické pro zařízení.

B) Streamování (hromadný převod) slouží k přenosu poměrně velkého množství informací.

B) Přerušit předávání (přerušit přenos) slouží k přenosu relativně malého množství informací, pro které je důležité jejich včasné předání. Má omezenou dobu trvání a vyšší prioritu ve srovnání s jinými typy převodů.

D) Izochronní předávání (izochronní přenos) se také nazývá streamování v reálném čase. Informace přenášené při takovém přenosu vyžadují měřítko v reálném čase při svém vytváření, přenosu a příjmu.

Streamování přenosů vyznačující se zaručeným bezchybným přenosem dat mezi hostitelem a funkcí detekcí chyb během přenosu a opětovným vyžádáním informací. Když je hostitel připraven přijímat data z funkce, odešle funkci příznakový paket V-Igelitová taška. V reakci na to funkce ve fázi přenosu dat přenese datový paket na hostitele nebo, pokud ano

SPI v Arduinu je to jeden z hlavních protokolů pro výměnu dat mezi deskou Arduino a připojenými zařízeními. Spolu s I2C a UART je tento protokol často používán pro mnoho typů periferních zařízení, takže znalost principů fungování SPI je nezbytná pro každého inženýra Arduina. V tomto článku se stručně podíváme na základní principy, schéma interakce a způsob připojení SPI senzorů a obrazovek k Arduinu.

SPI je široce používaný protokol přenosu dat mezi mikrokontrolérem (Master) a periferními zařízeními (Slave). V našich projektech se jako Master nejčastěji používá deska Arduino. Rozhraní SPI vynalezla a používala společnost Motorola, ale postupem času se stalo průmyslovým standardem. Hlavní výhodou práce s tímto rozhraním je jeho vysoká rychlost a možnost připojení více zařízení na jednu datovou sběrnici.

SPI kolíky a kolíky

Komunikace přes rozhraní SPI arduino probíhá mezi několika zařízeními, která jsou umístěna blízko sebe. Desky Arduino jsou vybaveny samostatnými piny pro SPI. Párování probíhá pomocí čtyř kontaktů:

  • MOSI – informace jsou přenášeny touto linkou do Slave z Master.
  • MISO – slouží k přenosu informací do Mastera ze Slave.
  • SCLK – vytváření hodinových impulsů pro synchronní přenos dat.
  • SS – výběr podřízeného zařízení.

Interakce zařízení SPI

Interakce zařízení začíná, když je výstup SS nízký.

Před zahájením práce musíte určit:

  • Od kterého bitu by měl posun začít – od vysokého nebo od nízkého? Pořadí se upravuje pomocí funkce PI.setBitOrder().
  • Určete úroveň, na které by měla být linka SCK při absenci hodinového pulsu. Nastavitelné pomocí funkce SPI.setDataMode().
  • Vyberte rychlost přenosu dat. Určeno funkcí SPI.setClockDivider().

Dalším krokem je určení, v jakém režimu budou informace přenášeny. Volba režimu je určena takovými indikátory, jako je polarita a fáze hodinového pulsu. Pokud je úroveň nízká, zaznamená se 0, vysoká - 1. K dispozici jsou celkem 4 režimy:

  • Režim 0 – SPI_MODE0: polarita (CPOL) 0, fáze (CPHA) 0.
  • Režim 1: polarita 0, fáze 1.
  • Režim 2: polarita 1, fáze 0.
  • Režim 3: polarita 1, fáze 1.

Zpočátku bylo Arduino navrženo tak, aby nejprve přenášelo data s nejvýznamnějším bitem, ale než začnete, musíte si to ujasnit v dokumentaci. Režimy můžete demonstrovat na obrázku.

V rozhraní SPI jsou možné dva typy připojení: nezávislé a kaskádové. V prvním případě při připojování oslovuje Master každý Slave individuálně, ve druhém případě dochází ke spojení po jednom, tzn. kaskáda.

Připojení SPI k Arduinu

Každý model Arduino má své vlastní SPI piny. Tyto závěry:

  • Uno: MOSI odpovídá kolíku 11 nebo ICSP-4, MISO – 12 nebo ICSP-1, SCK – 13 nebo ICSP-3, SS (slave) – 10.
  • Mega1280 nebo Mega2560: MOSI – 51 nebo ICSP-4, MISO – 50 nebo ICSP-1, SCK – 52 nebo ICSP-3, SS (slave) – 53.
  • Leonardo: MOSI – ICSP-4, MISO – ICSP-1, SCK – ICSP-3.
  • Splatnost: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.

Nejnovější řadič Arduino Due rozšiřuje uživatelské možnosti a umožňuje implementovat více úloh než jiné mikrokontroléry. Například je možné automaticky ovládat podřízené zařízení a automaticky volit různé konfigurace (takty, režim atd.).

Knihovna Arduino SPI

Pro práci na Arduinu byla vytvořena samostatná knihovna, která implementuje SPI. Před spuštěním kódu musíte přidat #include pro aktivaci knihovny.

Hlavní funkce:

  • begin() a end() – zapíná a vypíná práci. Během inicializace se na výstupu konfigurují linky SCLK, MOSI a SS, které posílají nízkou úroveň do SCLK, MOSI a vysokou úroveň do SS. Funkce end() nemění úrovně linek, je potřeba vypnout blok spojený s rozhraním na desce Arduino.
  • setBitOrder(pořadí) – nastavení pořadí zasílání informačních bitů (MSBFIRST – priorita nejvýznamnějšího bitu, LSBFIRST – priorita nejméně významného bitu).
  • setClockDivider(divider) – nastavení hlavních frekvenčních děličů hodin. Můžete nastavit dělitele 2, 4, 8, 16, 32, 64 a 128. Zapisuje se následovně - SPI_CLOCK_DIVn, kde n je vybraný dělitel.
  • setDataMode(mode) – výběr jednoho ze čtyř provozních režimů.
  • transfer(value) – přenese bajt z nadřízeného zařízení a vrátí bajt přijatý z podřízeného zařízení.
  • shiftIn(miso_pin, sclk_pin, bit_order) a shiftOut(mosi_pin, sclk_pin, objednávka, hodnota) – přijímání a odesílání dat, lze připojit k libovolným digitálním pinům, ale předtím je musíte sami nakonfigurovat.

Výhody a nevýhody SPI

Výhody rozhraní SPI:

  • Schopnost přenášet velká data, neomezená na 8 bitů.
  • Snadno implementovatelný software.
  • Jednoduchost hardwarové implementace.
  • Je potřeba méně pinů než pro paralelní rozhraní.
  • Pouze rychlost zařízení omezuje maximální taktovací frekvenci.

nedostatky:

  • Velký počet pinů ve srovnání s I2C.
  • Slave nemůže řídit tok informací.
  • Chybí standardní protokol pro detekci chyb.
  • Velké množství způsobů implementace rozhraní.
  • Chybějící potvrzení o přijetí informací.

Příklad použití Arduino SPI v projektu s tlakovým senzorem

K realizaci projektu potřebujeme Arduino, tlakový senzor, prkénko a dráty. Příklad zapojení snímače je na obrázku.

Pomocí senzoru SCP1000 je možné rozpoznat parametry jako je tlak a teplota a tyto hodnoty přenášet přes SPI.

Základní prvky náčrtu programu

Nejprve se do kódu zaregistrují senzorové registry pomocí setup(). Ze zařízení se vrací několik hodnot - jedna v 19 bitech pro přijatý tlak, další v 16 bitech pro teplotu. Poté se načtou dva bajty teploty a tlak se odečte ve dvou fázích. Nejprve program vezme tři nejvýznamnější bity, poté dalších 16 bitů, po kterých se pomocí bitového posunu tyto dvě hodnoty spojí do jedné. Skutečný tlak je 19místná hodnota dělená 4.

const int TLAK = 0x1F; // první fáze stanovení tlaku (jsou detekovány tři nejvýznamnější bity)

const int PRESSURE_LSB = 0x20; // druhý stupeň, který definuje 16 bitů pro tlak

const int TEPLOTA = 0x21; //16 bitů pro teplotu

Ke čtení údajů o teplotě a jejich převodu na stupně Celsia se používá následující prvek kódu:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20,0; // pro určení skutečné hodnoty teploty ve stupních Celsia je potřeba výsledné číslo vydělit 20

Serial.print("Tepl

Serial.print(realTemp);

Čtení tlakových bitů a jejich kombinování:

byte pressure_data_high = readRegister(0x1F, 1);

tlak_data_vysoký &= 0b00000111;

unsigned int pressure_data_low = readRegister(0x20, 2);

dlouhý tlak = ((pressure_data_high<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

Stručné závěry o SPI

SPI štíty a senzory se často nacházejí v projektech Arduino, takže musíte vědět, jak tento protokol funguje. Na připojení zařízení SPI v zásadě není nic složitého. Hlavní věcí je správné připojení vodičů a použití standardních metod knihovny ve správném pořadí. Pro některá zařízení, například SD karty nebo OLED obrazovky, v zásadě neexistují žádné alternativy.

Dobrý den! Dnešní článek je malou teoretickou odbočkou, která nám pomůže zvládnout kurz programování Arduino. Budeme mluvit o rozhraní SPI. Co to je a s čím se jí, na to se pokusíme přijít v tomto článku.

Na začátek definice. SPI(Serial Peripheral Interface - sériové periferní rozhraní) je standard sériového synchronního přenosu dat, který je určen pro komunikaci regulátoru s různými periferiemi. Toto rozhraní je jednoduché a pohodlné. Pro Arduino byla napsána speciální knihovna pro práci s SPI.

Komunikace je založena na principu „master-slave“. Řídicí jednotka je obvykle hlavním zařízením. Všechna ostatní zařízení, která jsou připojena k systému, jsou podřízená. Data z nadřízeného zařízení jsou přenášena přes datovou sběrnici do jednoho z vybraných podřízených zařízení nebo naopak z podřízeného zařízení do nadřízeného synchronně, pomocí hlavního hodinového signálu.

Pinout datové sběrnice SPI se skládá ze 4 řádků: MOSI, MISO, CS a SCLK:

  • MOSI(Master Out Slave In - Master-výstup, Slave-input) nebo jednoduše S.I.– dochází k přenosu dat z hlavního zařízení do podřízeného zařízení.
  • MISO(Master In Slave Out - Master-input, Slave-output) nebo jednoduše TAK– dochází k přenosu dat z podřízeného zařízení do nadřízeného zařízení.
  • C.S.(Chip Select - Chip Selection) nebo SS(Slave Select — Výběr Slave) – výběr podřízeného zařízení.
  • SCLK(Sériové HODINY) nebo jednoduše SCK– přenos hodinového signálu z masteru na slave.

Pro přenos dat z masteru na slave je nutné, aby master nastavil nízkou úroveň signálu na CS lince slave, se kterým hodlá navázat komunikaci. Bity jsou pak přenášeny po lince MOSI. Pro zastavení přenosu dat vedoucí „uvolní“ CS linku a nastaví na ní vysokou úroveň signálu.

Pro připojení několika podřízených zařízení k datové sběrnici SPI musí mít každé z nich vlastní individuální CS linku. Jakmile je toto provedeno, může hlavní zařízení střídavě „tahat“ linky a přepínat mezi podřízenými zařízeními. Více podřízených jednotek může být připojeno různými způsoby: paralelně nebo sériově.

Paralelní připojení slave zařízení přes datovou sběrnici SPI

Zvláštností paralelního připojení několika podřízených zařízení je, že k vytvoření komunikace se používají společné linky SCLK, MOSI a MISO. V tomto případě má každé podřízené zařízení svou vlastní linku SS(CS). Hlavní zařízení určuje, se kterým „aktuálním slave“ se má navázat výměna dat generováním nízké úrovně signálu na odpovídající lince SSn (kde n – 1,2...).

Chcete-li připojit n-čísel podřízených zařízení k řídicí jednotce přes rozhraní SPI, musíte je pro tento účel přidělit n+3 piny mikrokontroléru.

Sériové připojení slave zařízení ke sběrnici SPI

Pokud jde o sériové zapojení podřízených zařízení, používají společné linky SCLK a SS a výstup jednoho je spojen se vstupem druhého. Linka MOSI masteru je připojena k prvnímu slave a MISO linka je připojena k poslední. Pokud se na toto zapojení podíváte z pohledu nadřízeného zařízení, tak jedno podřízené zařízení je připojeno přes datovou sběrnici SPI.

Je třeba poznamenat výhodu tohoto typu připojení: pro tento účel můžete připojit n-tý počet zařízení pouze pomocí 4 pinů mikrokontroléru.

To je prozatím vše, pokračování...

Dnes začínáme naše seznámení s pneumatikou SPI (Serial Peripheral Interface).

Tato sběrnice je velmi široce používána v elektronice. Je velmi pohodlný, protože je synchronní a plně duplexní, proto se používá v mnoha obvodech pro komunikaci mezi různými digitálními zařízeními - senzory, ovladači, ovladači a dalšími zařízeními.

Dalším důležitým faktorem pro potřebu našeho seznámení je, že tato sběrnice je organizována hardwarově v řadičích AVR.

Navíc, ať chceme nebo ne, s rozhraním SPI komunikujeme již delší dobu, jakmile jsme poprvé začali flashovat náš ovladač, jelikož flashuje přes toto rozhraní.

Proto bych rád tuto pneumatiku blíže poznal.

Otevřeme si technickou dokumentaci pro řadič Atmega8, otevřeme stránku, kde je zobrazen vývod tohoto řadiče a uvidíme, že piny 16 až 19 jsou tam, kde jsou umístěny piny sběrnice SPI

Nyní trochu více o těchto zjištěních

SS (výběr čipu)— toto je část výběru zařízení. Pokud je podřízené zařízení na tomto pinu nastaveno na nízkou úroveň, pak toto zařízení bude reagovat a vyměňovat si informace přes sběrnici SPI, pokud je vysoká, nebude.

MOSI (master output slave vstup)- Toto je výstupní kolík hlavního zařízení a vstup podřízeného zařízení.

MISO (hlavní vstup slave výstup)- naopak výstup slave, vstup master.

SCK— synchronizační noha. Všechna zařízení podílející se na výměně informací na této sběrnici jsou zásobována hodinovými impulsy o určité frekvenci.

Zde je schéma implementace sběrnice SPI v řadiči Atmega8

Jako každá sběrnice existuje řada registrů, které uchovávají určité informace.

Máme zájem o SHIFT REGISTER, přes něj dochází k výměně informací. Jakmile je na synchronizačním kolíku určitá hrana, buď sestupná nebo vzestupná, v závislosti na nastavení, tyto registry podřízených a hlavních zařízení si vymění informace, a ne všechny informace, ale pouze jeden bit. Tyto registry se posunou doleva a nejvýznamnější bity z každého registru přejdou do nejméně významných bitů stejného registru přidruženého zařízení. To znamená, že slave přenese svůj nejvýznamnější bit přes MOSI pin vedoucímu, který jej zapíše do uvolněného bitu nižšího řádu kvůli posunu doleva, a slave přenese svůj posunutý bit vyššího řádu přes MISO. pin k bitu nižšího řádu vůdce. Takto probíhá výměna, to znamená, že za 8 celých hodinových cyklů si kompletně vymění bajty

Jakmile je přeneseno všech 8 bitů jednoho bajtu informace, určitý registr nám signalizuje, že tento proces je dokončen. Nebo spíše určitý kousek určitého rejstříku.

Také v blokovém schématu vidíme dělič, na jehož vstup jsou přijímány hodinové impulsy a poté, dělené určitou hodnotou, jsou posílány řetězem na pin SCK a odtud jsou přiváděny do slave zařízení na pinu stejné jméno. Tím je zajištěn synchronizovaný provoz zařízení. Hodinová frekvence se volí z nejnižší podporované všemi zařízeními účastnícími se ústředny.

Říkám množné číslo, protože na daném okruhu může být více než jen dvě zařízení. Jak je to zajištěno, za předpokladu, že zařízení nemají žádné adresy, vám nyní prozradím.

Existuje několik způsobů výměny informací mezi několika zařízeními, to znamená, když na jedno hlavní zařízení připadá několik podřízených zařízení. Podíváme se na dva nejčastější z nich.

První metoda je radiální (kliknutím na obrázek obrázek zvětšíte)

Zde master nasměruje data na konkrétní zařízení a na pinu SS zapne logickou 0. Při této metodě je možné vybrat pouze jedno zařízení, budete potřebovat i několik volných pinů portů ovladače.

Existuje ještě jedna zajímavá metoda - prsten nebo kaskáda (kliknutím na obrázek obrázek zvětšíte)

Zde vidíme, že výběrové nohy jsou všechny paralelní a výměna probíhá v kruhu. Rychlost se tedy snižuje díky tomu, že se zvětšuje okruh přenosu, ale nohy portu jsou ušetřeny.

To vše si podrobněji prostudujeme v dalších lekcích, kdy určitá zařízení použijeme v našich projektech.

No, vypadá to s obvody přenosu dat po sběrnici SPI přišli jsme na to.

Nyní pojďme zjistit, jak tento proces řídit na úrovni hardwarových registrů řadiče AVR.

Tyto registry vidíme v blokovém schématu výše na stránce.

Atmega8 má následující registry pro obsluhu sběrnice SPI.

SPDR (registr dat SPI)- datový registr, v blokovém schématu je to DATA BUFFER. Do tohoto registru zadáme bajt pro jeho následný přenos do slave zařízení a z něj načteme bajt informace, která přišla z slave zařízení. Není také nutné, aby náš ovladač byl hlavním zařízením. Následně sestavíme obvod ze dvou ovladačů, z nichž jeden bude slave. Takže právě v tomto registru bude umístěn bajt pro odesílání i přijímání.

SPCR (kontrolní registr SPI)- kontrolní registr

Tento registr obsahuje následující bity:

SPIE (Povolit přerušení SPI)- bit, který umožňuje přerušení.

SPE (povolit SPI)— bit, který umožňuje sběrnici SPI.

DORD (objednávka dat)— bit, který nastavuje pořadí, ve kterém se bity odesílají.Pokud je nastaven na 1, pak se jako první odešle nejméně významný bit, pokud je nastaven na 0, odešle se nejvýznamnější bit.

MSTR (výběr Master/Slave)— bit, který označuje zařízení jako master nebo slave. Když je tento bit nastaven na 1, zařízení bude master.

CPOL (Polarita hodin)— polarita synchronizace, určuje, na jaké hraně synchronizačního impulsu bude spuštěn pohotovostní režim

Pokud je tento bit 1, pak budeme mít pohotovostní režim se vzestupnou hranou a pokud je 0, pak se sestupnou hranou.

CPHA (fáze hodin)— bit zodpovědný za fázi hodin, to znamená, na které hraně bude bit přenášen.

Podívejme se na diagramy přenosu dat v závislosti na instalaci CPOL a CPHA

To je taková zajímavá závislost. Někdy v technických vlastnostech zařízení někdy vidíme, že může pracovat například v režimu SPI 0:0 a SPI 1:1, a to je přesně to, co se týká nastavení těchto bitů.

SPR1, SPR0 (volba frekvence hodin SPI)- jedná se o bity zodpovědné za hodnotu synchronizačního frekvenčního děliče, spolupracují s bitem SPI2X nachází ve stavovém registru. Je také řídicí, protože osm bitů v řídicím registru na všechna nastavení nestačilo a ve stavovém registru je mnoho volných.

SPSR (registr stavu SPI)- stavový registr

SPI2X (Double SPI Speed ​​​​Bit)- bit, který zdvojnásobuje rychlost, pracuje ve spojení s bity SPR1 a SPR0 řídicího registru.

Podívejme se na závislost frekvence na těchto třech bitech

SPIF (příznak přerušení SPI)— Příznak přerušení. Čekáme, až bude tento bit nastaven na jedničku. když obdržíme bajt. Jakmile se bajt z jiného zařízení objeví celý v našem bufferu, bude tento příznak nastaven. Tento příznak funguje pouze v případě, že je nastaven bit, který povoluje přerušení, stejně jako jsou povolena globální přerušení.

WCOL (Write COLlision Flag)— příznak konfliktu nebo kolize bude nastaven, pokud během přenosu dat dojde ke konfliktu bitů, pokud během přenosu dat dojde k pokusu o zápis do datového registru.

Nyní již můžeme říci, že jsme se s rozhraním SPI trochu seznámili.

Podívejte se na VIDEONÁVOD(klikněte na obrázek)

Zobrazení příspěvku: 6 294

S jmenovitými hodnotami od 10 Ohm do 1 MOhm);

  • spojovací vodiče (například je to dobrá sada);
  • osobní počítač s vývojovým prostředím Arduino IDE.
  • 1 Popis seriálu SPI rozhraní

    SPI – sériové periferní rozhraní nebo „sériové periferní rozhraní“ je protokol pro synchronní přenos dat pro párování hlavní zařízení S periferní zařízení (Slave). Hlavním zařízením je často mikrokontrolér. Komunikace mezi zařízeními probíhá přes čtyři vodiče, a proto se SPI někdy nazývá „čtyřdrátové rozhraní“. Jedná se o pneumatiky:

    Existují čtyři režimy přenosu dat ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), způsobené kombinací polarity hodinových pulsů (pracujeme na úrovni HIGH nebo LOW), Polarita hodin, CPOL a fázi hodinových impulsů (synchronizace na vzestupné nebo sestupné hraně hodinového impulsu), Fáze hodin, CPHA.

    Obrázek vysvětluje tuto tabulku.

    Rozhraní SPI poskytuje několik možností pro připojení podřízených zařízení: nezávislý A kaskáda. Při nezávislém připojení ke sběrnici SPI přistupuje hlavní zařízení ke každému podřízenému zařízení samostatně. Při kaskádovém zapojení fungují podřízená zařízení jedno po druhém, jakoby v kaskádě.


    Typy připojení zařízení pro provoz přes rozhraní SPI: nezávislé a kaskádové

    2 Implementace rozhraní SPI na deskách rodiny Arduino

    V Arduinu jsou sběrnice rozhraní SPI umístěny na konkrétních portech. Každá deska má své vlastní přiřazení pinů. Pro usnadnění jsou závěry duplikovány a také umístěny na samostatné ICSP konektor(V Circuit Serial Programming, programování zařízení zahrnutého v obvodu pomocí sériového protokolu). Vezměte prosím na vědomí, že konektor ICSP nemá pin pro výběr podřízeného zařízení - SS, protože předpokládá se, že Arduino bude použito jako master zařízení v síti. Ale v případě potřeby můžete přiřadit jakýkoli digitální pin Arduina jako SS.

    Obrázek ukazuje standardní shodu pinů na sběrnici SPI pro Arduino UNO a Nano.


    3 Knihovna pro práci s rozhraním SPI

    Pro Arduino byla napsána speciální knihovna, která implementuje protokol SPI. Propojuje se takto: na začátku programu přidáme #include SPI.h.

    Chcete-li začít používat protokol SPI, musíte provést nastavení a poté protokol inicializovat pomocí postupu SPI.beginTransaction(). Můžete to udělat pomocí jedné instrukce: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    To znamená, že inicializujeme protokol SPI na frekvenci 14 MHz, přenos dat probíhá od MSB (nejvýznamnější bit), v režimu SPI_MODE0.

    Po inicializaci vyberte podřízené zařízení posunutím odpovídajícího kolíku SS do stavu NÍZKÝ.

    Poté příkazem přeneseme data do podřízeného zařízení SPI.transfer().

    Po přestupu vracíme RZ do stavu VYSOKÝ.


    Práce s protokolem je ukončena příkazem SPI.endTransaction().

    Je vhodné minimalizovat dobu přenosu mezi instrukcemi SPI.beginTransaction() a SPI.endTransaction(), abyste předešli problémům, pokud se jiné zařízení pokusí zahájit přenos dat pomocí jiného nastavení.

    4 Připojení posuvného registru na Arduino

    Uvažujme o praktické aplikaci rozhraní SPI. LED budeme svítit ovládáním 8bitového posuvného registru přes sběrnici SPI. Pojďme se připojit k Arduinu posuvný registr 74HC595. Ke každému z 8 výstupů registru připojíme přes omezovací rezistor LED s nominální hodnotou 220 Ohmů. Schéma je znázorněno na obrázku.


    5 Náčrt pro ovládání posuvného registru přes rozhraní SPI

    Napíšeme takový náčrt.

    #zahrnout const int pinSelect = 8; // registrace vybrat pin void setup() ( SPI.begin(); // inicializace rozhraní SPI pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // výběr podřízených zařízení (registrace) SPI.transfer(0); // vymazání obsahu registru digitalWrite(pinSelect, HIGH); // konec přenosu Serial.begin(9600); } void loop() ( pro (int i=0; i)

    Nejprve připojíme knihovnu SPI a inicializujeme rozhraní SPI. Definujme kolík 8 jako kolík výběru SS slave. Vyčistíme posuvný registr odesláním hodnoty „0“. Inicializujte sériový port.

    Chcete-li rozsvítit konkrétní LED pomocí posuvného registru, musíte na její vstup použít 8bitové číslo. Například, aby se rozsvítila první LED, dodáváme binární číslo 00000001, pro druhé - 00000010, pro třetí - 00000100 atd. Tato binární čísla po převodu do desítkové číselné soustavy tvoří následující sekvenci: 1, 2, 4, 8, 16, 32, 64, 128 a jsou to mocniny dvou od 0 do 7.

    V souladu s tím v cyklu smyčka() Na základě počtu LED přepočítáme z 0 na 7. Funkce pow (základ, stupeň) Zvýší 2 na výkon čítače smyčky. Mikrokontroléry nepracují s čísly typu „double“ příliš přesně, proto použijeme funkci zaokrouhlení pro převod výsledku na celé číslo kolo(). A výsledné číslo přeneseme do posuvného registru. Pro přehlednost zobrazuje monitor sériového portu hodnoty získané během této operace: Jednotka „proběhne“ výboje – LED se rozsvítí vlnově.

    6 "běžící vlna" z LED diod

    LED se rozsvěcují jedna po druhé a my pozorujeme běžící „vlnu“ světel. LED se ovládají pomocí posuvného registru, ke kterému jsme se připojili přes rozhraní SPI. Výsledkem je, že k ovládání 8 LED jsou použity pouze 3 Arduino piny. Pokud bychom připojovali LED přímo k digitálním portům Arduina, museli bychom pro každou LED použít samostatný port.

    Studovali jsme nejjednodušší příklad Arduina pracujícího se sběrnicí SPI. Podrobněji se obsluhou více posuvných registrů s nezávislým a kaskádovým zapojením budeme zabývat v samostatném článku.