Forum: Mikrocontroller und Digitale Elektronik Serielles Protokoll gesucht / 0x7d 0x81.


von Sebastian B. (sebastian_b183)


Lesenswert?

Ich hab hier ein Pulsoxymeter welches eine Serielle Schnittstelle hat 
und per USB und Bluetooth erreichbar ist.
Ich habe den original demo source code gefunden, weil der Hersteller den 
offenbar mit in den Installer der Binaries gepackt hat.
Allerdings werden hier nur 4 Befehle verwendet.
Durch ausprobieren hab ich schon ein paar mehr herausgefunden, aber 
dieses Protokoll ist so verwirrend und immer etwas anders, dass ich 
gerne mal eine komplette Referenz hätte.

Der Hersteller scheint seit ein paar Jahren im U-Boot Modus zu sein und 
antwortet auf keine Mails.
Ein paar Informationen zu dem Gerät findet man auf 
https://fccid.io/P6S-RX101
Im inneren werkelt ein TI MSP430F247.

Ich glaube, dass sie ein eigenes Protokoll entwickelt haben und hab 
daher wenig Hoffnung, dass ich das komplett entschlüsseln kann. Zumal 
ich auch schon einmal das Gerät eingefroren hab und nur durch Zufall 
wieder resetten konnte (Ich könnte zwar auch die Batterie ablöten und 
mir so einen Hardreset bauen...).
Was mich wirklich interessieren würde, sind Befehle mit denen ich auf 
dem Gerät schreiben kann.

Aber zum Protokoll selber: lt. dem original Source code ist das ganze 
Paket basiert und Pakete sind immer 9 Byte lang.
Das Format ist in etwa
1
| Type | Signflag | Data_0 | Data_1 | .... | Data_6 |

Das Signflag ist dabei am MSB immer 1 und wenn das i-te bit 0 ist, dann 
wird von Data_i 128 abgezogen.

Um zu senden, setzt man den Typ auf 0x7d und in Data_0 wird dann der 
request geschrieben. Die anderen Data bytes sind 0.
Ein Command lt. original Source ist zB;
1
0x7d 0x81 0xa1 0x80 0x80 0x80 0x80 0x80 0x80
Das signflag ist hier 0b10000001, also bleibt 0xa1 und 0x80 wird zu 0x00 
dekodiert.

Allerdings scheint die Länge vom Paket nicht immer 9 byte zu sein. Ich 
hab Antworten gesehen die nur 8 byte, 4byte oder sogar nur 2 byte sind.
Die Länge wird allerdings scheinbar nirgends kodiert.
Ebenfalls reagiert das Gerät auf Kommandos mit unterschiedlicher Länge 
gleich. dH man kann die 6byte padding hinten einfach weglassen und es 
klappt trotzdem.

Auf Anfrangen im Data_0 reagiert das Gerät zwischen 0x00 und 0x7f gar 
nicht, ab 0x80 gibt es bei Befehlen die es gar nicht kenn ein 0x0b 0x81 
0xNN 0x85 zurück, 0xNN ist dann das was man gefragt hat.
Ab 0xa0 kommen dann die funktionierenden Befehle und am 0xb1 geht wieder 
nix.

Ich hab auch probiert das Sign Flag auf 0x80 zu setzn. Dann erhält man 
wieder zwischen 0x00 und 0x7f keine Antwort und zwischen 0x80 und 0xff 
nur den Fehlercode.

Ist das also - wie ich vermute - ein selbstgebasteltes Protokoll oder 
gibt es da tatsächlich irgendwo Anhaltspunkte welche Befehle man 
probieren könnte?

von Achim M. (minifloat)


Lesenswert?

Sebastian B. schrieb:
> Ab 0xa0 kommen dann die funktionierenden Befehle und am 0xb1 geht wieder
> nix.

Weißt du denn was die tun sollen, oder tut sich einfach überhaupt 
irgendwas?

Sebastian B. schrieb:
> Der Hersteller scheint seit ein paar Jahren im U-Boot Modus zu sein und
> antwortet auf keine Mails

Mach' uns mal Fotos vom Gerät, wie sieht es aus, welche Schnittstellen 
usw. Vielleicht hast du das Gerät eines Resellers, der Pleite gegangen 
ist.

mfg mf

: Bearbeitet durch User
von Sebastian B. (sebastian_b183)


Lesenswert?

> Weißt du denn was die tun sollen, oder tut sich einfach überhaupt
irgendwas?

Naja ich hab eine ungefähre Ahnung was das Gerät können sollte und diese 
Funktionen hab ich auch erfolgreich implementiert.
Allerdings gibt es Commands auf die das Gerät antwortet, ich aber nicht 
weiß was die Antwort bedeutet und ich hab ja nur 1/256 des Spektrums an 
Befehlen ausprobiert...


> Vielleicht hast du das Gerät eines Resellers, der Pleite gegangen
ist.

Ich hab tatsächlich heute herausgefunden, dass es ein baugleiches Gerät 
eines Chinesischen Herstellers gibt und es dazu auch github projekte von 
Leuten gibt die wohl ebenfalls das Protokoll reverse engineered haben:

    https://github.com/atbrask/CMS50Dplus
    https://github.com/tobac/cms50ew

Die wissen aber offenbar auch nicht mehr als ich herausgefunden habe :D

Bei der FCC findet man von dem Baugleichen gerät auch bilder: 
https://fccid.io/2ABOGCMS50EW

Mein gerät ist dieses hier: https://fccid.io/P6S-RX101

kA ob Contec das für reflex in lohnarbeit gebaut hat und dann selber 
vercheckt hat oder ob die das nur relabeln oder wie auch immer...
Denn immerhin hat reflex das zuerst bei der FCC angemeldet und mein 
Gerät hat auch hinten ein Label "Beta testing not for resale"...

: Bearbeitet durch User
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.