raspberry i2c

Gast #5201823
Lesenswert?

Hallo
ich suche eine Möglichkeit, den raspberry pi über i2c mit einem Gerät 
kommunizieren zu lassen.
Das Problem: Das Gerät erwartet folgendes "protokoll":

START(Write)
  AnzahlderWriteDaten,

  data1,

  data2,

  ....

Restart(Read)

  Anzahl der ReadBytes

  data1,

  data2,

  ...

STOP

bedeutet: erst wenn ich das erste Byte gelesen habe, weis ich, wieviele 
bytes ich lesen muss.
Die Bibliothekten, die ich gefunden habe (bcm2835) bieten aber nur 
Befehle an, eine vorher bekannte Anzahl von Bytes zu lesen 
(bcm2835_i2c_write_read_rs).
Kennt jemand eine Bibliothek, die meinem Problem abhilfe schafft?
Gast #5201966
Lesenswert?

Klaus R. schrieb:
> futz schrieb:
>> tuts eben nicht.
>
> Das mußt Du mal genauer erklären.

das Gerät nimmt ständig Messwerte auf. Ich sende dem Gerät eine 
I2C-Nachricht und erwarte als Antwort eine Bytefolge variabler Länge, 
wobei mir das erste byte sagt, wieviele Bytes noch kommen (also wieviele 
Messwerte aufgenommen wurden). Die restlichen Bytes, falls vorhanden, 
sind dann diese Messwerte.
Ich dachte, dieses System wäre furchtbar schlau.
Ich bräuchte halt eine I2C-Bibliothek, die mir erlaubt, Start, Write, 
Restart, Read und Stopp einzeln zu senden.
Gast #5208836
Lesenswert?

Hallo zusammen.
Da ich vor einigen Tagen bereits eine Frage zu diesem Thema hatte, jetzt 
Teil 2:
Ich benutzt die Funktion
uint8_t bcm2835_i2c_write_read_rs(char* cmds, uint32_t cmds_len, char* 
buf, uint32_t buf_len)
aus der Bibliothek http://www.airspayce.com/mikem/bcm2835/
mit der ich angeblich eine beliebige Anzahl von Bytes senden kann, 
danach ein Repeatet start erfolgt, und schließlich eine beliebige Anzahl 
von Bytes gelesen wird. Funktioniert, solange ich weniger als 12 Bytes 
(könnten auch 13, 14 oder 15 sein, keinesfalls jedoch 20) sende 
einwandfrei. Über dieser Grenze funktioniert es jedoch nicht mehr 
(raspberry bleibt hängen).
Hat jemand eine Erklärung dafür? (evtl. die gleiche Erfahrung?)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren