<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Ad fixní délka:<br>
    Pravidlo: žádný zákazník nikdy dopředu pořádně neřekne, co všechno
    dříve či později bude potřebovat.<br>
    Takže vždy je třeba myslet na pozdější rozšiřitelnost.<br>
    <br>
    Ad vstup dat:<br>
    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?<br>
    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.<br>
    <br>
    Ad mezikontinentální rakety:<br>
    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.<br>
    Takže rakety je třeba startovat přes SPI.<br>
    <br>
    Ad můj způsob:<br>
    Timery netřeba. DMA jen tehdy, když bude komunikace rychlá. Ale to
    je stejné jako u Vás.<br>
    Jediné, co je navíc, jeden výstupní GPIO pin.<br>
    Odměnou za to je téměř neomezený systém.<br>
    <br>
    <div class="moz-cite-prefix">PL<br>
      <br>
      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.<br>
      Myslím, že jsem tehdy postavil největší ARCnetové sítě v tehdejším
      Československu.<br>
      <br>
      **********************<br>
      <br>
      Dne 24.5.2023 v 23:34 wek napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:1973511D-2471-4871-AAD8-059195534E19@efton.sk">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <div dir="auto">--- moj<br>
        Uloha znela, fixna dlzka spravy.<br>
        <br>
        Variabilnu dlzku ste si vymysleli Vy, asi by to slo u mna riesit
        s nejakymi rozumnymi obmedzeniami ale naco.<br>
        <br>
        <br>
        > Jak daný slave pozná, že data, která mu lezou do vstupu,
        jsou pro něho? <br>
        <br>
        Posledna sprava je pre neho.<br>
        <br>
        > Do vstupu mu jde celý vláčik, a on neví, kolik je slaves<br>
        <br>
        Nepotrebuje to vediet, "posledna" je jednoznacne.<br>
        <br>
        <br>
        Medzikontinentalne rakety s hlavicami sa nestartuju cez SPI,
        ale  tak, ze dvaja tipkovia naraz otocia klucikom. <br>
        <br>
        <br>
        --- Vas<br>
        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").<br>
        <br>
        Ani verzia s fixnou dlzkou spravy nie je uplne jednoducha a asi
        bez pinu a timera naviac sa neda urobit v hw.<br>
        <br>
        Vyhodou je mensia spotreba RAM, ale podla zadania ide o 64B
        (teda v mojom rieseni 72B).<br>
        <br>
        wek<br>
        <br>
      </div>
      <br>
      <br>
      <div class="gmail_quote">
        <div dir="auto">On 24 May 2023 22:51:46 CEST, Petr Labaj
          <a class="moz-txt-link-rfc2396E" href="mailto:labaj@volny.cz"><labaj@volny.cz></a> wrote:</div>
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;"> Váš:<br>
          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í.<br>
          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".<br>
          <br>
          Můj:<br>
          - 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<br>
          - start jednoho kola komunikace - master nahodí CS (předtím
          byl neaktivní)<br>
          - první slave přijímá a vysílá data, libovolně dlouho, podle
          své potřeby<br>
          - 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)<br>
          - druhý slave je teď naadresován (do jeho CS_IN jde CS_OUT
          toho předchozího)<br>
          - 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<br>
          - totéž pro 3. až N-tý slave<br>
          - 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<br>
          <br>
          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.<br>
          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í".<br>
          <br>
          PL<br>
          <br>
          *********************<br>
          <div class="moz-cite-prefix"><br>
            Dne 24.5.2023 v 22:01 wek napsal(a):<br>
          </div>
          <blockquote type="cite"
            cite="mid:387C1ACD-9E1F-4172-814E-BBB9DDA8275A@efton.sk">
            <meta http-equiv="content-type" content="text/html;
              charset=UTF-8">
            <div dir="auto">--- moj<br>
              <br>
              Ocislujme master=0, slave=K=1..N, pricom maximalne moze
              byt slavov M, N<=M.<br>
              <br>
              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. <br>
              <br>
              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).<br>
              <br>
              --- Vas<br>
              <br>
              > První slave dostane "peška" (token) a komunikuje po
              SPI tak dlouho, jak potřebuje.<br>
              > Až si vyřídí svoje, tak pošle peška dál.<br>
              <br>
              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.<br>
              <br>
              wek<br>
            </div>
            <br>
            <br>
            <div class="gmail_quote">
              <div dir="auto">On 24 May 2023 18:34:03 CEST, Petr Labaj <a
                  class="moz-txt-link-rfc2396E"
                  href="mailto:labaj@volny.cz" moz-do-not-send="true"><labaj@volny.cz></a>
                wrote:</div>
              <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
                0.8ex; border-left: 1px solid rgb(204, 204, 204);
                padding-left: 1ex;">
                <pre class="k9mail"><div dir="auto">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):
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;"><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><div dir="auto">Zejména umoľňuje obousměrný provoz
</div></blockquote><div dir="auto">Aj tato metoda umoznuje obojsmernu prevadzku.

</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><div dir="auto">a kaľdý slave můľe pouľívat jinak
dlouhá data.
</div></blockquote><div dir="auto">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 <a class="moz-txt-link-rfc2396E" href="mailto:labaj@volny.cz" moz-do-not-send="true"><labaj@volny.cz></a>
    Date: Wed, 24 May 2023 18:03:40 +0200
      To: <a class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:hw-list@list.hw.cz" moz-do-not-send="true">hw-list@list.hw.cz</a>

</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><div dir="auto">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čí.
</div></blockquote>
</blockquote></pre>
              </blockquote>
            </div>
          </blockquote>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>