SPI - upresnenie

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

SPI - upresnenie

Príspevok od používateľa romiadam » 17 Aug 2021, 11:02

Cavte.

Mam dilemu. Uz teoreticky viem vsetko o SPI, len stale nechapem prakticky ako funguje samotna komunikacia.

Jeden na youtube hovori ze sa z master posle do Slave 8 bitova instrukcia napr nacitaj byte 2 a ked sa buffer vyprazdni, tak sa potom sleduje sa RC flag bit a prijate data sa vycitajy z bufferu. Cize najprv sa posle ziadost co chce master vycitat zo slave a potom slave posle odpoved. Toto mi je logicke.

Lenze potom sa tam objavi druhy chlapik a ten tvrdi ze SPI je full duplex komunikacia a prebieha simultánne (naraz). Ze pri kazdom clock pulze jeden bit z master odide do slave a zaroven zo slave do master, nakolko buffer registre su prepojene. Teda po 8 clock pulzoch si bufre vymenili data. Aj toto chapem. Ale nechapem potom co mi slave posiela, ked este nevie o od neho chcem a ktory z tychto tvrdeni je skutocnost.

Takze ako to je? Vie mi to niekto vysvetlit? Dakujem.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
Radus
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1497
Dátum registrácie: 27 Okt 2009, 00:00
Bydlisko: Prešov
Vek: 42

Re: SPI - upresnenie

Príspevok od používateľa Radus » 17 Aug 2021, 11:24

Áno presne tak, je to full duplex. Celú komunikáciu si musíš vysledovať v DS od zariadenia s ktorým komunikuješ, lebo sa to kus od kusu líši.
Napríklad tuším CC1101 vysielala hneď ako prvé stavový bajt, takže ty si napríklad posielal inštrukciu ale spatne sa ti hneď vrátil stavový bajt ktorý si mohol použiť na kontrolu stavu... ale ako som písal, líši sa to od súčiastky k súčiastke...
Prílohy
To zakrúžkované je status bajt...
To zakrúžkované je status bajt...
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: SPI - upresnenie

Príspevok od používateľa maskrtnik01 » 17 Aug 2021, 11:33

Alebo častý prípad je ešte, že proste posiela nejaké dummy dáta, resp. ignoruje prichádzajúce dáta počas vysielania odpovede.
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: SPI - upresnenie

Príspevok od používateľa romiadam » 17 Aug 2021, 14:42

Takze ak ja dam v master do buffera 8bitovu instrukciu napr. read adresu 0x04 v slave, tak tak master vygeneruje 8 clk pulzov (tu sa naskyta otazka ako mi slave posle odpoved lebo pocas tych 8 clk pulzov mi posle dummy data) alebo 16 clk pulzov (druhych 8 na prijem odpovede os slave)?

Asi si to budem musiet odskusat a posledovat signaly ako sa to chova. Pozriem sa este raz aj do DS slave ako je to tam popisane. Vecer sa ozvem co som zistil.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: SPI - upresnenie

Príspevok od používateľa maskrtnik01 » 17 Aug 2021, 14:50

No keď pošlete jeden bajt, tak vygeneruje 8 pulzov. Kvôli príjmu bude treba poslať jeden dummy bajt.

Najlepšie neodhadovať a pozrieť konkrétny datasheet čo tam chce mať.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: SPI - upresnenie

Príspevok od používateľa peterple » 17 Aug 2021, 20:32

V tej tvojej prvej otázke. Ten prvý hovorí polopravdu. Ten druhý to popisuje presne. SPI je naozaj full duplex a každým CLK sa pošle jeden bit. Komunikácia sa zaháji tak že pán dá otrokovi CS do aktívneho stavu. To spôsobí to že interná logika otroka sa vynuluje do východiskového stavu a jeho SO sa prepne z vysokej impedancie do výstupného režimu. Potom sa každou hranou posúvajú bity súčasne od pána k otrokovi a samozrejme aj opačne. Či má ten prvý byte od otroka nejaký zmysel alebo nie je dané tým čo je to za bazmek a je to popísané v DS.
Samozrejme ak chce pán prijať nejaké data z otroka po nejakom úvodnom komande tak musí posielať tzv dummy data. V princípe je jedno čo sa pošle. Zvykom býva poslať samé jednotky.
Ono ak by pán nič neposlal tak nepošle nič ani otrok, lebo by tam neboli žiadne hodiny. Kto je pán ten cvičí s hodinami. Otrok sa nimi musí riadiť.
Na konci sa deaktivuje CS a tak otrok sklapne a už je ticho a zvyčajne aj v power down mode.
2
Obrázok 2
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: SPI - upresnenie

Príspevok od používateľa romiadam » 18 Aug 2021, 01:16

Super, teraz to uz chapem. Diki vsekym za info. Peterple za tym dal peknu bodku.

O tych dummy byte-toch nikde vacsinou nerozpravaju, tak mi to neako neslo do hlavy. To si pekne vysvetlil
Samozrejme ak chce pán prijať nejaké data z otroka po nejakom úvodnom komande tak musí posielať tzv dummy data. V princípe je jedno čo sa pošle. Zvykom býva poslať samé jednotky.
Ono ak by pán nič neposlal tak nepošle nič ani otrok, lebo by tam neboli žiadne hodiny. Kto je pán ten cvičí s hodinami.
Momentalne som pozeral datashee RTC . Tu mi chybali pre pochopenie 1 Dummy a 2 Dummy.
image.png
Cize v Masteri pre istoru vypazdnim buffer (obsah zahodim) a zapisem do buffera prvy bajt, co je 7bit-ova adresa adresa, kde sa 8-mi bit (MSB) nastavi na READ "0", a zacne sa o posiela. Zaroven prijmem od Slave Dummy data. Tieto Dummy data vycitam z Bufera (zahodim) a zapisem do buffera 1 Dummy (1111 1111). Po odoslani 1 dummy zaroven prijmen pozadovane data od slave kore vycitam z bufera, ulozim a zase zapisem 2 dummy (1111 1111) do buffera a takto pokracujem potom az kym sa prijmu vsetky pozadovane data a potom sa deaktivuje E. Tak je to?

Este jedna otazocka, Dummy bajt potom musi byt tiez nastaveny ako READ alebo tam je to uz jedno?
image.png
Tu je READ definovany ako "0". Cize moj Dummy bajt musi byt 0111 1111 alebo mozu byt 1111 1111, nakolko E ostalo v "0" , prikaz uz dostal a teda mu je to jedno? Samozejme ak sa deaktivuje E tak zase treba poslat READ prikaz s adresou, to mi je jasne.

Len pre info dodavam aj WRITE. Toto mi bolo od zaciatku jasne.
image.png
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Používateľov profilový obrázok
Radus
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1497
Dátum registrácie: 27 Okt 2009, 00:00
Bydlisko: Prešov
Vek: 42

Re: SPI - upresnenie

Príspevok od používateľa Radus » 18 Aug 2021, 08:45

Peterple je macher, čo dodať :)
U Dummy bajte už na hodnote nezáleží, pokiaľ to teda v DSku neieje popísané inak. V tvojom prípade to je jedno, dôležitý je hodinový vstup, pomocou neho vysúva slave(otrok) na výstup požadované data...
0
Naposledy upravil/-a Radus v 18 Aug 2021, 20:43, upravené celkom 2 krát.

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: SPI - upresnenie

Príspevok od používateľa peterple » 18 Aug 2021, 20:20

To čítanie je tak ako si popísal. Dummy byte môže byť hocičo. Jediné s čím nesúhlasím sú tie vlčie zuby (červené) čo si dokreslil do obrázka. Ono tam bude to čo je tam nakreslené ak pošleš ako dummy 0xFF alebo 0x00. V prvom prípade platí tá horná čiara. V druhom prípade tá spodná. Impulzy by tam boli iba keby si posielal nejakú divočinu, napr 0x55.

Ešte poopravím jednu informáciu z môjho príspevku. Písal som že SO otroka sa dá do výstupného režimu ak sa dá CS (E) do aktívneho stavu. Ako je vidno z obrázka z DS môže toto nastať až po prijatí príkazu. O to zaujímavejšie potom je, čo prijme pán ako ten prvý byte, keďže nikto mu neriadi MISO. V takomto prípade je dobré aby MISO malo pull up aby to nebralo blbosti z luftu. Síce vieme že ten bajt treba ignorovať ale elektricky to nie je kóšer aj keď tam zrovna nič nehorí. Nezapojené vstupy v číslicovke by nemali byť. Je to značka amatérizmu autora obvodového návrhu.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Radus
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1497
Dátum registrácie: 27 Okt 2009, 00:00
Bydlisko: Prešov
Vek: 42

Re: SPI - upresnenie

Príspevok od používateľa Radus » 18 Aug 2021, 20:39

Teraz som sa zase stratil ja :) Komunikaciu zacnes aktivaciou CS, posles napr adresny bajt a dummy bajt na MOSI, a z MISO vycitas 2 bajty, prvy odignorujes, nasledne deaktivujes CS. Kedy bude linka neriadena?
//...docvaklo, myslis stav high impedance...ok, pravda...
0

romiadam
Ultimate člen
Ultimate člen
Príspevky: 4417
Dátum registrácie: 09 Apr 2008, 00:00
Bydlisko: Wicklow, Irsko
Vek: 47

Re: SPI - upresnenie

Príspevok od používateľa romiadam » 19 Aug 2021, 08:20

Dakujem za upresnenie.
Tie vlcie zuby (Dummy1 a Dummy2) mala to byt kopia toho co je pred tym, dokeslil som to narychlo. Mali to byt tie sestuholnik, (hocico co sa posle).
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje

Napísať odpoveď