Forum: Mikrocontroller und Digitale Elektronik Reverse-Engineering Personenwaage


von Thomas K. (kthomas)


Lesenswert?

Hallo,
zwecks Wififizierung einer Wage habe ich den dort eingebauten i2c-Bus 
zum Eeprom (FT24C02A) angezapft. Und siehe da bei jeder Wägung werden 
Daten übertragen. Die Werte scheinen mit der gewogenen Masse 
zusammenzuhängen, denn bei der Wägung derselben Masse werden dieselben 
Daten übertragen und bei verschiedenen Massen verschiedene Daten.

Allerdings bekomme ich keinen Kopf daran wie die Daten und die gewogene 
Masse zusammenhängen, hat jemand von euch da spontan eine Idee?

Grüße Thomas


Masse  Bytes
in kg  1  2    3   4  5    6   7   8    9   10   11   12
--------------------------------------------------------
15,2  80  8  161  21  0  161  24   2  160   15   38    0
16,3  80  8  161  21  0  161  48   5   64   30   81  128
16,8  80  8  161  21  0  161   0  10  128   60  168    0
17,9  80  8  161  21  0  161   0   1   80    7  150   96
18,1  80  8  161  21  0  161   0  10  128   60  181    0
19,2  80  8  161  21  0  161   0  42    0  243    0    0
19,5  80  8  161  21  0  161  64  21    0  121  134    0
20,6  80  8  161  21  0  161  32  10  128   60  206    0
22,2  80  8  161  21  0  161  12   1   80    7  155  192
22,7  80  8  161  21  0  161   0  42    0  243  140    0
23,3  80  8  161  21  0  161   0  42    0  243  164    0
23,8  80  8  161  21  0  161   0  42    0  243  184    0

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Schau dir die Werte mal in anderer Darstellung an, Binär/Hex,

Ich denke, das ist eine Lookuptabelle, die einem Binären Muster folgt.

von Alexxx (Gast)


Lesenswert?

ein EEPROM bei einer Waage kann eigentlich nur eine Korrekturtabelle (=> 
Lookup) sein, um eine Linearisierung einer "Bananenkennline" zu 
erreichen.
Was die Werte aber bedeuten, das weiß nur der Hersteller und Sherlok 
Holmes.

Zuerst müsstest du trennen, was zum EEPROM geht (Adresse) und was 
ausgelesen wird.

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


Lesenswert?

Dein Sniffer scheint noch nicht ganz korrekt zu lesen, denn die I²C 
Adresse des EEPROM ist ja 0xA0 und nicht 0X80. Ein 0XA1 würde daraufhin 
deuten, das aus dem EEPROM gelesen wird, ein 0XA0 auf einen 
Schreibvorgang, der ja auch bei jedem Random-Lesevorgang zuerst kommen 
muss.

Schon die zu lesende Adresse aus dem EEPROM wäre hilfreich und lässt 
evtl. Rückschlüsse auf das Wägeergbnis zu.

von Walter Tarpan (Gast)


Lesenswert?

Matthias S. schrieb:
> ein Sniffer scheint noch nicht ganz korrekt zu lesen, denn die I²C
> Adresse des EEPROM ist ja 0xA0 und nicht 0X80.

Wieso, paßt doch:

80 -> 50
161 -> A1

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


Lesenswert?

Walter Tarpan schrieb:
> 80 -> 50

Nö, passt nicht. Muss ja eigentlich 160 sein, denn 0xA0 = 0d160.

von Hans-werner M. (hanswerner)


Lesenswert?

Hallo Thomas

Wenn ich das richtig sehe:

22,7  80  8  161  21  0  161   0  42    0  243  140    0
23,3  80  8  161  21  0  161   0  42    0  243  164    0
23,8  80  8  161  21  0  161   0  42    0  243  184    0

22,7kg = 19,2kg + 140*25g
23,3kg = 19,2kg + 164*25g
23,8kg = 19,2kg + 184*25g

Siehe auch den 19,2kg Wert. Dort ist der Wert in der vorletzten Spalte 
0.
Für die anderen Werte sehe ich noch keinen Zusammenhang.

von Philipp K. (philipp_k59)


Lesenswert?

Kannst auch das Display reversen.. Gabs mal irgendwo nen Projekt, die 
twitternde Personenwage.

von Thomas K. (kthomas)


Lesenswert?

Hallo,
danke Matthias die ersten beiden Bytes wurden in der Tat nicht richtig 
gelesen die ersten 6 Bytes lauten korrekt wie folgt:

Byte1    Byte2    Byte3    Byte4    Byte5    Byte6     Byte7..12
0xA0     0x10     0xA1     0x15     0x00     0xA1      ...
10100000 00010000 10100001 00010101 00000000 10100001  ...

WRITE    ADRESSE  READ     0x10     0x11     READ      0x12...

Was soll das bedeuten?
So wie ich das verstehe wird hier ausschließlich gelesen und das immer 
ab derselben Adresse 0x10. Dann könnten aber nicht für die Bytes 7..12 
verschiedene Daten herauskommen. Wo ist mein Denkfehler?

Dein Ansatz Hans-werner passt auch auf die anderen Werte. Offset und 
Steigung sind aber für jeden Wert von Byte 10 unterschiedlich wobei die 
Steigung immer ungefähr 1/(Byte10 * 0,1654) beträgt. Den Offset 
(f(Byte10)) kann ich aber immer noch nicht zuordnen:

Masse = f(Byte10) + Byte11 / (Byte10 * 0,1654)

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


Lesenswert?

Thomas K. schrieb:
> Was soll das bedeuten?
> So wie ich das verstehe wird hier ausschließlich gelesen und das immer
> ab derselben Adresse 0x10.

Sehe ich auch so, und ergibt eigentlich nur dann Sinn, wenn ab Adresse 
0x10 ein permanenter Korrekturwert gespeichert wäre.
Ich vermute aber, das dein Sniffer mit Byte 5 seine Probleme hat, wenn 
hier ein erneutes Write käme, um eine andere Random Read Adresse zu 
lesen, könnte man Byte 7 bis 12 erklären. Dazu müsste nach Byte 4 ein 
Stop kommen.
Nur im sicher zu sein: liegen A0-A2 auf Masse? Liegt WP dauerhaft auf 
Vcc oder geht dieser Pin zum Waagenprozessor?
Hat die Waage sowas wie Speicherplätze für verschiedene Benutzer?

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.