Forum: Mikrocontroller und Digitale Elektronik Reverse Engineering - "Ein-Draht Protokoll" - RPi B zu gewinnen!


von Julian W. (julian-w) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo an alle,

aktuell versuche ich ein Protokoll zu entziffern, komme aber leider 
nicht weiter. Es geht um eine Verbindung zwischen einem Controller und 
einem Motorsteuergerät. Der Controller kann nur Befehle für vorwärts 
beschleunigen, rückwärts beschleunigen und "nichts tun" geben.
Die Verbindung zwischen beiden Geräten ist über CAN-Transceiver 
hergestellt, ich glaube aber nicht das CAN genutzt wird. Der Controller 
ist ein PIC Microcontroller, bei dem Motorsteuergerät lässt es sich 
leider nicht herausfinden.

Im Anhang mal drei Mitschnitte, die ich mittels einem Saleae Logic 8 
erstellt habe, hinter einem CAN-Transceiver. Jeweils einmal im 
Ruhezustand, einmal vorwärts beschleunigend und einmal rückwärts 
beschleunigend.

Ich würde fast auf OneWire tippen, aber leider passt das nicht 100% und 
ich konnte damit auch nicht das Motorgerät ansteuern.

Über Tipps wäre ich sehr dankbar!

Um etwas motivieren kann derjenige, der den hilfreichsten Tipp gibt, 
von mir ein Raspberry Pi Modell B mit Kühlkörper, *SD-Card und 
Gehäuse* bekommen, falls er es will, natürlich kostenlos inkl. Versand 
;)

Viele Grüße
Julian

: Bearbeitet durch User
von Konrad (Gast)


Lesenswert?

Spannend!

Warum nimmst Du an, dass es kein CAN ist?

Hat der PIC CAN eingebaut? Ist der Transceiver am PIC an Pins 
angeschlossen, auf die CAN_TX und CAN_RX gelegt werden kann?

von Julian W. (julian-w) Benutzerseite


Angehängte Dateien:

Lesenswert?

Konrad schrieb:
> Warum nimmst Du an, dass es kein CAN ist?

Zum einen findet der "CAN-Analyzer" in Saleae Logic egal bei welcher 
Baudrate keine gültigen CAN-Pakete, zum anderen gibt es bei Richtung 1 
jede Millisekunde einen 4µs langen "Impuls" (siehe Anhang). Das spricht 
meiner Meinung nach gegen CAN und für was "selbstgebasteltes" oder 
selbst implementiertes.

Womit der CAN-Transceiver genau verbunden ist kann ich leider nicht 
sagen, ich werde morgen versuchen das ganze nachzuvollziehen, bisher war 
das aber nicht sehr erfolgreich. Das Problem ist, dass das ganze auf 
Lochraster mit SMD aufgebaut ist und folglich sehr fragile ist, und wenn 
die Platine hops geht hab ich gar kein Gerät mehr das ein 
funktionierendes "Signal" sendet.

: Bearbeitet durch User
von Jonas G. (jstjst)


Lesenswert?

Mach doch bitte ein Foto von der Platine.

Gruß Jonas

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Sieht mir aus wie async serial, 60000 baud, 8N0 (8-bit, no parity, no 
stop-bit)

Hinter den kleinen Impulsen vermute ich eher eine fehlerhafte Messung.
Kannst du die Schaltschwelle etwas höher einstellen?

: Bearbeitet durch User
von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Eine Message scheint immer aus 5 Bytes zu bestehen, das erste Byte ist 
immer 0x00 (ich nenne es mal "Sync-Byte"), und dann folgen 4 Datenbytes.

Die "errors" werden hier angezeigt, da der Salea-Decoder nicht mit 0 
Stoppbits arbeiten kann (der Decoder meckert hier also fehlerhafte 
Stopp-Bits an, ich nehme daher an, dass deine Hardware einfach ohne 
Stopp-Bit arbeitet).

: Bearbeitet durch User
von Harald (Gast)


Lesenswert?

Joe F. schrieb:
> ich nehme daher an, dass deine Hardware einfach ohne
> Stopp-Bit arbeitet).

Das wird doch Absicht sein, es gibt doch so einige Protokolle, die mit 
einem BREAK arbeiten, d.h. ein bewusste Überschreitung des normalen 
Frames, meist ein Nullbyte. Damit kann man eine klare Synchronisation 
erreichen, Framingerror UND empfangenes Byte = 0 bedeutet Sync.

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Jonas G. schrieb:
> Mach doch bitte ein Foto von der Platine.
>
> Gruß Jonas

Kann ich leider erst morgen Abend nachreichen, mach ich aber dann, falls 
noch nötig.

Joe F. schrieb:
> Sieht mir aus wie async serial, 60000 baud, 8N0 (8-bit, no parity, no
> stop-bit)

Alles klar, danke für die konkrete Angebe, das werde ich auf jeden Fall 
mal testen! :)
Wobei mir die Wahl der Parameter etwas seltsam vorkommt, aber gut, wer 
weiß wer da alles vorher dran rumgepfuscht hat...

Joe F. schrieb:
> Hinter den kleinen Impulsen vermute ich eher eine fehlerhafte Messung.
> Kannst du die Schaltschwelle etwas höher einstellen?

Leider nein, aber die Impulse konnt ich auch auf dem Oszi sehen von 
daher scheinen die wirklich "irgendwie" vorhanden zu sein, aber ich sehe 
sie auch eher als "Störimpulse" an

von Dieter W. (dds5)


Lesenswert?

Hat denn der am PIC benutzte Pin eine Peripheriemodul Funktionalität?

von Joe F. (easylife)


Lesenswert?

Ich möchte mich übrigens nicht um den Raspberry Pi bewerben.
Wer also noch weitere hilfreiche Ideen hat, nur zu ;-)

von Julian W. (julian-w) Benutzerseite


Angehängte Dateien:

Lesenswert?

Joe F. schrieb:
> Ich möchte mich übrigens nicht um den Raspberry Pi bewerben.
> Wer also noch weitere hilfreiche Ideen hat, nur zu ;-)

So wie es aussieht geht es auch weiter, scheinbar ist es doch CAN.

Es handelt sich um einen PIC18F248 mit 16Mhz Quarz. Soweit ich das 
beurteilen kann ist der CAN-Transceiver zumindest mit der CAN Peripherie 
verbunden. Der PIC läuft mit 3,3V.

Ich werde mal die Tage noch versuchen den PIC auszulesen, nur leider 
habe ich keinerlei Hardware für PIC Mikrocontroller.

Von daher ist das Rennen für den RPi vielleicht noch offen, das mit den 
60000 Baud asyn serial werde ich jetzt testen ;)


Ach ja an die anonymen Tipp-Geber: gerne könnt ihr auch mitmachen, aber 
postet dann, falls ihr Interesse am PI habt, einfach den SHA256 Hash 
eines von euch erdachten (komplexen) Passwortes. So kann ich später 
nachprüfen das ihr auch wirklich der Tippgeber wart ;)

Edit:
ich hab mal noch ein Video gemacht, wie ich langsam "Gas" gebe. Dabei 
fällt mir auf, das der erste Teil des Signals konstant bleibt und sich 
nur der hintere Teil verändert. Besonders auffällig finde ich das es 3 
"Längen" von "Impulsen" gibt (erwartet hätte ich 2): 15µs, 30µs und 
50µs.

Auch die Länge vom Signal "variiert", was ja gegen etwas serielles oder 
so sprechen sollte? Ich denke eher das die Länge der Impulse ausgewertet 
wird, nur wie ist mir noch ein Rätsel. Aber vielleicht könnt ihr mir ja 
da weiterhelfen und ich versuch mal noch an den Code im PIC zu kommen. 
Wenn ihr da Tipps für mich habt wäre das auch nicht schlecht, hab nur 
ein Labornetzteil und Arduinos, aber keinen speziellen PIC Brenner

Hier der Link zum Video:
http://public.julian-w.de/sonstiges/richtung2_oszi_1.mp4

: Bearbeitet durch User
von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Julian W. schrieb:
> scheinbar ist es doch CAN

Jo, stimmt.
Man muss den Decoder nur auf 60000 bit/s einstellen, dann kommt etwas 
Sinnvolles raus.

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Joe F. schrieb:
> Jo, stimmt.
> Man muss den Decoder nur auf 60000 bit/s einstellen, dann kommt etwas
> Sinnvolles raus.

Vielen Dank, das sieht seeehr sinnvoll aus :D Das werde ich gleich mal 
mit einem Arduino testen ob das funktioniert.

Wenn es das ist was soll dann mit dem RPi passieren? Will es hier ja 
nichts versprechen und dann nicht liefern hat sonst wer der hier eine 
Idee hinterlassen hat Interesse daran?

von Joe F. (easylife)


Lesenswert?

Julian W. schrieb:
> was soll dann mit dem RPi passieren?

Stelle es doch bei "Markt" als zu verschenken rein. Irgend ein Schüler 
oder Student wird sich sicher sehr darüber freuen.

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Joe F. schrieb:
> Stelle es doch bei "Markt" als zu verschenken rein. Irgend ein Schüler
> oder Student wird sich sicher sehr darüber freuen.

Alles klar werde ich heute Abend machen.

Dein Tipp mit CAN 60kbits stimmt übrigens konnte das gerade stabil zum 
laufen bringen :)

Kleine Frage wie genau kamst du auf die 60kbits? Geraten? Probiert? Oder 
irgendwie vermessen?

von Soul E. (Gast)


Lesenswert?

1 / 15µs ?

Man kann ja CAN laufen lassen wie man will, aber der nächste 
Standardwert wäre eigentlich 83,33 kbps gewesen.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Julian W. schrieb:
> wie genau kamst du auf die 60kbits? Geraten? Probiert? Oder
> irgendwie vermessen?

Der Analyzer gibt dir da schon einen ersten Tip.
Du suchst dir eine Stelle mit nach einzelnen Bits aussehenden 
Flankenwechseln.
Wenn du da mit dem Cursor drübergehst, vermisst Logic die Bits für dich.
Die Bitrate ist dann das doppelte der angezeigten Frequenz.
Wenn du dann 60600 bit/s ausprobierst, siehst du, dass die bits noch 
nicht wirklich toll aligned sind.
Der Rest ist dann raten, und 60000 erschien irgendwie logisch, und passt 
auch ganz gut.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Der PIC läuft doch mit 16MHz, da wird der Teiler 267 sein.

von Andreas O. (andi2doo)


Lesenswert?

Hallo Julian W.

melde mich jetzt mal ganz frech für den RPi wenn du ihn an mich abgeben 
möchtest.

Aber nur wenn keine anderen Ansprüche erhebt.

Würde auch den Versand bezahlen.

Danke Andi

von Julian W. (julian-w) Benutzerseite


Lesenswert?

Vielen Dank an Joe F. (easylife)! Den Trick werd ich bein nächsten mal 
auf jeden Fall nutzen um "Bitraten" zu raten ;)

Hab das ganze jetzt auch erfolgreich in Betrieb genommen. Der lange 
Impuls vor der eigentlichen CAN Nachricht hatte keinerlei Einfluss, 
funktioniert Prima ohne. Da wurde ich wohl auf die falsche Fährte 
gelockt mit.

Andreas O. schrieb:
> melde mich jetzt mal ganz frech für den RPi wenn du ihn an mich abgeben
> möchtest.

Da Joe F. (easylife) das RPi "theroetisch" gehört und es 
verlosen/verschenken will, werde ich es im Markt Forum anbieten. Nur wie 
ich es genau vergebe weiß ich noch nicht, vermutlich ein 24h Zeitfenster 
und dann werde ich mir noch eine (für User überprüfbare) Zufallsquelle 
zur Ziehung des Gewinner Beitrags suchen, irgendwie den Hash der 
Startseite oder sowas du wirst morgen einen Post im Markt finden ich 
werde ihn im Zweifel auch nochmal hier verlinken ;)

: Bearbeitet durch User
von Julian W. (julian-w) Benutzerseite


Lesenswert?


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.