Avatar billede cone63 Juniormester
22. juni 2003 - 15:49 Der er 7 kommentarer og
1 løsning

Seriel protocol

Hej

Jeg skal lave en protokol, således at jeg kan koble en PC sammen med et antal Intel8052 processorer. Forbindelsen sker via RS232/RS485, jeg har en karakterdriver til 8052'ens UART, så jeg skal bare lave selve funktionaliteten i protokollen. Protokollen skal skrives i C.

Jeg har før prøvet at lave en protokol. Denne skal være forholdsvis simpel, men skal kunne håndtere flere enheder på samme linje.

Er der nogen der har nogen forslag på hvad der er bedst?
Half-duplex, single-duplex, polled mode, master-slave mode eller hvordan?
Avatar billede segmose Nybegynder
23. juni 2003 - 08:29 #1
Du mener flere enheder på samme seriel linie?
Avatar billede cone63 Juniormester
23. juni 2003 - 09:54 #2
ja flere enheder på samme serielle linje. De skal så have hver deres ID så man kan sende telegrammer til hver enkelt enhed
Avatar billede segmose Nybegynder
23. juni 2003 - 11:11 #3
Har gennemført de forskellige handshake i dine kabler så hver enhed kan kommunikere sikkert? (parrallekoblet/seriel ledninger i kablerne, RTS/CTS føres de overhovedet igennem RS485?)

Så skal du bare reservere linien fra den maskine der vil noget, sende med et id først som den alle maskinerne læser og de den ikke er til dumper bare deres telegram og den rigtige fortolker så sit fx.

reserver kabel
check at vi har kabel.
send "I03Set port 1<EOT>"
frigiv kabel

få echoet kommandoen fra I03.
Avatar billede segmose Nybegynder
04. juli 2003 - 09:09 #4
Var det noget hjælp eller vil du uddybe problemet noget mere?
Avatar billede cone63 Juniormester
04. juli 2003 - 09:13 #5
der skal ikke bruges handshake. Kun de to kabler til at overføre data (eller fure kabler ved fuld duplex)
Avatar billede segmose Nybegynder
04. juli 2003 - 11:18 #6
En variation af aloha protokollen så.

send "SI03Set port 1:x<EOT>" x er en checksum/XOR af resten meddelelsen.

modtageren svare så "RI03Set port 1:x<EOT>" med ny checksum.

evt. kan afsender så sende en commit meddelelse i samme format for at enheden til rent faktisk at gøre det. "CI03Set port 1:x<EOT>"

ved kollisioner, dvs. hvis flere forsøger at sende samtidig, vil checksum ikke være korrekt. Der skal også bruges en timeout da afsender ikke ved om modtager fik meddelelsen.

Ellers kan du forsøge at oprette en reservation på linien, send de data du skal have afsted til enheden og så nedlægge reservationen igen, alt efter hvem der må oprette forbindelse.
Avatar billede cone63 Juniormester
05. juli 2003 - 09:14 #7
kan man finde den protolkol som kildekode, eller er jeg nød til at kode den selv?
Har tænkt lidt på SLIP protokollen
Avatar billede segmose Nybegynder
07. juli 2003 - 09:07 #8
Det kommer vel an på hvad du vil bruge den til prøv at på http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1055.html

mm. du laver noget tidskritisk hvor fejl har katastrofale konsekvenser kunne du nok slippe lettere om ved det. Er det en simple opsætning af nogle enheder kan du måske slippe afsted med bare at echo'e kommandoerne du sender tilbage til afsender. Hvis det er tidskritisk burde du få lavet en hardware protokol til at sikre at du ikke får en masse retransmissions, jeg har engang lavet noget styring af frekvensomformerer, parallelkoplet ligesom dine intel'er, som brugte dette princip, hardware afgør hvem der må sende og software laver tilbage melding om succes i transmission.
Jeg vil mene at ovennævnte SLIP protocol er for meget for dette problem der skal nok søges noget mere på google for at finde noget bedre, prøv med de indlysende søgeord serial protocol intel 8052 og så evt. navnet på den karakter driver du har.
Du kan også prøve at se om linkene du får fra google med søge ordene "serial protocol 3964" kan hjælpe dig videre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester