Forum: Mikrocontroller und Digitale Elektronik JVC Data Battery Protokoll


von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Bevor ich mich selber ransetze und anfange, die Kommunikation 
auszuschnüffeln:
Hat sich hier schon mal jemand mit dem Protokoll diser LiIon Akkus 
beschäftigt?
Es handelt sich um die 'Data Battery' der Typen BN-VF808, BN-VF815 und 
BN-823, die vermutlich über ein 1-wire Protokoll mit der Kamera 
kommunizieren.
Da Fremdhersteller das nicht können, müssen solche Akkus per externem 
Kabel an die DC-Buchse angeschlossen werden und die Kamera weiss dann 
den Ladezustand des Akkus nicht. D.h. das sie sich dann einfach 
abschaltet.

Die Originalakkus sind richtig teuer, deswegen die Frage.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

So, falls nochmal jemand über diesen Thread stolpert, ich habe das 
Protokoll zum grössten Teil geknackt.
Es ist tatsächlich eine 1-Wire Kommunikation, die Kamera scheint der 
Initiator zu sein, indem sie die am Akku als 'C' bezeichnete Leitung für 
100-150ms auf low zieht. Das 'weckt' den Akku-MC auf. Innerhalb von ca. 
500ms muss nun ein Kommando der Kamera folgen, sonst geht der Akku 
wieder in Sleep.
Die Kommunikation erfolgt nun mit 1200 Baud, ein Pullup ist an der 'C' 
Leitung immer aktiv.
Lediglich zwei Kommandos scheint es zu geben, jeweils durch 2 Bytes der 
Kamera initiiert:
1
0x01 0x07 : Kommando 'Identifikation' Akku antwortet mit 
2
0x56 0x46 0x08 0x08 0xD0 0x02 0x3F 0xD0 0x02 0xC8 0xDC 0x64 // in ASCII:
3
'V'  'F'
bei einem Akku vom Typ VF808. Vermutlich würde ein VF-815 mit 'VF' 0x08 
0x15 antworten. Die Bedeutung der folgenden Bytes erschlieest sich mir 
nicht, es handelt sich aber nicht um eine Seriennummer, da meine beiden 
Akkus so ziemlich das gleiche antworten. Den Abschluss bildet eine CRC-8 
Checksum mit Polynom 0x07, im obigen Beispiel die 0x64.
Das andere benutzte Kommando (0x02 0x0e) ist die Abfrage des 
Ladezustandes. Der Akku scheint einen 2-Kanal 10-bit ADC zu benutzen, 
der gespreizte Werte pro Zelle für den Bereich 4,2 Volt bis 'Akku leer' 
ungefähr bei 3,4 Volt ausgibt:
1
0x02 0x0E 0x08 0x04 0xCB 0x02 0xDD 0xC3 0x02 0x00 0x00 0x4C 0xDD 0xDC 0x0E
2
Command 
3
unbekannt   NN
4
ADC1             LL   MM   HH
5
ADC2                            LL   MM   HH 
6
Runtime?                                       LL   MM   HH
7
unbekannt                                                     NN   NN
8
CRC-8                                                                   NN
Ein randvoller Akku liefert also z.B. 0xe0 0xff 0x02 als ADC Wert 
zurück. Auch hier bildet eine CRC-8 über den gesamten Datensatz (also 
mit Kamera Kommando) mit 0x07 als Polynom den Abschluss. Ein leerer Akku 
gibt tatsächlich 0x00 0x00 0x00 zurück, bei einer Restspannung von 
gesamt ca 6,8 V.
Im Moment verfolge ich es nicht weiter, da ich genug Akkus habe.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

In den unbekannten Werten könnten evtl. noch Informationen zur Anzahl 
der Ladezyklen, Temperatur u. Ä. stecken.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Magnus M. schrieb:
> In den unbekannten Werten könnten evtl. noch Informationen zur Anzahl
> der Ladezyklen, Temperatur u. Ä. stecken.

Durchaus möglich, ich habe jetzt nicht alle Aussenbedingungen 
systematisch verändert. Allerdings antworten ein nagelneuer und ein 
gebrauchter Akku so ziemlich das gleiche, so dass Ladezyklen, wenn 
überhaupt, nur versteckt übertragen werden.
Das komplizierte am Protokoll war allerdings wirklich die Suche nach dem 
Polynom für die CRC-8, der Rest ist durch einen interessierten Bastler 
sicher noch rauszufinden.

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.