Forum: Mikrocontroller und Digitale Elektronik I2C - 16bit Adresse in Python LESEN


von Schmitti (Gast)


Lesenswert?

Hallo,

ich habe einen Chip, der das folgende I2C Lese Regime braucht 
(Standard).

START -   DEV_ADR+W - ACK - REG_ADR[15:8] - ACK REG_ADR[7:0] - ACK -
RESTART - DEV_ADR+R - ACK - DATA [15:] - ACK - DATA[7:0] - ACK - STOP

Ich habe es in Python versucht und bekomme es nicht hin, die 16bit I2C 
Register Adresse LESEND zu verwenden.

Schreiben geht
sh:
i2cset -y -f 0 0x12 0x12 0x34 0xAB 0xCD i
Python:
bus.write_i2c_block_data(0x12, 0x12, [0x34, 0xAB, 0xCD])

Das Nimmt der Chip auch an.

Aber das LESEN bekomme ich nicht implementiert.

Hat jemand von euch einen solchen Fall schon mal getestet?
Google gibt ein paar Bsp, aber immer ist nach 8bit Register Ende.

Hat jemand einen Hinweis, wie man das umsetzen kann?
Ich arbeite auf einem Raspberry...

Vielen Dank!

von Peter D. (peda)


Lesenswert?

Schmitti schrieb:
> ich habe einen Chip

Dann nenne dochmal dessen genaue Bezeichnung.

von holger (Gast)


Lesenswert?

>RESTART - DEV_ADR+R - ACK - DATA [15:] - ACK - DATA[7:0] - ACK - STOP

Das letzte zu lesende Bte muss mit einem NACK gesendet werden:

RESTART - DEV_ADR+R - ACK - DATA [15:] - ACK - DATA[7:0] - NACK - STOP

sonst erwartet der Chip dass du noch mehr Bytes lesen willst.

von holger (Gast)


Lesenswert?

>Das letzte zu lesende Bte muss mit einem NACK gesendet werden:

'y' Taste kaputt;) Und das Byte muss natürlich "gelesen" und mit NACK 
quittiert werden.

von Gerd E. (robberknight)


Lesenswert?

Schmitti schrieb:
> RESTART - DEV_ADR+R - ACK - DATA [15:] - ACK - DATA[7:0] - ACK - STOP

bist Du Dir da mit dem "DATA [15:]" sicher? Ich vermute eher daß das 
"DATA [15:8]" heißen sollte.

von Schmitti (Gast)


Lesenswert?

Hallo,

auf der gefühlten Seite 36 in Google in irgendeinem git im 10. 
Unterornder habe ich einen Hinweis gefunden und konnte nun zumindest in 
der Konsole lesen:

i2cset -y -f 0 0x12 0x12 0x34 b
i2cget -y -f 0 0x12 0x12 w

Ich schreibe also erstmal nur die Adresse und lese dann von 
Reg_addr[15:8].
Da bekomme ich zwar folgende Ausgabe:
0x[7:0][15:8]

Die beiden Byte sind zwar vertauscht, aber immerhin komme ich erstmal so 
an die Daten.

Fühlt sich ein wenig komisch an, es so zu machen, aber solange es zum 
Ziel führt...

Danke an Alle!

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.