Hallo, kann es sein, daß beim Read der Master wisen muss, wieviele Bytes von Slave gesendet werden ? Da der Master das ACK sendet gibt es kein Methode für den Master, das Ende der Übertragung anzuzeigen. Oder übersehe ich was ? Gruß, Michael
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
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
Huch, da ist plötzlich das Posting weg, auf das ich geantwortet hatte... Gruß, Michael
> 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...
Wieso auch immer hier fachlich interessante Beiträge gelöscht werden...?
Hallo, der Tip war, als 1. Byte die Länge des Pakets zu senden bzw. von slave zu empfangen. Gruß, Michael
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
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
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
Genau, der ACK wird ein NACK wenn kein SCL-Stretching vom Slave betrieben wird. Die ganze Chose sollte per Timeout abgefangen werden und im Falle des Falles das i2c-Protokoll mit einem STOP/START wieder beginnen. Gruß - Abdul
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.