Seriekommunikation ?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Seriekommunikation ?

Inlägg av Maze »

Vill skicka över data från en masterenhet till ett tiotal slavenheter. Varje enhet har en FPGA med LVDS och mellan enheterna blir det CAT5 kabel. Datan som ska skickas består av 12 bitars ord och hastigheten blir runt 30 Mbps. Eventuellt får mastern flera utgångar som jobbar paralllellt för att minska hastigheten.

Det jag funderar på är vilken typ av protokoll som passar bäst här. Varje enhet ska ha en address och bara ta emot sin del av dataströmmen. Tänkte mig först en snabbare variant av DMX standarden där varje enhet själv får räkna antal byte från en given punkt och sen ta emot datan när det stämmer med addressen. För att markera att ett nytt varv med data skickar mastern ut en byte utan stopbit. Men kommer detta fungera i 30 Mbps och med 12 bitar ?

Är jag helt fel ute om jag istället kodar datan i 8b/10b eller nåt liknande format och låter varje FPGA ha en egen DLL som synkar på dataströmmen ? Har även möjlighet att använda upp till fyra balanserade signaler i kabeln om man nu vill skicka data och klocka separat.

Tacksom för lite mer info och ideer på hur jag kan lösa detta.
Användarvisningsbild
Icecap
Inlägg: 26655
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nu beror det ju på om det går men jag löste ett liknande problem vid att skicka datan i "skurar" och ha en timer som retriggades av klockan. Ett uppehåll i klockan på mer än x cykler = end-of-block.

Ganska enkelt faktisk.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Vilken hastighet hade du på överföringen ? Är själv lite osäker på dessa höga hastigheter och vad som krävs för att det ska fungera bra eller inte. Vad jag fattat så är en synkron överföring att föredra där dataströmmen hela tiden korrigerar mottagarens klocka.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Är det 30 Mbps kontinuerligt ?
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Precis, datan ska skickas hela tiden. Eventuellt så delar jag ner hela "nätverket" till fyra mindre för att få 7,5 Mbps istället.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Kom på att det finns färdiga kretsar som kan översättas en parallell databus till ett fåtal LVDS kanaler. Vissa har bara en enda LVDS kanal där både klocka och data skickas. Sen finns det visst de som har fyra LVDS kanaler, tre för data och en extra för klocka. Kommer använda vanlig nätverkkabel i mitt bygge så det kanske är smart att använda hela kabeln och göra nån liknande lösning som ovan fast i FPGAn :? En annan fråga, har plöjt igenom massvis med LVDS sidor men har inte hittat nån maxlängd för kabeln, gissar på att de beror på hastigheten och kabelval mm. Men vid 30 Mbps hoppas jag 25 meter kabel funkar.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Många funderingar blir det :wink: Undrar lite på vilka sätt man kan ansluta flera enheter i ett multidrop nätverk. Det ska vara en master som sänder och flera mottagare med specifika addresser som tar emot. Med andra ord så ska all data "synas" för alla enheter. Ska använda mig av LVDS.

Gissar på att den vanligaste lösningen är att bara bygla ihop in och ut kontakterna hos varje mottagre för att skicka vidare datan. Men jag undrar då om det kanske är smart att låta varje mottagare "buffra" signalen genom FPGAn. Två pinnar tar emot LVDS signalen och två andra skickar vidare den för att få bättre drivförmåga då mastern slipper driva hela nätverket. Är det en vanlig lösning att man gör så eller är jag helt fel ute :?
Användarvisningsbild
babbage
Inlägg: 655
Blev medlem: 10 november 2004, 11:33:17
Ort: N-tälje

Inlägg av babbage »

Det finns nog en hel del att tänka på för ett multi-drop nätverk med LVDS. Har FPGA:n internt (konfigurerbart?) eller externt termineringsmotstånd? Det ska nog bara vara en mottagare som har ett termineringsmotstånd och de andra ska vara högimpediva och "sniffa" spänningen mellan de två ledarna på LVDS-interfacet. Det kanske är lättare att göra på ett kretskort eller ett "bakplan" än med CAT5 kabel.

Om du buffrar lär det ju krävas lite resurser i FPGA:n och dessutom flera pinnar. Det ökar även fördröjningen från sändaren till mottagare som tar emot en buffrad signal, även om datatakten är densamma, om det nu är viktigt.

Enklast är kanske att använda en färdig krets som den här. Men då skulle du få 10 st CAT5 kablar istället.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Det var just problemet med termineringsmotståndet som jag tänkte kunde lösas genom att låta varje enhet terminera LVDS ingången och sen skicka vidare datan på ett par nya pinnar. Då blir det ett point to point nätverk istället.

Kan komma på fyra olika alternativ här.

1. Två CAT5 kontakter i varje enhet med så kort banor som möjligt mellan samt till FPGA. I sista enheten ansluter man ett termienringsmotstånd i ena kontakten. Nackdelen kan vara längden kabel som första enheten måste driva blir lång. Är LVDS över 25 meter kabel att rekommendera ?

2. LVDS signalen termineras i varje enhet och ingångarna på FPGAn routas internt direkt till ett par nya utgångar som driver kablen till nästa enhet. Här gissar jag på att jag kommer få en viss fördröjning genom FPGAns grindnät men fördelen är att man får ett point to point nätverk och slipper tänka på termineringen av sista enheten.

3. Samma som alternativ två men datan som ska skickas vidare klockas först in i ett FIFO. Sen klockas datan iväg med enhetens lokala klocka istället. Kommer ge en viss fördröjning men ger kanske en stabilare signal till nästa enhet ?

4. Bygga en hub och bygga ett stjärnnätverk istället där varje enhet får en egen kabel. Men jag vill helst kunna linka ett par enheter efter varandra för att få en enklare kabeldragning.

Ett alternativ kunde kanske vara RS-422 men eftersom varje FPGA redan har stöd för LVDS vill jag helst använda det.
Skriv svar