Zdravím. Mám dvě zařízení, disponující rozhraním SPI (nebo jeho odvozenině, prostě synchronní sériová sběrnice) a řeším následující problém:
Zařízení A, master, zařízení B, Slave.
Obě jsou to samostatné krabičky, které se propojují kabelem, u obou se zapíná napájení zvlášť, tedy ne současně. Dokonce kabel se může připojovat kdykoliv.
Jde mi o to, že při připojení kabelu, se do posuvného registru nasouká prostě několik “falešných” bitů, třeba díky tomu, že při zapojování konektoru se objeví nějaké zákmity na vstupu interface a podobně.
Tímpádem do posuvného registru je “naclockováno” několik nesmyslných bitů, a když potom zařízenní A do B se snaží poslat svých 8 bitů, mělo by dojít k jejich správnému usazení - posuvný registr se prostě posune 8x, tedy se vymění všech 8 pozic, na správné log. hodnoty.
Mikrokontrolér si ale přesto správnou hodnotu nepřečte:
Řekněme, že po přijetí 8mi bitů (naplnění bufferu) se vyvolá přerušení.
Při připojování zařízení se díky chybě do bufferu zapíšou tři bity (nesoucí nesmyslnou informaci), a při následném pokusu o poslání 8mice správných bitů dojde k získání nesmyslu, jelikož po přijetí 5ti )z 8mi) bitů se vyvolá zmíněné přerušení, a následně se do bufferu znovu umístí 3 zbývající bity.
Komunikace se tedy nachází mimo synchronizace, je posunutá o několik bitů.
Zajímalo by mě, jak je možné tuhle opravdu pitomou situaci vyřešit, existuje-li vůbec nějaké řešení.
Díky za návrhy možných řešení.
PS: Přidání dalšího komunikačního vodiče (kromě MOSI, MISO a SCK) nelze provést.