I2C: wie kann master bus freigeben (STOP) im readprozess ?

Gast #2372869
Lesenswert?

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.
#2373039
Lesenswert?

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.
Gast #2373092
Lesenswert?

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.
Gast #2373316
Lesenswert?

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.

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