I2C - Read nur mit fester Länge ?

Gast #1156657
Lesenswert?

Du übersiehst einiges.

Schau mal hier:

http://www.roboternetz.de/wissen/index.php/I2C

Der Master signalisiert beim lesen mit dem Ack das er noch mehr
lesen will. Damit kann man z.B. ein EEProm fortlaufend auslesen
oder den PCF8574 pollen.

Das Ende der Übertragung ist immer ein Stop oder Repeatet Start vom 
Master.

Bei anderen Bausteinen hängt es davon ab, wieviel Daten sie zur
verfügung stellen. Oft geben sie die Datenleitung für das Ack des
Masters nicht frei, wenn sie nichts zum senden haben.

Der Master muß also nicht wissen wieviele Byte er lesen will sondern
nur einen Punkt kennen, an dem er aufhören soll.

gruß hans
OP #1156751
Lesenswert?

Hallo,

danke erstmal, ich habe das wohl richtig verstanden.

Was mir nicht gefällt ist, dass der Master bereits wissen muss, wie die 
Daten strukturiert sind, es ist also kaum möglich, einen allgemeinen 
Treiber zu schreiben, der dann immer passt, bzw. man müsste 
Kontrollstrukturen definieren, der dem Treiber sagt, wie die Daten zu 
interpretieren sind.

Gruß,
Michael
Gast #1157591
Lesenswert?

> Autor: Michael Appelt (micha54)
> Datum: 22.02.2009 15:50
>
> Huch, da ist plötzlich das Posting weg, auf das ich geantwortet hatte...
>
> Gruß,
> Michael

Das lässt sich leicht umgehen indem man den Beitrag, auf den man 
antwortet, komplett zitiert. Ich hätte das nämlich auch gerne gelesen...
#1157839
Lesenswert?

Gast wrote:
> Wieso auch immer hier fachlich interessante Beiträge gelöscht werden...?

Gute Frage, doch zum Glück wurde ich auch per Mail benachrichtigt:

Betreff: Re: I2C - Read nur mit fester Länge ?
Datum: 22.02.2009 10:56
Text des gelöschten Beitrags:
==============================================
Hallo Michael,
soweit ich weiß ist es richtig das der Master wissen muss wieviel er zu 
lesen hat.
Um trotzdem Messages mit variabler Länge vom Slave zu lesen kannst Du es 
z.B. so machen das der Slave als erstes die Anzahl der Bytes die 
abgerufen werden sollen sendet bevor er seine Daten schickt. Der Master 
adressiert dann den Slave liest z.B. das erste Byte (evtl. auch mehrere) 
und weiß damit wie viele Bytes er noch abrufen soll.

Gruß,
Jacob
OP #1158041
Lesenswert?

Hallo,

na super, warum hast du den Beitrag den solange versteckt ?

Ich versuche immer relativ saubere Module in Layern anzuordnen. an 
meinem I2C-Bus hängen ein LCD-Display, Tastatur, DCF77-Uhr usw.

Das Hauptprogramm läuft auf einem M32, und der kann per Multitasking 
laufen. Nach einiger Überlegung ist die Struktur klar: der Treiber für 
die I2C-Schnnittstelle bekommt Request-Block:
struct{
  uint8_t prcid; // wer hat den Request losgeschickt
  uint8_t status; // bitweise R/W, ready, error + fixed length/var 
length
  uint8_t length; // lese oder schreiblänge
  uint8_t buffer[];
} i2c_Buffer;

Gruß,
Michael
OP #1160643
Lesenswert?

Hallo,

weitere Frage: was macht der Master eigentlich, wenn der Slave nicht 
mehr antwortet ? Läuft der Takt weiter, so daß nach 8 bits dann das ACK 
fehlt ?

Oder allgemeiner: kann es zu Fehlern kommen, die per Timeout abgefangen 
werdne müssen ? Z.B. Slave hängt und gibt SCL nicht frei...endloses 
Stretching ?

Gruß,
Michael

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