STM32, SPI daisy chain

Petr Labaj labaj na volny.cz
Čtvrtek Květen 25 00:09:24 CEST 2023


Ad fixní délka:
Pravidlo: žádný zákazník nikdy dopředu pořádně neřekne, co všechno dříve 
či později bude potřebovat.
Takže vždy je třeba myslet na pozdější rozšiřitelnost.

Ad vstup dat:
Ale jak daný slave ví, co budou poslední data? Vy počítáte s tím, že on 
všechno pochytá do bufferu a teprve z něho to zpětně přečte?
Můj způsob je zcela dynamicky. Posílej co chceš, kolik chceš, komunikuj 
jednosměrně nebo obousměrně, měj jednoho nebo 20 slaves - prostě cool & 
free.

Ad mezikontinentální rakety:
Dva týpci s klíčema je starý způsob. Nejsou lidi, chlapi utíkají před 
odvodní komisí. A ti, co už tam jsou, utečou strachem před protiúderem.
Takže rakety je třeba startovat přes SPI.

Ad můj způsob:
Timery netřeba. DMA jen tehdy, když bude komunikace rychlá. Ale to je 
stejné jako u Vás.
Jediné, co je navíc, jeden výstupní GPIO pin.
Odměnou za to je téměř neomezený systém.

PL

PS. ARCnet je (byl) moje srdeční záležitost. Psal jsem pro něho drivery 
ještě do komerčních Unixů, před érou Linuxu.
Myslím, že jsem tehdy postavil největší ARCnetové sítě v tehdejším 
Československu.

**********************

Dne 24.5.2023 v 23:34 wek napsal(a):
> --- moj
> Uloha znela, fixna dlzka spravy.
>
> Variabilnu dlzku ste si vymysleli Vy, asi by to slo u mna riesit s 
> nejakymi rozumnymi obmedzeniami ale naco.
>
>
> > Jak daný slave pozná, že data, která mu lezou do vstupu, jsou pro něho?
>
> Posledna sprava je pre neho.
>
> > Do vstupu mu jde celý vláčik, a on neví, kolik je slaves
>
> Nepotrebuje to vediet, "posledna" je jednoznacne.
>
>
> Medzikontinentalne rakety s hlavicami sa nestartuju cez SPI, ale  tak, 
> ze dvaja tipkovia naraz otocia klucikom.
>
>
> --- Vas
> Poziadavka znela, cela transakcia prebehne v hardware. Ten Vas postup 
> v hardware date len za cenu pinov, timerov a DMA naviac, a mate 
> obmedzenie na rychlost SPI (lebo master musi robit medzery medzi 
> kazdym byte, kedze nevie, kedy nastava "prehodenie slave").
>
> Ani verzia s fixnou dlzkou spravy nie je uplne jednoducha a asi bez 
> pinu a timera naviac sa neda urobit v hw.
>
> Vyhodou je mensia spotreba RAM, ale podla zadania ide o 64B (teda v 
> mojom rieseni 72B).
>
> wek
>
>
>
> On 24 May 2023 22:51:46 CEST, Petr Labaj <labaj na volny.cz> wrote:
>
>     Váš:
>     Jak daný slave pozná, že data, která mu lezou do vstupu, jsou pro
>     něho? Do vstupu mu jde celý vláčik, a on neví, kolik je slaves a
>     jak dlouhé zprávy posílají.
>     Takže ve výstupních datech některého předchozího slave může být
>     obsah, který on vyhodnotí jako příkaz "odstartuj mezikontinentální
>     střely s jadernými hlavicemi".
>
>     Můj:
>     - každý slave testuje, kdy mu CS_IN spadne do neaktivního stavu, v
>     té chvíli shodí své CS_OUT do neaktivního stavu a zapne své SPI
>     - start jednoho kola komunikace - master nahodí CS (předtím byl
>     neaktivní)
>     - první slave přijímá a vysílá data, libovolně dlouho, podle své
>     potřeby
>     - až dokončí svou komunikaci, nahodí CS_OUT a vypne své SPI
>     (master má stále CS aktivní, teď už má trvale aktivní CS_OUT i
>     tento první slave)
>     - druhý slave je teď naadresován (do jeho CS_IN jde CS_OUT toho
>     předchozího)
>     - druhý slave přijímá a vysílá data, libovolně dlouho, podle své
>     potřeby, až skončí, nahodí své CS_OUT a vypne své SPI, čeká až mu
>     vstup CS_IN spadne do neaktivního stavu
>     - totéž pro 3. až N-tý slave
>     - až takto server obslouží všechny své slavesy, tak shodí svůj
>     výstup CS a tím se celý řetězec připraví na další kolo
>
>     Dokonce by ani master nemusel vědět, kolik má slavesů. Stačilo by,
>     kdyby do nějakého jeho GPIO vstupu vedl CS_OUT posledního slave v
>     řetězci.
>     Pak podobně jako u ARCnetu. Když by obsloužil všechny, které si
>     myslí že má v řetězci, ale nedorazil by mu signál na ten GPIO
>     vstup (tj. někdo přidal do řetězce další slave nebo je porucha),
>     tak by master poslal na sběrnici speciální zprávu "kdo tu je, ať
>     se přihlásí".
>
>     PL
>
>     *********************
>
>     Dne 24.5.2023 v 22:01 wek napsal(a):
>>     --- moj
>>
>>     Ocislujme master=0, slave=K=1..N, pricom maximalne moze byt
>>     slavov M, N<=M.
>>
>>     U mna master vysle vlacik sprav v opacnom poradi, t.j. prva
>>     sprava je pre M, druha pre M-1, ..., posledna pre 1, oznacme
>>     (M)(M-1)...(2)(1).  Prvy slave na zaciatok vlacika prihodi svoju
>>     spravu pre mastra, oznacme ju [1], a z konca si odstrihne spravu
>>     co posiela master jemu, t.j.(1). Druhemu uz teda pride sprava
>>     [1](M)(M-1)...(2). Urobi to iste, prida na zaciatok [2] a z konca
>>     sa necha (2), takze tretiemu pride [2][1](M)(M-1)...(3), atd.
>>
>>     Kazdy slave teda na konci vlacika najde spravu od mastra jemu, a
>>     mastrovi pridu spravy od vsetkych slave v tvare
>>     [N][N-1]...[2][1](M)(M-1)...(M-N).
>>
>>     --- Vas
>>
>>     > První slave dostane "peška" (token) a komunikuje po SPI tak
>>     dlouho, jak potřebuje.
>>     > Až si vyřídí svoje, tak pošle peška dál.
>>
>>     Problem je v tom, ze o tom, ako dlho komunikuje K-ty slave
>>     nerozhoduje on, ale ten, kto ho drzi za CS=NSS, t.j. K-1. A
>>     pritom K ani nema moznost povedat tomu K-1, ze hotovo, lebo K-1
>>     ma vtedy neaktivne NSS, cize nepocuva.
>>
>>     wek
>>
>>
>>     On 24 May 2023 18:34:03 CEST, Petr Labaj <labaj na volny.cz> wrote:
>>
>>         Asi jsem natvrdlý, ale jak to bude umožňovat obousměrnou
>>         komunikaci? Do vstupu dat jednoho slave přece vede výstup
>>         toho předchozího. Takže Vaší metodou master nemůže poslat co
>>         chce kam chce. Ano, u mě každý může používat různě dlouhá
>>         data, aniž o tom ostatní ví. Tedy samozřejmě to musí vědět
>>         master, protože ten mu ta data připravuje a posílá. Princip
>>         je jednoduchý a používá se ledaskde (Token Ring, ARCnet,
>>         LEDky WS2812 atd.). První slave dostane "peška" (token) a
>>         komunikuje po SPI tak dlouho, jak potřebuje. Až si vyřídí
>>         svoje, tak pošle peška dál. PL ******************** Dne
>>         24.5.2023 v 18:14 Jan Waclawek napsal(a):
>>
>>                 Zejména umoľňuje obousměrný provoz 
>>
>>             Aj tato metoda umoznuje obojsmernu prevadzku.
>>
>>                 a kaľdý slave můľe pouľívat jinak dlouhá data. 
>>
>>             Bez toho aby o tom vsetci dopredu vedeli? Ak o tom vsetci
>>             dopredu vedia, aj tato metoda moze pouzivat rozne dlhe
>>             data. wek ----- Original Message --------------- Subject:
>>             Re: STM32, SPI daisy chain From: Petr Labaj
>>             <labaj na volny.cz> Date: Wed, 24 May 2023 18:03:40 +0200
>>             To: hw-list na list.hw.cz
>>
>>                 Já nic neříkám. Já jenom říkám, ľe metoda, kterou
>>                 jsem navrhoval já (zřetězení jen signálu CS) je lepąí
>>                 a eliminuje vąechny nedostatky zde popisované metody.
>>                 Zejména umoľňuje obousměrný provoz a kaľdý slave můľe
>>                 pouľívat jinak dlouhá data. ;-) No co uľ. Ani větąím
>>                 frajerům neľ jsem já třeba kdysi nevěřili, ľe je Země
>>                 fakt kulatá a dokonce se točí. 
>>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230525/8994ac76/attachment-0001.htm>


Další informace o konferenci Hw-list