extraordinäre I2C-Geräte

  • Liebes Forum,


    der CPC-Booster+ stellt 5 GPIO-Ports zur Verfügung und darüber bilde ich einen I2C-Bus. Funktioniert mit dem MCP23017 und PCF8591, ich scheine also so ziemlich richtig zu liegen.


    Nun gibt es aber auch I2C-Teilhehmer die etwas länger brauchen (signalisieren sie indem sie selbst SCL auf Masse ziehen) oder auch Datenwörter abweichend von 8 Bit scheinen vorzukommen. Ist einem von Euch so solches Gerät mal aufgefallen? Das würde ich nämlich gerne ebenfalls implementieren bzw. testen.


    Vielen Dank,

    Mr. AMS

  • Ich habe im letzten Jahrtausend embedded Software für die Unterhaltungselektronik entwickelt. Ich kann bestätigen, dass man in Punkto I2C wirklich ALLES findet. Es hat sich da ein ziemlicher Wildwuchs etabliert. Das Ziehen von SCL (sogenanntes clock stretching) ist ja noch durchaus gaenig. Aber es gibt auch slaves, die ganz auf das acknowledge verzichten. Da muss man dann einfach einen kurzen timeout einbauen und hoffen, dass alles gut angekommen ist.

    Unterschiedliche Wortlängen gibt es auch, wobei da meist die Adresse 8 bit hat (muss ja auch so sein) und danach dann eine komische Anzahl bits kommt. Meistens hatte es aber funktioniert, wenn man einfach ein paar bits hinten dran hängt, so dass man wieder auf die nächste 8-Bit Grenze kommt.


    Wir hatten einen sehr flexiblen I2C Treiber, der dann vom Treiber des entsprechenden Slaves passend konfiguriert wurde. Leider musste man all zu oft dann noch am I2C Treiber schrauben, um einen weiteren Sondermodus einzubauen.


    Zum Glück halten sich die allermeisten Slaves aber an gängige Protokolle. Ich würde sagen, die Spezialfälle machen heutzutage weniger als 1% aus. Für dieses eine Prozent kann ich Dir leider keine konkreten Beispiele nennen. Dazu ist das zu lange her (wie gesagt: letztes Jahrtausend).

  • ich versteh zwar absolut nur Bahnhof ...ich weiss gerade mal, was ein I2C ist.. aber - ist das auch einer der Gründe, warum z.B. die Software vom Raumluftwächter sich zwischendurch immer wieder mal aufhängt?

    ich bin signifikant genug:razz:

    • Offizieller Beitrag

    Was mir nicht einleuchtet: Warum muss beim Lesen der Master das mittels Acknowledge quittieren? Es doch der Master, der den Erfolg des Zugriffs erkennen muss?

    Lt. Spec bestaetigt der Datenempfaenger das Datenwort.


    Der genannte Fall hat eine Besonderheit.

    Nach dem letzten gelesenen Byte sagt der Master NoACK, dadurch nimmt der Slave die Fuesse (SDA) hoch, und wartet auf das STOP oder RESTART.

    Bestaetigt der lesende Master das ACK, wird der Slave wieder zum Transmitter und zieht das SDA evtl. auf low. Dann kann der Master kein STOP generieren.


    Ein Thema bei I2C ist, das Master und Slave nur meint, wer ist Chef und erzeugt das SCL. Wer Sender und Empfaenger ist, steht auf einem anderen Blatt und haengt mit der Datenrichtugn zusammen (Read/Write). Jedes I2C hat somit 4 moegliche Zustaende.


    Alle Klarheiten beseitigt? ;)

    ;------------------------------------
    ;----- ENABLE NMI INTERRUPTS
    (aus: IBM BIOS Source Listing)