STM32, SPI daisy chain

Petr Labaj labaj na volny.cz
Čtvrtek Květen 25 23:12:45 CEST 2023


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)
>



Další informace o konferenci Hw-list