Forum: Mikrocontroller und Digitale Elektronik I2C: wie kann master bus freigeben (STOP) im readprozess ?


von tobi (Gast)


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.

von Klaus 2. (klaus2m5)


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.

von tobi (Gast)


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.

von Klaus (Gast)


Lesenswert?

tobi schrieb:
> Hab nun allerding ein IC

Was ist den das für ein IC?

MfG Klaus

von tobi (Gast)


Lesenswert?

STw4102 (Ladecontroller)
LM75  (T-Sensor)

..z.B.

von Klaus2m5 (Gast)


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.

von tobi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.