SLIP-orientiertes Protokoll

Blocklänge verringern ?

  • 1
  • 2
  • Page 1 of 2
schnutzibaer
 
Avatar
 
Subject:

SLIP-orientiertes Protokoll

 · 
Posted: 20.01.2013 - 21:15  ·  #1
Hallo, allerseits,

ich bin neu im Forum, habe bisher nur ein wenig mitgelesen. Ich bin seit September in einer Firma als Elektronik-Entwickler angestellt, wo ATMEL und AVRCo die Standard-Plattform für die Produktentwicklung ist. Da beides für mich neu war, mußte ich mich erst ein wenig einarbeiten. Jetzt ist das erste Projekt soweit gediehen, daß ich doch mal die Hilfe der "Altvorderen" brauche.
Ich hab ein kleines Master-Slave-System mit max. 32 Slaves, das ich im Polling nach Anwesenheit und Ereignissen abfragen möchte. Als Kommunikationsprotokoll möchte ich das SLIP-orientierte Verfahren einsetzen, ohne den SLIP-Treiber aus der Profibibliothek benutzen. (Manual Standard-Driver, Abschnitt 3.11.6).
Das funktioniert soweit schon super, aber ich habe hier ein Zeitproblem: Die Pollingrunde soll so schnell wie möglich stattfinden, da Ereignisse noch an eine übergeordnete Instanz weitergegeben werden müssen. Für die Kommunikation insgesamt komme ich netto mit 2-4 Byte pro Datenblock aus. Nur im Diagnose-Modus wird's mehr, aber da spielt die Zeit keine Rolle. Um EMV-Probleme zu umgehen, möchte ich die Datenrate auch nicht so hoch wählen, obwohl das System mit Leitungslängen unter 20m sicher mehr hergibt als 19,2 kBaud.
Nach meinen Tests sendet ein SerOutSLIP aber brutto immer 20 Byte. Start- und Stopbyte ( $c0), Netto-Blocklänge 1 Byte, die Checksum, die Nettodaten, und der Rest wird mit $00 aufgefüllt.
Meine Frage:
1. Gibt es eine Möglichkeit, die Brutto-Blocklänge z.B. auf 10 Byte zu verkürzen ?
2. Gibt es Alternativen, wo ich mich nicht um die gesamte serielle Kommunikation kümmern muß?

Danke im Voraus, daß sich jemand meines Problems annimmt.

MfG

Schnutzibär
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SLIP-orientiertes Protokoll

 · 
Posted: 21.01.2013 - 14:47  ·  #2
Hallo Schnutzibär,

ich habe seit jahren nicht mehr mit dem Standard SLIP gearbeitet und kann deshalb
nicht viel dazu sagen. Aber eins ist klar, 20m mit RS232 und 19200Bd ist etwas verwegen.
Wenns geht, dann auf RS485 umstellen und mit bis zu 1Mbd arbeiten. Da spielen
ein paar Byte mehr oder weniger keine Rolle mehr.

rolf
schnutzibaer
 
Avatar
 
Subject:

Re: SLIP-orientiertes Protokoll

 · 
Posted: 21.01.2013 - 14:55  ·  #3
Hallo, rh,

danke für die schnelle Antwort. Ich hätte vielleicht dazusagen sollen, daß ich als physikalisches Übertragungsmedium LIN-Treiber (z.B. ATMEL ATA6620) benutze. Falls nicht schon bekannt: LIN ist ein Drei-Draht-Bus, +UB (z.B. 24V), Masse und eine Datenleitung. Die logischen Pegelgrenzen für die Datenleitung liegen dicht unter +UB bzw. etwas über Masse. Wird oft als "Unterbus" zu CAN verwendet. Nur strenges Master-Slave-Regime möglich.
Mit der höheren Geschwindigkeit muß ich nochmal sehen, welchen Aufwand ich mir mit der EMV auflade.

Danke nochmal.

CF
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SLIP-orientiertes Protokoll

 · 
Posted: 21.01.2013 - 15:11  ·  #4
Hallo CF,

ich befürchte mit einem Pegel-Hub von bis zu 24V werden hohe Datenraten problematisch.
Die Anstiegs Steilheit der Flanken sind grundsätzlich begrenzt in Volt/Zeit, da geht hier nicht viel.
Bei hohen Datenraten kommt schlussendlich nur ein Sägezahn raus :angry5:
Das ist auch das Problem bei RS232 +-5V..+-12V
Bei RS485 ist der Pegel nur noch ca. 1V. Bei USB und Ethernet ist er wesentlich kleiner.
Je höher die Datenrate, desto kleiner muss der Pegel sin um nicht an phys. Grenzen zu stossen.

rolf
schnutzibaer
 
Avatar
 
Subject:

Re: SLIP-orientiertes Protokoll

 · 
Posted: 21.01.2013 - 16:07  ·  #5
Hallo, rh,

ja, man muss nur mal das ganze Gehirn einschalten und nicht nur das Stück, das den Kuhherden-Effekt verwaltet. Die Erklärung ist natürlich einleuchtend.
Entscheidung für die LIN-Treiber war schon gefallen, als ich hier angefangen habe. Das habe ich dann unbesehen als gesetzt akzeptiert und nicht weiter drüber nachgedacht. Kannte den LIN-Bus vorher auch nicht. Jetzt, wo ich am Realisieren bin, geht eine Lampe nach der anderen an. Ein Glück jetzt, und nicht in acht Wochen !!

Danke, danke danke !!

CF
schnutzibaer
 
Avatar
 
Subject:

Retro auf alten Tread

 · 
Posted: 21.01.2013 - 16:22  ·  #6
Hallo, rh,

weil's mich gerade betraf:
Es gibt einen Thread von Alvin: "Problems using programmer with Mega128" von 2011.
GENAU das dort beschriebene Problem hatte ich soeben auch. Letzte Woche neuen Programmer ISP3-X gekauft: 128er läßt sich nicht mehr programmieren. SPI-Clock auf 1 MHz runtergesetzt: 126er läßt sich wieder programmieren. Heißt das, daß der Bug immer noch im Programmer steckt ?
Wie auch Alvin sagt: Mit dem alten ISP3 gab's das Problem noch nicht.

MfG

CF
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SLIP-orientiertes Protokoll

 · 
Posted: 21.01.2013 - 17:27  ·  #7
Hallo Cf,

1. wenn das LIN nur eine Laune und keine Notwendigkeit ist, dann weg davon.
RS485 ist immer die erste Wahl bei langen Leitungen.

2. Da gibt es kein Problem dieser Art in den Programmern. Wenn sowas auftritt
wie oben beschrieben, dann sind entweder die OSC-Fuses falsch eingestellt
oder der SPI/Prog Clock ist zu hoch gewählt, sodass es zu Programmier Fehlern
kommt.

Wenn es noch geht, dann auf JTAG umsteigen, da gibt es diese Probs nicht
und man kann damit auch in-circuit debuggen. Bei grösseren Apps sehr wichtig.
Oder gleich den XMega nehmen. Dann wird auch das ICE zur wahren Freude :3some:

rolf
schnutzibaer
 
Avatar
 
Subject:

Re: SLIP-orientiertes Protokoll

 · 
Posted: 21.01.2013 - 21:02  ·  #8
Hallo, Rolf,


Nein, das LIN ist keine Laune, es geht um die Reduzierung der zu verlegenden Adern. Das alte System war mit RS-485, das soll unbedingt weg. LIN hat ausserdem den Vorteil, bei max. 16 Slaves auch Sternstrukturen bzw. gemischt Bus-Stern zuzulassen. Das ist ganz wichtig für uns.
Ich habe nochmal nachgelesen: Der LIN-Sender muß den High-Level mit mind. 0,9*UB und den Low-Level mit mind. 01*Ub realisieren können. Der Empfänger akzeptiert bereits 0,6*UB als High und 0,4*UB als Low. Mit 19,2 kBaud sind Leitungslängen bis 40 m zulässig. Diese Bedingungen sind durch genannte LIN-Treiber erfüllt.
Der LIN-Transeiver verschleift der Low/High-Flanken sogar absichtlich (hab ich auf'm DSO gesehen), damit alles "gemütlich" vonstatten geht.

Nachdem alles nochmal durch meine Birne gewandert ist, habe ich mich zu folgendem entschlossen: Ich bleib bei physikalisch LIN. Ich bleib auch bei 19,2 kBaud.
Ich werde auf die SLIP-Frames verzichten, den einfachen Serial-Treiber benutzen und Funktionalitäten wie Blocklänge und Checksum selber implementieren.
Dann kann ich die Brutto-Blocklänge selber bestimmen (im günstigsten Fall 5 Byte) und habe wesentlich kürzere Abfragezeiten.

Nochmals vielen Dank für Deine Hilfe !


Claus
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   136   150 · Page-Gen-Time: 0.029047s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI