STM32, SPI daisy chain
Petr Labaj
labaj na volny.cz
Pátek Květen 26 01:47:20 CEST 2023
Teda pro menší počet pozic na backplane by to šlo i bez toho 74HC.., jen
s tím odporem.
Jen by se sčítaly hodnoty těch odporů, pokud by tam nebyly zasunuté moduly.
To hradlo by případně stačilo dát třeba jen na každou 3. pozici nebo tak.
PL
********************
Dne 26.5.2023 v 1:34 Petr Labaj napsal(a):
> 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
>
>
> _______________________________________________
> 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/18c4eeb8/attachment-0001.htm>
Další informace o konferenci Hw-list