I2C: wie zuverlässig?

Hallo,

anknüpfend an meinen Thread von vorhin müchte ich meine Anfrage präzisieren:

Ich habe einen I2C-EEPROM an einem PIC hängen. Beim Debuggen kam es gelegentlich vor, daß keine Kommunikation mehr möglich war. Auch ein Reset half nicht, erst das komplette Zurücksetzen der Schaltung schuf Abhilfe.

Aus diesem Grund fiel mein Verdacht auf den EEPROM (24AA512): ich vermute, daß dieser in der genannten Situation SDA auf Low hält (da er sich mitten in der Kommunikation wähnt).

Soweit so gut. Aber ich muß unter allen Umständen verhindern, daß dies im laufenden Betrieb auftritt.

Daher die Frage: Wie zuverlässig ist dieser I2C-Kram? Muß ich mit so einem Verhalten auch im laufenden Betrieb rechnen und evtl. darauf reagieren? Oder ist ein Ausfall eher dann denkbar, wenn wirklich I2C-Einheit des PIC oder aber EEPROM defekt sind?

Weitere Frage: Hatte jemand schon den beschriebenen Fall? Falls ja: kommt man da ohne weiteres wieder raus oder kommt man um einen Reset des EEPROM nicht herum?

Ich werde auf jeden Fall noch entsprechende Messungen vornehmen - diese Anfrage dient eher zum "vorsichtigen Abklopfen" à la "Gibt es ein einfaches Patentrezept?"...

Danke schonmal!

Thomas

Reply to
Thomas Rachel
Loading thread data ...

Hi Thomas,

Aus meiner Erfahrung kan ich sagen, dass die I2C-Sachen /sehr/ zuverlässig funktionieren, wenn das Design sauber und das Timing peinlich genau eingehalten wird.

In Deinem Fall scheint es so zu sein, dass eine Start- oder Stopp-Bedingung nicht sauber erkannt wird, oder dass Du kein Clock-Stretching erkennst. Ich kann Dir nur empfehlen: Schau Dir das Timing für den EEPROM genau an und halte es auch ein. Ist u.U. etwas mühsam und nicht ganz trivial. Aber dann klappt das.

vg, Wolfgang

--
From-address is Spam trap
Use: wolfgang (dot) mahringer (at) sbg (dot) at
Reply to
Wolfgang Mahringer

Wolfgang Mahringer schrieb:

Aber auch nur dann. (Am Anfang hatte ich einige Probleme, den Spaß zum Laufen zu kriegen.)

Vielleicht habe ich mich etwas ungenau ausgedrückt: es läuft. Meistens.

Außer, ich debugge und resette zwischendurch, wenn die Übertragung nicht ganz fertig ist - dann läuft es schief.

Aber Dein Statement läßt mich vermuten, daß, wenn ich selbiges nicht tue, es zuverlässig laufen sollte.

Ich denke, das macht alles das I2C-Modul im PIC...

Ok, vielen Dank!

Thomas

Reply to
Thomas Rachel

Oder gehe auf SPI. IME ist das etwas robuster. Zwar machen Bausteine bei nicht genuegender Anzahl von SCLK-Takten oft den Abort, aber beim naechsten Schreib/Lesezyklus ist es wieder in Butter. Wobei die gewuenschte Anzahl an Takten selbst fuer einen Baustein nicht immer gleich ist. Letztens hatte ich einen, der drei verschiedenen Burst-Laengen brauchte, je nachdem was man damit machen wollte. Normalerweise 16, manchmal aber 32 und wenn es montags regnet nur 8 ;-)

--
Gruesse, Joerg

http://www.analogconsultants.com/
Reply to
Joerg

Thomas Rachel schrieb:

Ack.

Logisch.

Abhilfe: beim Kaltstart nach dem Reset erstmal auf SDA sehen und falls die Leitung low ist, solange SCL pulsen, bis SDA high geht - und dann einen Stop setzen. Danach ist der I2C wieder im definierten Ruhezustand und alles funktioniert zuverlässig.

Wenn man diesen Teil Code vergißt, gibt es die von Dir beobachteten Effekte.

Tilmann

Reply to
Tilmann Reh

Das klingt ja wie beim Anlasser mancher alten Opel. So oft mit dem Hammer dagegen hauen, bis er einrueckt und dreht. SCNR.

--
Gruesse, Joerg

http://www.analogconsultants.com/
Reply to
Joerg

Thomas Rachel schrieb:

Beim I2C ist in EMV verseuchter Umgebung problematisch, da nur ein Bit über lesen oder schreiben endscheidet. So wird aus dem lesen plötzlich ein Schreiben....(Wenn WP dann nicht geseztzt ist.)

Andreas

Reply to
Andreas Ruetten

Naja, weil IIC ja statisch ist ist es richtig dass das EEprom so stehen bleibt wie der Master den letzten Takt hinterlassen hat. Auch mit SDA auf Low. Und das klappern mit SDA ist genau der "Reset" den der 24c... sehen will.

p.s. Auch bei SPI hab ich das schon gesehen.

p.p.s IIC ist sehr zuverlässig wenn die Hardware passt.

--
MFG Gernot
Reply to
Gernot Fink

"Thomas Rachel" schrieb im Newsbeitrag news:fpjve7$u54$ snipped-for-privacy@svr7.m-online.net...

I2C an sich ist zuverlaessig, so lange die Digitalschaltung ordentlich verdrahtet ist. Wenn du mitten ein einem Befehl abbrichst, beispielsweise weil am uC ein watchdog ausloest, haengt der I2C Chip natuerlich mitten in einer Kommunikation. Daher enthalten manche Schaltungen zu Beginn Code, um bei haengenden Chips die Kommunikation zu beenden. Sozusagen NOPs senden. Hab ich aber noch nie programmiert.

--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
 Click to see the full signature
Reply to
MaWin

Bei welchem Chip war das denn? Bisher hatten die von mir verwendeten eine Time-out Funktion. Man musste das Kommando nochmal senden, wenn der Verkehr auf dem Bus einmal zu zaehfluessig war. Doch aufgehaengt hat sich SPI bei mir noch nie. Das ginge ja auch nur, wenn einer der angeschlossenen Chips MISO festhalten wuerde. Und selbst dann koennte man immer noch schreiben.

Sollte es auch, denn es sitzt ja in vielen Geraeten der Unterhaltungselektronik und die funktionieren gut. Irgendwie habe ich aber den Eindruck, dass zumindest in USA das Angebot an I2C Chips abnimmt.

--
Gruesse, Joerg

http://www.analogconsultants.com/
Reply to
Joerg

Effekte.

Gutes argument. Ausser dem AVR im ISP-Modus find ich keinen.

Man musste das Kommando nochmal senden, wenn der

Stimmt

>
--
MFG Gernot
Reply to
Gernot Fink

Doch, ist zeitweise nötig.

Ein Reset/Watchdog mitten in der Kommunikation kann auch Daten im EEPROM verfälschen:

formatting link

Auf der sicheren Seite ist man, wenn entweder das I2C-Device einen Reseteingang hat, den man bedient - oder man stattdessen einmal VCC abschaltet (gesehen bei CPUs, die vom I2C-EEPROM booten).

cu Michael

--
Some people have no respect of age unless it is bottled.
Reply to
Michael Schwingen

Michael Schwingen schrieb:

formatting link

Nicht, wenn man den Startup so programmiert wie ich es vorher schon beschrieben habe: nach dem Reset solange SCL pulsen, bis SDA high ist - und dann erstmal eine Stop Condition erzeugen. (Falls SDA nach Reset schon high ist, natürlich nicht SCL pulsen, sondern nur Stop erzeugen.)

Oder es so macht wie oben beschrieben.

Tilmann

Reply to
Tilmann Reh

M

Das m=C3=BCsste man doch verhindern k=C3=B6nnen, wenn man nach einem Rese= t als erstes auf dem Bus eine Stop Condition erzeugt. Falls ein Bootstrap das nicht macht, ist das meiner Ansicht nach ein Bug in diesem Bootstrap.

Gru=C3=9F, Michael Karcher

Reply to
Michael Karcher

"Thomas Rachel" schrieb im Newsbeitrag news:fpjve7$u54$ snipped-for-privacy@svr7.m-online.net...

Hallo NG,

habe hier ein 24LC512 an einem 16F876 mit den gleichen Effekten. Eine Lösung des Problems habe ich auch noch nicht gefunden. Nach der mühsamen Programmierung des I2C Interface habe ich mir schon überlegt, die Schnittstelle manuell zu bedienen, wäre ja fast einfacher, und man könnte solche Lösungen wie "SCL pulsen nach Reset" auch einfach implementieren.

Allerdings muss ich auch sagen, dass ich das System zweimal aufgebaut habe und das Ganze als Wetterstation/Temperaturlogger durchgehend unbeaufsichtigt monatelang sauber läuft...

Gruss Chregu

Reply to
Christian Müller

Stimmt, das sollte gehen - hilft aber nur bei in Software implementiertem I2C. Wenn die CPU nach dem Reset selber den EEPROM-Lesezugriff macht, hast Du das beschriebene Szenario.

cu Michael

--
Some people have no respect of age unless it is bottled.
Reply to
Michael Schwingen

Was passiert denn, wenn man in einer I2C Chose gar keine CPU hat? Muss man dann einen "Hardware-Ruettler" einbauen, der solange an SCL rappelt, bis es funktioniert? So aehnlich wie man frueher gegen den Fernseher haute, bis er wieder lief?

--
Gruesse, Joerg

http://www.analogconsultants.com/
Reply to
Joerg

Wie gesagt: bei CPUs, die aus dem I2C-EEPROM booten können, finden sich teilweise Application Notes, wo mit dem CPU-Reset-Signal per FET VCC des EEPROMs abgeschaltet wird - nachgerüsteter Reset-Eingang sozusagen.

cu Michael

--
Some people have no respect of age unless it is bottled.
Reply to
Michael Schwingen

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.