Hallo, folgendes Probl. Ich scanne einen I2C_bus, indem ich alle adressen auf den bus legen ( sequenziell), inkl. read/write -Bit. Nach dem ACK (9tes Bit) gebe ich ein STOP Signal. Ist das laut Spezifikation OK? Da ja im fall von Read, der Slave die kontrolle über SDA erhält. Wie kann ich denn sichern dass ich überhaupt ein STOP auf den bus bekomme bevor der Slave das SDA_signal beginnt zu modulieren ? Bisher hat das gut geklappt. Hab nun allerding ein IC, der nach einer Readanfrage das SDA Signal (sofort) nach low zieht und somit kein STOP detektieren kann.
Du wirst um ein Dummy-Read nicht herumkommen - also 9 Clocks mit SDA=1 (Übrigens die Standard-Recovery für einen hängenden I2C-Bus). Die letzte Clock signalisiert automatisch ein NAK. Danach sollte der Slave wieder auf Stop oder Start hören. Stop ist übrigens nur in Multimaster-Konfiguration wirklich erforderlich. Bei Single-Master genügt der nächste Start, da kein anderer Master darauf wartet, dass der Bus frei wird.
OK- Danke schonmal. Steht diesbezüglich irgendwas in der Spezifikation ? Das würde ungekehrt heißen, ich muss bei einem Bus-Scan der READ-Adressen, immer ein zweites Dummybyte mitlaufen lassen, damit der Slave SDA freigibt. Sind in der Spec. eigentlich die Zugriffsarten (byteweise, blockweise, ..) geregelt?? Weil es doch immer wieder unterscheide gibt wie ICs gelesen und gesdchrieben werden wollen.
tobi schrieb: > Steht diesbezüglich irgendwas in der Spezifikation ? Ein Busscan ist in den Specs so nicht vorhanden, da eine dynamische Zuordnung von Slaves nicht vorgesehen ist. Die Anzahl und Adressen der Slaves ist statisch und wird als bei der Firmwareerstellung bekannt vorausgesetzt. Nach einem Start-Read muss das erste Byte auch gelesen werden, da erst mit dem folgenden NAK der Master das weitere Lesen von Bytes abwürgen kann. Es ist logisch, dass wenn der Slave die Kontrolle über SDA hat, eine Start/Stop-Kondition bei SDA=0 nicht gesendet werden kann. Es ist reiner Zufall, ob das erste gelesene Bit eines unbekannten Slave 0 oder 1 ist und damit auch vorzeitig ein Start/Stop möglich ist.
OK, dann werd ich das mal ändern, Danke !!
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.