Re(7): Proprietärer 2-Draht-Bus, Botschaften manipulieren/ändern
Geizhals » Forum » Programmierung » Proprietärer 2-Draht-Bus, Botschaften manipulieren/ändern (13 Beiträge, 624 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Proprietärer 2-Draht-Bus, Botschaften manipulieren/ändern
06.02.2017, 21:50:08
Ich habe 5 Geräte an einem offensichtlich proprietären 2-Draht-Bus.

Die für mich relevanten Botschaften/Telegramme habe ich bereits entschlüsselt.

Ich möchte zumindest eine der Botschaften von einem der Geräte abhängig von ihrem Inhalt verändern, d.h. die "richtige" Botschaft entfallen lassen und durch eine veränderte Botschaft ersetzen.
(Konkret, aber vereinfacht: Wenn 1 von 3 bestimmten Bits gesetzt ist, möchte ich abhängig von der Uhrzeit zusätzlich ein weiteres der beiden nicht gesetzten Bits setzen.)

Ich habe mir überlegt, die Busleitung aufzutrennen und ein selbst programmiertes Gateway dazwischenzuhängen. Das Gateway kopiert die Botschaften der 4 unveränderten Geräte auf den anderen Bus bzw. es liest die Botschaften von dem 1 Gerät, dessen Inhalt ich manchmal verändern will, ein und schreibt die veränderten Botschaften auf den Bus der 4 unveränderten Geräte.

Hier noch einige Infos, die ich über die Geräte/Botschaften habe und für relevant erachte:

Alle 5 Geräte senden permanent in immer der gleichen Reihenfolge am Bus eine "Standard"-Botschaft (enthält als Daten vmtl. irgendeine Seriennummer/Typ o.ä.). Danach kommt noch irgendeine weitere "Abschluss-Botschaft". Wer die sendet weiss ich nicht.
Wenn ein Gerät Daten übertragen will, sendet es anstatt der "Standard"-Botschaft seine "Daten"-Botschaft. Diese "Daten"-Botschaft wird nur 1x versendet, wenn sich der Inhalt ggü. der zuletzt gesendeten "Daten"-Botschaft ändert.
Beim Hochfahren des Bus findet offenbar irgendeine Initialisierung statt, bei der die IDs der Geräte (in meinem Fall 0x00-0x04 bzw. 0xF0 für den Abschluss) vergeben werden. Dabei scheint es keine Priorität zu geben, die IDs scheinen "zufällig". Wird ein Gerät abgeklemmt und wieder angeklemmt, hat es u.U. eine andere ID als vorher. Trotzdem funktioniert der Gesamtverbund problemlos.

Wie gehe ich das am Besten an?

Mein Hauptproblem scheint das richtige Timing zu sein. Wie schaffe ich es, immer die gleiche Reihenfolge einzuhalten?

Bisher habe ich nur mit HTerm "mitgelauscht" und dann die Botschaften entschlüsselt.
Ein Sendeversucht mit HTerm hat keine Reaktion verursacht, sie ist nichtmal bei den "gesendeten Botschaften" aufgeschienen.

BMW 320d E90: Spritmonitor.de
Yamaha FZ6-S Fazer: Spritmonitor.de
Antworten PM Alle Chronologisch
 
Melden nicht möglich
.......
Re(7): Proprietärer 2-Draht-Bus, Botschaften manipulieren/ändern
08.02.2017, 13:28:25
Jein. RS485 braucht nur 2 Drähte für halbduplex.

hm - tatsächlich.
Faszinierende Situation: RS485 hat "praktisch" tatsächlich verschiedene Eigenschaften, die sich mit deinem Problem decken, gleichzeitig wäre es im Grunde aber nur die elektrische Spezifikation, aber genau die stimmt eigentlich nicht mit dem Szenario überein = selbst wenn dein Adapter das Signal korrekt mitlesen kann - woher "weiß" er, wie er es punkto Spannung senden muß?

Die Sende-/Empfangs-Diskriminierung ist dort auch nicht über Dioden gelöst (sondern http://www.roboternetz.de/bilder/rs485-2leiter.jpg  OpAmp  - wobei ich aber nicht weiß, ob diese Methode mit TTL-Pegeln in beide Richtungen = also eben auch beim Senden funktioniert, also einen kompatiblen Pegel ergibt, und nicht RS485-differentielle Spannungen (gibt Platinchen, die RS232 über eine externe Referenzspannung auf beliebige Pegel bringen, (also umgekehrt zu 1488/1489 bzw. MAX232), aber deren Schaltung wird sich mit halbduplex auch nicht vertragen).

bleibt mir nur etwas Brainstorming:

Ich glaube, daß du ein Detail auf der elektrischen Seite übersehen hast, das
dein Adapter nicht mitbekommt.

Das will ich nicht ausschliessen.
Umgekehrt, warum sehen meine entschlüsselten Botschaften dann so plausibel und
sinnvoll aus?

genau das: im lesenden Zustand kommt dein Interface grad noch mit mit den elektrischen Gegebenheiten, aber wenn es mit derselben Methode rausschreibt, stimmen möglicherweise die Spannungen nicht? Insofern hast du noch Glück, das du bisher nicht den ganzen Bus geschossen hast ?!?
Auf Seite der MSP430 (ich gehe mal davon aus, daß in allen Geräte ein Ableger davon drin ist - wäre widersinnig, da parallel für verschiedene Controllerfamilien zu entwickeln, wenn EINE idR genügend  Varianten zur Auswahl hat) müssen die Pins irgendwie mit dem Halbduplex/Senden-Empfangen klarkommen, falls da wirklich keinerlei Schaltung wie oben verlinkt, am Werk ist = entweder die Pins kennen eine Art Tri-state oder sie müssen über softwaremässiges Timing/Synchronisation zw. input und output umschalten. 4800 ist für die heutigen CPU-Taktraten keine Herausforderung bzw. die meiste Zeit wird wohl gehorcht.
Eventuell kennt der Chip aber auch einen Modus, wo das Pin einen Interrupt losschickt.

Was bleibt jetzt an Möglichkeiten und Schritten?
Herausfinden, wie die Geräte halbduplex pinseitig lösen bzw. was sich vom MSP430 her anbietet

Interface nachbilden ... idealerweise indem man genau so einen hernimmt: http://www.digikey.de/product-detail/de/dlp-design-inc/DLP-2232MSPF/813-1034-ND/2781070  könnte hinkommen. Mit etwas Glück findet sich dann noch Beispielcode, der Schnittstellenübersetzung zw. eigenen Protokollen und dem FTDI spielt.

oder: sich den Spaß antun und direkt mit dem FTDI-Bitbanging-Mode auf einem üblichen FT2232/FT245-Adapter herumspielen? Leider hab ich bis dato nichts gefunden, was da einen schönen Zugang liefert. Unter Linux könnten die one-wire-Pakete helfen (ow*), muß ich mir aber auch erst reinziehen.


Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung