GNU/Linux >> Znalost Linux >  >> Linux

Je normální mít hodiny SPI s různým pracovním cyklem?

V zachycení vidíte aliasing, nikoli chvění hodin – případ nesprávného nástroje pro danou úlohu.

2MHz hodiny mají periodu 500ns, takže jsou vysoké pro 250ns. S 16MHz logickým analyzátorem odebíráte vzorky každých 62,5 ns, takže v ideálním případě byste viděli opakující se 4 vysoké vzorky a 4 nízké vzorky.

Nyní zvažte vliv nepatrného 0,5% rozdílu ve frekvenci na oscilátor CPU, takže dělicí síť až po sběrnici SPI nyní běží s periodou 251,25 ns. Poznámka:frekvence se v čase nehýbe, stále je to ideální krystal, ale průběh, který se snažíme zachytit, již není přesným násobkem taktu zachycení 62,5 ns. To vám dává aliasing se vzory 4/4, 3/5, 4/4, 5/3,... jako poměr vysoký/nízký ve vašem zachycení, když pozorujete fázový vztah mezi dvěma hodinami, které se pohybují dovnitř a ven.

Váš analyzátor je stále dobrý pro zachycení signálů SPI (nad Nyquistem atd.), ale není vhodné posuzovat stabilitu hodin. K tomu použijte osciloskop spouštěný na jedné hraně, abyste viděli stabilitu druhé hrany, a kalibrovaný frekvenční čítač ke kontrole absolutní frekvence.


Vzhledem k tomu, že SPI je synchronní protokol, na přesné frekvenci v kterémkoli okamžiku opravdu nezáleží. Vše je klíčováno k okrajům hodin, takže na přesném načasování mezi okraji opravdu nezáleží – samozřejmě v rámci možností zařízení.


Existuje řada způsobů, jak mohou být signály SPI generovány. V některých případech bude zařízení hardwarově nařízeno, aby odeslalo obsah určitého rozsahu paměti na port SPI bez zásahu procesoru. V takových případech bude obecně existovat jednotná sekvence hodinových pulsů, i když je možné, že po každé osmé bude "pauza". V některých případech bude muset procesor načíst každý bajt do posunovače, který je schopen přijmout alespoň jeden bajt "předem" před posunutým. Výstup v těchto případech bude často vypadat jako z čistě hardwarového případu, až na to, že se mohou příležitostně vyskytnout náhodné mezery po násobcích osmi hodin, pokud software občas selže načíst další bajt předtím, než se aktuální bajt vysune, ale v závislosti na časování procesoru, ke kterému nemusí nikdy dojít. Ve výše uvedených případech může být použití funkcí zpožděného spouštění na rozsahu užitečné při zkoumání pravidelně formátovaných dat, protože vše se vždy (nebo téměř vždy) stane v konzistentním čase vzhledem k začátku rámce.

Ne vždy jsou ale věci tak hezké. Je docela běžné, že zařízení mají hardware, který může automaticky vysílat 8 bitů, ale vyžaduje, aby software počkal, dokud nebude odeslána jedna skupina 8, než se zařadí do fronty další. To vytváří skupiny 8 pravidelně rozmístěných hodinových pulsů s náhodným množstvím prostoru mezi nimi. To často znemožňuje použití funkcí zpožděného rozmítání, ale na druhé straně často usnadňuje identifikaci začátku a konce každého bajtu, než by tomu bylo, kdyby byly všechny impulsy jednotné. Poslední možností je, že software může generovat signál SPI pomocí sekvence příkazů "set port high" a "set port low". Zdá se, že k tomu dochází ve výše uvedené ukázce.

Ve většině případů může hlavní zařízení na sběrnici SPI (v tomto případě RasPi) používat libovolnou směs dlouhých a krátkých pulzů, které uzná za vhodné, s výhradou omezení na určité minimální časování impulsů a příležitostně maximální časování impulsů, které jsou často řádově vyšší než minima (např. zařízení může mít minimální šířku pulzu a separaci pulzů každé 250 ns, ale maximální dobu mezi pulzy 1 ms - rozdíl více než tři řády). Za předpokladu, že časy pulzů zůstanou ve velmi široce nakreslených mezích (a v mnoha případech by neexistoval žádný maximální limit), komunikace by měla být spolehlivá.

Jediný čas ztráty dat je u SPI pravděpodobný, když je podřízeným zařízením procesor. SPI slave hardware vestavěný do mnoha CPU vyžaduje, aby při příchodu bajtu musel procesor jednat dříve, než hlavní spustí poslat další bajt, aby se zabránilo ztrátě dat, ale neposkytuje žádné prostředky, kterými by slave mohl říct masteru, že je připraven; v důsledku toho podřízené jednotky často potřebují ke komunikaci s nadřízenou jednotkou buď použít pět linek (hodiny, MOSI, MISO, CS a ručně implementovanou „připravenou“ linku), nebo vyžadují, aby nadřízená jednotka přidala za každý bajt zpoždění dostatečné pro umístění doba odezvy podřízeného zařízení v nejhorším případě.


Linux
  1. Linux – Ionice nemá žádný vliv na nesynchronizované zápisy (tj. normální zápisy)?

  2. Vypsat všechny adresáře, které nemají soubor s daným názvem souboru uvnitř?

  3. Jak mít normální oznámení přes aplikace na celou obrazovku v Gnome 3?

  1. Je Ubuntu kompatibilní s notebooky, které mají funkce dotykové obrazovky?

  2. proč C clock() vrací 0

  3. Je nejisté mít ansible uživatele se sudo bez hesla?

  1. Trasování jádra pomocí trace-cmd

  2. Ovládejte čas a datum svého počítače pomocí systemd

  3. Jak mohu spustit Linux s rootfs v RAM?