Serielle Kommunikation

05/09/2008 - 14:47 von Marian Aldenhövel | Report spam
Hallo,

Ich habe ein ernstes Problem mit seriellen Schnittstellen unter Linux.

Sender ist ein AVR-Microcontroller mit einer bit-banging-Implementation von
RS-232. Man drückt an dem Geràt einen Knopf und es fàngt an eine Menge Daten
zu senden.

Unter Linux werden die Daten verfàlscht, bzw. es fehlen Bytes aus dem
Datenstrom. "Linux" ist absichtlich allgemein, denn ich beobachte das
identische Verhalten in zwei verschiedenen Systemen. Es fehlen auch immer
dieselben Bytes.

Ich habe folgende verschiedene Testumgebungen:

Windows XP. Seriell<->USB-Wandler. Es existiert ein Programm, das den
Datenstrom auswertet, das funktioniert prima. Und ich habe unabhàngig davon
einen Mitschnitt mit einem Terminalprogramm angefertigt. Der hàngt als
Tachokey_Windows.bin an. Das ist der Soll-Zustand, die Daten passen zur
Dokumentation des Geràtes.

Ich habe zwei Linuzes. Einmal Ubuntu Server 7 in einer VM auf demselben
Windows-Notebook auf dem der erste Test gefahren wurde. Ich habe den
USB-Wandler an die VM "angeschlossen", und dort dann mit usb-serial-Modul als
/dev/ttyUSBx zugànglich gemacht. Ein cat /dev/ttyUSB0 > tachokey.bin liefert
die angehàngte Datei.

Die erste Abweichung passiert bei Offset 0x3a7. Im Windows-Mitschnitt steht 85
11 85, das Linux-Protokoll sagt 85 85. Die 11 ist im Orkus verschwunden.

Wiederholte Mitschnitte liefern dieselben Fehler, es fehlt immer als erstes
diese 11. Nie ein anderes Byte.

Ich habe auch ein Programm geschrieben, das die Daten liest und interpretiert
- letztlich ist das ja das Endziel. Darin habe ich mit verschiedenen
Puffergrößen, Wartezeiten etc. gespielt. Das Ergebnis ist stabil falsch, es
kommt immer dasselbe raus.

Um die USB-Schicht und VM auszuschließen habe ich dasselbe, das cat und auch
mein Programm, auf das eigentliche Zielsystem gebracht. Das ist so ein kleiner
3.5"-PC mit 486er-oider CPU. Darauf làuft ein von mir selbst gebautes Linux zu
ansonsten voller Zufriedenheit.

Daran habe ich das Geràt auch per USB angeschlossen und auch einmal direkt an
eine "echte" RS232, die das Ding wirklich noch hat.

Auch hier, mit anderer OS-Version, eigenem Build, anderer CPU, anderer
Schnittstellenhardware: Es fehlt reproduzierbar die 11.

Der Programmierer der AVR-Seite behauptet natürlich mit Recht, daß er ja gar
nicht unterscheiden kann, ob auf der anderen Seite nun Linux oder Windows
sitzt :-).

Ich kann mir nicht so recht vorstellen, was diesen Fehler auslöst. Hat jemand
eine Idee?

Ciao, MM
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."
 

Lesen sie die antworten

#1 Holger Petersen
05/09/2008 - 15:21 | Warnen spam
Ich habe ein ernstes Problem mit seriellen Schnittstellen unter Linux.



hmm...


Unter Linux werden die Daten verfàlscht, bzw. es fehlen Bytes aus dem
Datenstrom. "Linux" ist absichtlich allgemein, denn ich beobachte das
identische Verhalten in zwei verschiedenen Systemen. Es fehlen auch immer
dieselben Bytes.



Das hat Methode...

Ein cat /dev/ttyUSB0 > tachokey.bin liefert die angehàngte Datei.



Die Datei war (glücklicherweise :-) nicht angehàngt.
Es ist ein 'No No' eine Binàrdatei in einem News-
posting 'anzuhàngen'...


Die erste Abweichung passiert bei Offset 0x3a7. Im Windows-Mitschnitt steht
85 11 85, das Linux-Protokoll sagt
85 85.

Die 11 ist im Orkus verschwunden.



Welche "stty"-Einstellungen hattest Du?

Warum nimmst Du 'cat' und nicht (z.B.) 'minicom'?



Ich habe auch ein Programm geschrieben, das die Daten liest
und interpretiert



In welcher Sprache? Mit welchen Einstellungen für die serielle
Schnittstelle?

Ich kann mir nicht so recht vorstellen, was diesen Fehler auslöst.

Hat jemand eine Idee?



Vor ein paar Tagen war 'hier' (oder war es ..hardware?) ein Hinweis
auf ein Analyse-Programm für eine serielle Schnittstelle.

Gruss, Holger

Ähnliche fragen