STM32, SPI daisy chain

Petr Labaj labaj na volny.cz
Pátek Květen 26 01:34:37 CEST 2023


Už jsem se tím nechtěl dál zaobírat, protože nikoho jiného už to 
nezajímá a my dva tím akorát zabíjíme čas. Ani jeden z nás nemá snahu a 
chuť se nechat přesvědčit na řešení toho druhého.
Ale přece jen ještě jedno vyjasnění nedorozumění.

Těch 20-30 řádků kódu je univerzální část, která zajišťuje ten princip 
Token Passing.
Samozřejmě v tom není zahrnut program, který daná data připravuje a 
odesílá/přijímá. Ten je závislý na tom, o jaké zařízení jde, že.

K té obousměrnosti: já to kdysi implementoval tak (klasicky, bez Token 
Passing), že master poslal slavovi příkaz. Pak mu posílal nuly (jako 
nosnou) tak dlouho, až mu slave odpověděl. A podle odpovědi buď zase 
master něco poslal nebo naopak zpracovával obdržené výsledky. Prostě 
běžná obousměrná síťová komunikace.
Já tak měl udělanou komunikaci mezi procesory. Běžně tak ale přece 
funguje komunikace s kdejakým HW. Tam je většinou prodleva mezi příjmem 
a vysíláním fixní, protože ji realizuje HW. Já tam měl vysílání nosné 
proto, abych simuloval tak trochu asynchronní provoz.
Tohle by se klidně dalo tím Token-Passing režimem udělat úplně stejně. 
Jen by tam přibylo těch 20-30 řádků pro předávání tokenu. Tehdy mě to 
nenapadlo.
Z realizačních důvodů jsem to nemohl udělat po UARTech (nebyly k 
dispozici). A I2C jsem nikdy neměl moc rád (a stále nemám).

K tomu backplane: jednoduše. Vyžadovalo by to jedno CMOS hradlo (jen 
budič, třeba 74HC244 pro 8 pozic pro moduly) a jeden odpor pro každý 
konektor.
Pin CS_IN by byl přes velký odpor připojený na vstup toho 74HCxx. Tak 
když by tam nebyl zasunutý modul, signál CS_IN by se kopíroval na CS_OUT 
a kruh by se uzavíral.
Zasunu desku, pak aktivní GPIO výstup CS_OUT snadno přemůže ten 
překlenovací odpor a kruh je  na této pozici řízen a daný modul je 
zařazen do sběrnice.

S tím Schwarzeneggerem jste mě trochu rozhodil. Jako herec mi byl vždy 
sympatický, jako politik-progresivista moc ne. Tak se to navzájem tak 
vyvažovalo.
Ale pokud píšete, že je SPI-kompatibilní, tak to by situaci zásadně 
ovlivnilo do plusu.

PL

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

Dne 25.5.2023 v 23:52 wek napsal(a):
> > Rozumím, je třeba najít podpůrné argumenty pro své řešení a 
> odsuzující pro ta ostatní. ;-)
>
> Iste. A prajem Vam, aby ste nejake nasli... :-D
>
> > implementace ve slave je triviální, na nějakých 20-30 řádků v C, 
> možná i míň
>
> A ja sa na tych Vasich trivialnych 20-30 riadkov, mozno aj menej, 
> tesim... :-)
>
> Okrem ineho aj preto, lebo mi to konecne objasni, ako presne sa 
> dosiahne toto:
>
> > zřetězení tímto způsobem ponechává každému slave naprostou svobodu,
> > jak a co bude s masterem komunikovat (nemá-li zrovna nic tak klidně 
> i 0 byte),
>
> ... lebo si myslim, ze slave ma primalo moznosti aby o tychto veciach 
> mohol rozhodovat.
>
> A ze ako sa da zrealizovat...
>
> > kam by se jen zasunutím destičky zařadil do busu další slave
>
> ...bez vlastnorucne skonstrovaneho speci konektora, tak to skutocne 
> netusim. Nieto este...
>
> > (po zasunutí by následoval cyklus "ozvi se kdo jsi tu a řekni co umíš",
> > automaticky vyvolaný masterem)
>
>
> wek
>
> PS. '51 nie je ziadna vykopavka ale najlepsi mcu vsetkych cias.
>
> PS2. O nahradeni vojakov strojmi bol natoceny dobry dokumentarny film 
> tak pred 30 rokmi. Ak sa lepsie prizriete, Arnold ma ma lavom bicepse 
> vytetovane MOSI a na pravom MISO.
>
>
>
> On 25 May 2023 23:12:45 CEST, Petr Labaj <labaj na volny.cz> wrote:
>
>     Rozumím, je třeba najít podpůrné argumenty pro své řešení a
>     odsuzující pro ta ostatní. ;-) Takže asi naposled, jen shrnutí: -
>     metoda Token Passing není nic exotického, ale celkem běžně
>     používaná metoda - zřetězení tímto způsobem ponechává každému
>     slave naprostou svobodu, jak a co bude s masterem komunikovat
>     (nemá-li zrovna nic tak klidně i 0 byte), jak dlouho,
>     simplex/duplex, jak rychle atd. - klidně můžou být na sběrnici
>     různí slavesové, třeba i velmi pomalé AVR a velmi rychlé STM32H a
>     podobně (samozřejmě při ošetření napěťových úrovní), dokonce i
>     něco se SW realizovaným SPI jako nějaká vykopávka (třeba nějaké
>     x51) - implementace ve slave je triviální, na nějakých 20-30 řádků
>     v C, možná i míň (potřebuje jen umět povolit/zakázat SPI, testovat
>     jednu GPIO linku a nastavit jednu GPIO linku) - není žádný důvod,
>     proč by to nemělo fungovat na jakémkoli typu procesoru, starém i
>     budoucím, tedy ochrana investic - snadno by se dal udělat nějaký
>     backplane s řadou konektorů, kam by se jen zasunutím destičky
>     zařadil do busu další slave (po zasunutí by následoval cyklus
>     "ozvi se kdo jsi tu a řekni co umíš", automaticky vyvolaný
>     masterem) Při implemetaci mého spolehlivého SPI pak létají
>     mezikontinentální rakety přesně na čas podle jízdního (raketového)
>     řádu. Tak na co tam živit nějaké zbytečné chlapy. SPI forever. ;-)
>     PL ********************** Dne 25.5.2023 v 14:18 Jan Waclawek
>     napsal(a):
>
>             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. 
>
>         Premysliet mozno, ale urcite netreba robit prilis velke
>         vylepsenia. A treba zacat s proof-of-concept vecami, aby sa
>         zasadne problemy ukazali hned. Napriklad taka metoda
>         zretazenia chipselectov... na papieri to vyzera dobre, ale ak
>         sa to zacne robit, tak sa rychlo ukaze, aka blbost to bola...
>         ;-) Ako vravim, zadanie bolo, ze transakcia ma prebehnut
>         automaticky, bez nejakeho saskovania v software. Ak sa maju
>         veci robit v software, tak to pokojne mozu byt vsetci postupne
>         master, presne tak ako sa to pri odovzdavani tokenov robi, a
>         vobec netreba riesit ziadne zretazovanie chipselectov. Tie
>         chipselecty vlastne predstavuju aj tak viacmenej len metodu
>         identifikacie poradia, to sa da riesit aj inak, pridelenim
>         poradovych cisiel v software napriklad. Medzicasom som
>         vymyslel metodu, ako so zretazenim MISO/MOSI dosiahnut
>         volitelne dlzky sprav (ano, kvoli tomu som sa nevyspal). Je to
>         uplne zbytocna komplikacia, ktoru zakaznik nechce a nikdy ani
>         nebude chciet, vymyslam to ciste len kvoli Vam; a je to na
>         dlhsie rozpravanie, mozno sa cez vikend k tomu dostanem. A
>         tiez si to musim odskusat aj na druhom type STM32 DMA
>         (single-port), s ktorym mam menej skusenosti, a to si vyzaduje
>         robotu a cas a aj uplne sprosty fyzicky priestor... Ti chlapi,
>         co odpaluju medzikontinentalne rakety s jadrovymi hlavicami,
>         sedia v tych najlepsich protijadrovych bunkroch ktore su k
>         dispozicii; a oni to vedia. V pripade potencialneho odvetneho
>         utoku je to to najlepsie mozne miesto, kde by mohli byt,
>         urcite odtial utekat nebudu. Navyse, dostavaju slusny plat a
>         pritom vlastne nikdy nic nerobia (okej, obcas nejake smiesne
>         cvicenie s cervenym telefonom a tymi klucami). Ziadne SPI. wek
>         ----- Original Message --------------- Subject: Re: STM32, SPI
>         daisy chain From: Petr Labaj <labaj na volny.cz> Date: Thu, 25
>         May 2023 00:09:24 +0200 To: hw-list na list.hw.cz
>
>             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) 
>
>     ------------------------------------------------------------------------
>     HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
>     http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230526/82095b27/attachment.htm>


Další informace o konferenci Hw-list