SPI - definice SS pinu

Odpovědět
Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

SPI - definice SS pinu

Příspěvek od Axamith » 19 úno 2019, 11:36

Řeším připojení více periferií komunikující přes SPI rozhraní. Peru se s CS (SS) pinem a určením, které zařízení má zrovna komunikovat. Zde je problematika komunikace SPI pěkně popsána. Cituji:
MISO (Master In Slave Out) – na tomto portu SLAVE vysílá, MASTER přijímá
MOSI (Master Out Slave In) – na tomto portu MASTER vysílá, SLAVE přijímá
SCK (Serial Clock) – na tomto portu běží něco jako hodiny a určuje rychlost komunikace. Tento port řídí vždy pouze MASTER a tedy není potřeba SLAVE synchronizovat
SS (Slave Select) slouží k výběru zařízení, se kterým bude komunikovat MASTER. Pokud je ve stavu HIGH, nereaguje SLAVE na příkazy, pokud je LOW ví SLAVE, že data jsou pro něj.
Procházel jsem různé příklady a fóra, ale nenašel jsem konečnou odpověď, jak definovat komunikační SS pin konkrétního zařízení.
Např. zde je příklad SD karty a příkaz

Kód: Vybrat vše

// nastavení pinu CS pro SD kartu - pevně dané shieldem
const int sd_CS = 10;
Takže definuji pin 10 pro komunikaci s kartou.

Pročetl jsem si originální dokumentaci k SPI a v rozšířeném nastavení je uveden příklad nastavení SS pinu:

Kód: Vybrat vše

void setup(){
  // initialize the bus for a device on pin 4
  SPI.begin(4);
  // initialize the bus for a device on pin 10
  SPI.begin(10);
}
Proč se nepoužívá v potřebě komunikace na konkrétním pinu pouze příkaz

Kód: Vybrat vše

SPI.begin();
Mohu jako SS definovat jakýkoliv volný digitální pin?

Wojta
Příspěvky: 184
Registrován: 22 črc 2017, 16:39
Reputation: 0

Re: SPI - definice SS pinu

Příspěvek od Wojta » 19 úno 2019, 16:14

Úplně jednoduše SS může být jakýkoliv pin.

Pokud se nepletu tak specifikace pinu v begin() je pro mód kdy je Arduino slave. Pokud je v tomhle módu, používat se SS pin megy tak jak je vysvětleno, tedy nějaký master jím ovládá Arduino (které je pro něj slave). Možná je tam ale někde uvnitř fce která sama zajistí správné úrovně na pinu SS který jsi definoval v begin() při odesílání a přijímání dat, přiznám se že nevím.

Pokud je Arduino master, můžeš si definovat jakýkoliv jako ten který bude ovládat SS určitého slave zařízení. Může jich být kolik chceš, podle toho s kolika zařízeními na SPI potřebuješ komunikovat. Pak jen ve svém programu musíš ošetřit kdy má jaký pin jaký stav.

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: SPI - definice SS pinu

Příspěvek od Axamith » 20 úno 2019, 08:04

V mém případě bude arduino master a budu mít tři zařízení slave:
  • SD karta
  • ethernet modu
  • RFM 69
Samostatně mi fungují, společně jsem je nerozchodil.Tak jsem začal pročítat, co a jak nastavit. Došel jsem právě k definici SS pinu, princip chápu.
Jde mi o to, jak definovat, které zařízení bude mít SS na kterém pinu a jak je přepínat. Ono to zřejmě bude mít vazbu na konkrétní knihovny, ale jejich procházením jsem nezmoudřel.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: SPI - definice SS pinu

Příspěvek od gilhad » 20 úno 2019, 11:42

Jak ukazuji priklady https://www.arduino.cc/en/Tutorial/Baro ... sureSensor a https://www.arduino.cc/en/Tutorial/DigitalPotControl

je na uzivateli, aby si sam zvolil SlaveSelect pin pro danou periferii a sam je zodpovedny za to, aby ho pred prenosem nastavil na LOW a po prenosu na HIGH.

SPI probiha tak, ze uzivatel vybere danou priferii (tedy ji na jeji CS pin nastavi LOW, tim ze ho zapisen a SlaveSelect pin ktery si pro danou periferii zadefinoval a pripojil ho k CS pinu te periferie), potom proste zavola SPI.transfer(..) a ten si se zarizenim vymeni jeden (nebo v pripade transfer16 2 a v pripade bufferu size) byte - proste to vysle po MOSI/MISO/SCK a nestara se, kdo posloucha a kdo odpovida. Nasledne uzivatel zarizeni zase odpoji nastavenim SlaveSelect pinu na HIGH (cimz se na zarizeni nastavi jeho ChipSelect na HIGH a ono prestane komunikovat).

DUE ma navic ty extended settings, kde se diky jinemu HW chova i jinak nez klasicke UNO, ale melo by jit pouzivat i kompatibilne,

Takze pokud si ridis komunikaci sam, tak muzes pripojit tech zarizeni tolik, kolik dokazes ovladat volnymi piny (coz muzou byt klidne desitky, pokud pouzijes napriklad nejaky shiftregister, nebo jinou vychytavku, s klasickym UNO mas 6 analogovych a 9 digitalnich pinu pro adresovani a jak si to zaridis e na tobe)

Pokud pro komunikaci pouzivas nejakou knihovnu, pak ji bud musis rict, ktery pin ma pouzivat pro slaveselect, nebo to ma natvrdo zadratovane uvnitr, nebo to naopak nastavujes ty zvenku - to uz zalezi na te ktere knihovne. (procti si k ni dokumentaci, nebo zdrojaky).

Pokud ma knihovna priklad pouziti, kde nastavis slave select, tak ho muzes nastavit na libovolny volny pin a je na tobe, abys zaridil, ze pro to zarizeni ten pin poveden a spravny pin zarizeni.

Pokud pouzivas shield, tak tam je to dano zapojenim toho shieldu, ktery pin shiledu jde na ktery pin toho obvodu na nem. Pokud se ti shiledy v tomto netlucou, skvele, pokud se tlucou, tak si musis pomoct jinak - bude je pripojis dratama a povedes si je jak potrebujes, nebo na tom shieldu prerusis ten spoj pro slave/chip-select a pritahnes si ho jinam.

Se shildama si ten pin musis nastavit v programu podle zapojeni toho shieldu.

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: SPI - definice SS pinu

Příspěvek od Axamith » 20 úno 2019, 11:52

Děkuji za detailní vysvětlení. Snad se s tím už poperu.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: SPI - definice SS pinu

Příspěvek od gilhad » 20 úno 2019, 12:15

Drzim palce.

Arduino a vsechny ty serepeticky pro nej jsou vyhodny obchodni artikl, kde za prijatelnou cenu zacatecnik rychle dostane neco, co nejak funguje, kdyz nechce nic sloziteho a nevi co a jak - takze blikat si diodou, merit jednu teplotu, ovladat jednu obrazovku prima, proste koupis, zastrcis, zkopirujes cosi z netu a ono to neco. Hura, uz mi to neco dela!

(A tak to taky bylo zamysleno - snizit prah pro vstup za cenu znacnych zjednoduseni a nevyuziti potencialu.) Obchodnici to taky miluji, kdyz na neco muzou dat nalepku "for arduino" tak to hned prodaji za dvojnasobnou cenu a furt to mraky lidi koupi, ze to stoji jako hamburger (ci hamburger menu nebo dve) a kdyz to rozbijou, tak proste koupi nove. (A vyrobci taky, nepotrebuji extra kvalitu, odruseni, presne specifikace, takze to delaji jednoduse, nepresne a levne ve velkem mnozstvi - dokud se blika diodou, tak projdou i strasne prasarny)

Kdyz chces delat neco slozitejsiho, tak pomerne rychle na tyhle berlicky narazis a zacnou ti prekazet ... ale on ten chip je fakt dobry a na te desticce neni skoro nic (krystal, USB, stabilizator a par kontaktu), takze se to da pouzit i lepe (ale sloziteji), jen je poterba se s tim naucit a ztratit ostych z toho, ze delas neco jinak, nez podle slabikare. (Jo, taky jsem zacinal jezdit ve slapacim auticku, pak na trikolce, pak na kole s pomocnyma koleckama a pak na poradnem kole - ted uz bych se na kole s koleckama asi prerazil, ale tehdy to smysl melo)

Takze pokud budes muset hrabnout do zapojeni shieldu, tak proc ne, zaplatitl sis ho, je tvuj, delej si s nim co chces, jen potrebujes vedet, co delas. Neni to zadna posvatna nedotknutelna krava :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů