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
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
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.
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.
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.
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.
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.
(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.
> 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
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.
> 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
Vanye R. schrieb: > Manches stirbt leider noch nicht mal; wenn du dreimal mit dem Auto > drueber faehrst. :) So wie RS232? :P
Josef R. schrieb: > Die MDP Kommunikation müsste ein ähnliches Problem haben, um einen > Sniffer für den Bus zu realisieren ..... MDB
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.