Forum: Mikrocontroller und Digitale Elektronik RS232 mit 9N1 auslesen


von Josef R. (jr1234)


Lesenswert?

Hallo,

ich habe eine ganze Zeit gelesen, bekomme aber die Fäden nicht richtig 
zueinander.

Das Ziel ist ein seriellen Bus zu sniffen, zu loggen.
Die Parameter sollen 9N1 sein.
Alle Versuche mit 8N1 bringen keinen Erfolg, bzw nur Datenmüll.

Jetzt habe ich hier verschiedene Ansätze gelesen, die mich auf die Idee 
bringen, das 9 Bit als parity Bit zu verarbeiten  -- ich will NUR lesen!

Hintergrund: im 9. Bit soll wohl das Kennzeichen Adresse/Data stehen...
Meine Idee: ich lese via USB-RS232 8 bit und "hole" mit das Parity 
zusätzlich, und weiss dann, Addy oder data der 8 Bits.

Aber wie kann ich dies machen ?
8 Bit lesen ...schaffe ich. Aber wie bekomme ich zu diesen 8 Bit das 
parity Bit vom controller. Und wie überrede ich den Controller, das 
Barity Bit selber NICHT auszuwerten, sondern mir zu senden ?


Vielleicht ist ja auch der ganze Ansatz falsch?

Die MDP Kommunikation müsste ein ähnliches Problem haben, um einen 
Sniffer für den Bus zu realisieren .....

Danke für jeden Hinweis.

JR

von Sigi S. (sermon)


Lesenswert?

Oh ein Glaskugel Fred

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Josef R. schrieb:
> Die Parameter sollen 9N1 sein.
Ich würde genau diese Vermutung und die Baudrate ganz einfach 
zuallererst mal mit einem Onzilloskop oder einem Logikanalyzer 
überprüfen.

> Und wie überrede ich den Controller, das Barity Bit selber NICHT
> auszuwerten, sondern mir zu senden ?
Der leider völlig geheime Controller legt das Paritybit normalerweise 
einfach in einem 9. Registerbit ab, wo man es auslesen und auswerten 
kann.

BTW: bitte nicht Plenken. Ein Satzzeichen hat keine eigene Zeile 
verdient!

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

Josef R. schrieb:
> Aber wie kann ich dies machen ?
> 8 Bit lesen ...schaffe ich. Aber wie bekomme ich zu diesen 8 Bit das
> parity Bit vom controller. Und wie überrede ich den Controller, das
> Barity Bit selber NICHT auszuwerten, sondern mir zu senden ?

Die meisten Mikrocontroller ala AVR bieten direkten Zugriff darauf. Auf 
dem PC wird das schwierig bis unmöglich, denn da kümmert sich die 
Hardware drum und gibt dir bestenfalls einen Paritätsfehler aus. Den 
kann man aber rückwärts rechnen! Sprich, rechne die Parität der 8 
Datenbits aus (XOR), dann weißt du, welchen Wert Bit 9 haben muss. Ist 
Bit 9 aber anders herum,  wird ein Paritätsfehler angezeigt. Dabei 
gerade und ungerade Parität beachten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Auf dem PC wird das schwierig bis unmöglich
Ich würde das auf dem PC mit meinem PicoScope machen und nicht extra 
Hardware basteln. Bis ich nämlich die Zeit und den Aufwand rechne, den 
man für eine selbstgefrickelte Lösung braucht, kannst ich mir so ein 
Oszi kaufen und habe fürderhin bei ähnlichen Problemen schon die Lösung 
in der Schublade.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Josef R. schrieb:
> die mich auf die Idee
> bringen, das 9 Bit als parity Bit zu verarbeiten

Oder irgendeine Form von soft Serial.
Eine solche Lösung verwendet man doch nur, wenn die geheime UART 
Komponente keinen 9 Bit Modus kennt.

von Falk B. (falk)


Lesenswert?

Lothar M. schrieb:
>> Auf dem PC wird das schwierig bis unmöglich
> Ich würde das auf dem PC mit meinem PicoScope machen und nicht extra
> Hardware basteln.

Stimmt. Oder einen anderen billigen Logicanalyzer mit RS232 Dekoder.

von Bruno V. (bruno_v)


Lesenswert?

Josef R. schrieb:
> 8 Bit lesen ...schaffe ich. Aber wie bekomme ich zu diesen 8 Bit das
> parity Bit vom controller. Und wie überrede ich den Controller, das
> Barity Bit selber NICHT auszuwerten, sondern mir zu senden ?

Konfigurier mit Parity, z.B. Even. Wenn für die 8 Bit das Parity-Bit 1 
sein muss und Du einen Fehler hast, dann war es wohl 0. So kannst Du für 
alle 4 Kombinationen Parity auswerten. Bei Deinem Umsetzer hast Du 
Glück und er bricht daraufhin nicht mit großem Getöse für die nächsten x 
Bytes einfach ab. Lebe einfach mit den Fehlermeldungen.

von Nick (b620ys)


Lesenswert?

SigRock + der billigste davon unterstützle Logic Analyzer.

von Stefan R. (stefan_r_bs)


Lesenswert?

(Vor-Edit: Da ich zu langsam schreibe, wurde vielleicht alles wichtige 
bereits gesagt. Schicke meinen Senf trotzdem ab, nachdem ich ihn nun 
verfasst habe...)

Das Problem ist ja, dass die gängige PC-Hardware sich nicht auf 
9-Bit-Wörter einstellen lässt. Habe nie mit 9-Bit zu tun gehabt, daher 
muss ich raten:

Mein Ansatz wäre, ein Parity-Bit einzustellen (Modus egal), dann passt 
die Wortlänge und Du kannst 8-Bit-Wörter empfangen. Parity-Fehler 
ignorieren, die Information des 9. Bits geht verloren.

Falls des 9. Bit wichtig ist, wird es wohl komplizierter. Man könnte 
probieren: Parity = SPACE setzen, Bytes einzeln vom Port lesen, nach 
jedem Byte das Line-Status-Register prüfen, ob ein Parityfehler 
vorliegt. Falls nein, war das 9. Bit = 0, falls ja, war es 1.

von Vanye R. (vanye_rijan)


Lesenswert?

> Das Problem ist ja, dass die gängige PC-Hardware sich nicht auf
> 9-Bit-Wörter einstellen lässt.

Das stimmt nicht. Sowas war bei unseren Opas mal gaengig in MCS51. War 
wohl mal so eine Siemensidee fuer Bussysteme.

The MCS-51 (8051) microcontroller family supports 9-bit serial 
communication in Modes 2 and 3, primarily designed for multiprocessor 
master-slave communication. In this mode, the 9th bit (stored in 
TB8/RB8) is used to distinguish between address bytes (9th bit = 1) and 
data bytes (9th bit = 0), allowing the master to send data to specific 
slaves.


Eine weitere Moeglich waere wohl ein RP2040 mit Pico.

Auch Renesas hatte ein paar MCUs wo man alles zwischen 5 und 16Bit 
einstellen konnte. Leider faellt mir der Typ gerade nicht ein.

Unmoeglich ist das wohl nur fuer Leute die nur STM32 kennen. .-)

Vanye

von Rahul D. (rahul)


Lesenswert?

Vanye R. schrieb:
> Unmoeglich ist das wohl nur fuer Leute die nur STM32 kennen. .-)

Warum? Die können das auch; wenn auch nicht stufenlos, aber 7, 8 und 9 
Datenbits sind möglich.
Das 9Bit-System ist doch asbach und dann doch ziemlich verbreitet.

von Vanye R. (vanye_rijan)


Lesenswert?

> Das 9Bit-System ist doch asbach und dann doch ziemlich verbreitet.

Manches stirbt leider noch nicht mal wenn du dreimal mit dem Auto 
drueber faehrst. :)

Vanye

von Rahul D. (rahul)


Lesenswert?

Vanye R. schrieb:
> Manches stirbt leider noch nicht mal; wenn du dreimal mit dem Auto
> drueber faehrst. :)

So wie RS232? :P

von Obelix X. (obelix)


Lesenswert?

Josef R. schrieb:
> Die MDP Kommunikation müsste ein ähnliches Problem haben, um einen
> Sniffer für den Bus zu realisieren .....

MDB

von Josef R. (jr1234)


Lesenswert?

vor erstmal:  besten Dank für die Hinweise.


Der Konverter ist nicht geheim. Zur Zeit ist es ein Edgeport/1.
Die Lösung sollte aber eigentlich unabhängig sein.


Der Ansatz über das Parity Bit würde ich gerne verfolgen ...
Aber ich verstehe es noch nicht. Ich muss dem Konverter also vorgaukeln, 
ein Parity Bit wäre im Stream...Aber verwirft er dann nicht die Bytes, 
deren Parity Bit nicht stimmt ?

Und wie lese ich die aus, pyserial oder python serial....liefert den 
line-status nur begrenzt zurück.
Ich müsste dem konverter aus meiner Sicht ja sagen, das er parity Fehler 
akzeptieren soll. Aber wie ?  Und wi das das Parity auslesen ?

So ganz verstehe ich es (noch) nicht


Ozzi: Werde ich heute Abend probieren. Mein Prob: ich kann die Bytes 
nicht separieren....da kommt gleich eine Menge Bytes...

LA: Geht zur Zeit nicht: Ich kann den Pegel nicht anpassen, da fehlt mir 
etwas ....arbeite daran!


J.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Josef R. schrieb:
> Mein Prob: ich kann die Bytes nicht separieren....
Natürlich kannst du das, der "Controller" kann es ja auch.
> da kommt gleich eine Menge Bytes...
Geht trotzdem: fang einfach bei irgendeinem Bit an und prüfe, ob das 
nachfolgende Telegramm sinnvoll ist. Nach spätestens 9 Versuchen hast du 
aufsynchronisiert.

> Zur Zeit ist es ein Edgeport/1.
> Ich muss dem Konverter also vorgaukeln...
Du must dem gar nichts vorgaukeln. Wenn der das von sich aus nicht kann, 
dann bist du schon fertig: es geht nicht.

> Der Ansatz über das Parity Bit würde ich gerne verfolgen ...
Dafür musst du näher ran an die Hardware.

Lothar M. schrieb:
> BTW: bitte nicht Plenken. Ein Satzzeichen hat keine eigene Zeile verdient!
Naja, den Versuch wars wert. Wo lernt man denn so einen Müll? Warum 
machst du nicht konsequenterweise vor einem Punkt auch ein Leerzeichen, 
wie du es vor einem Fragezeichen auch machst?

: Bearbeitet durch Moderator
von Nick (b620ys)


Lesenswert?

Josef R. schrieb:
> LA: Geht zur Zeit nicht: Ich kann den Pegel nicht anpassen, da fehlt mir
> etwas ....arbeite daran!

Das ist auch wirklich eine überwältigende Aufgabe. Da fummelt man lieber 
Paritybits um die dann in der Folgesoftware nicht verarbeitet werden 
können.

Spannungsteiler, eine Diode und fünf Mal die Finger am Lötkolben 
verbrennen wenn man wieder mal vergessen hat wo die warme Seite ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.