I2C an uC - kleine Frage

Leider muß ich mich jetzt doch mit I2C befassen. (Hat man halt davon, wenn man exotische Komponenten vorschlägt)

I2C wird via bit-banging realisiert, der Slave ist einfach am uC angeschlossen. Eigentlich sollen SDA und SCL mit Open Collector getrieben werden, ich mag jetzt aber nicht mehr löten.

Ich habe das einfach so gelöst, daß ich SCL/SDA am Controller fest auf Low setze und wenn High gewünscht ist, der Port als Eingang konfiguriert wird. Die (10k) Pullups ziehen den Bus dann ja irgendwann auf High...

Ist etwas dagegen einzuwenden, so vorzugehen, statt zwei FETs zu spendieren?

Ich frage, weil sich der STDS75, den ich zum Testen verwende, gelegentlich etwas anders benimmt, als das Datenblatt beschreibt, so schickt er gelegentlich keine ACKs, obwohl ich brav darauf warte, daß er sein SCLK loslässt.

Es besteht auch die Möglichkeit, daß der im Web gefundene Code noch mehr Verbesserungspotenzial hat, als ich bis jetzt feststellen konnte.

Falk

Reply to
Falk Willberg
Loading thread data ...

Externe Pullups? Die internen koennen irgendwas sein.

Passt schon. Clock kann man auch push-pull betreiben, wenn man kein Multimaster hat.

Deine Clockleitung prellt. Entweder noch 100pF gegen Masse spendieren und bei mehr als 100kHz zusaetzlich die Pullups auf 1K reduzieren, oder Clock als push-pull betreiben. Letzteres spart einen Pullup und den Kondensator.

Peter

Reply to
Peter Schaeffer

Müsste aufs Gleiche bei rauskommen. 10k ist aber ein wenig hoch. Je nach Kapazität und Geschwindigkeit nehme ich meist, was die Bausteine noch so vertragen, plus Sicherheitsreserve, also z.B. wenn die 3mA können, Widerstand so wählen, daß 2mA fliesst. Bessere Flanken erhöhen die Wahrscheinlichkeit, daß es sauber läuft.

Könnte viele Gründe haben. Am einfachsten wäre wohl wenn er kein ACK sendet, dies per GPIO rausgeben und darauf mit einem Speicheroszilloskop triggern und dann

formatting link
durchlesen und in den Timing-Diagrammen Hold-Off Zeiten usw. mit dem Bild auf dem Scope vergleichen, um herauszufinden, ob der Slave oder der Master der Schuldige ist.

Wenn's mal ganz hängt, die Holzhammermethode nehmen: Ein paar Impulse auf SCL, bis sich was auf SDA tut. Damit bringt man auch schlecht gebaute Slaves wieder zum laufen. Bei verrauschten Leitungen oder anderen Störungen hatte ich das auch bei einem Atmel letztens erlebt, daß der Master unwiderruflich hing, bis ich den per GPIO manuell ein paar mal triggerte. Kannte ich bisher nur vom PXA. Hatte den Tipp für den Atmel im Web gefunden:

formatting link

| I2C is a synchronous protocol and resets of the processor in the middle of | an access can block the I2C Bus until a powerdown of the full unit is done. | This function toggles the SCL until the SCL and SCA line are released

Bei mir trat der Fehler aber auch auf, wenn viel Störungen auf der Leitung waren (fliegender Aufbau, aber somit zugleich ein guter Test, wenn später mal Störimpulse auftreten sollten). Hängt aber bestimmt auch damit zusammen, daß I2C ein synchrones Protokoll ist und es naiv von mir ist, zu glauben, man könne den I2C-Core vielleicht ein wenig besser implementieren, wie ich es in einem FPGA per VHDL mit Eingangs-Latches, Timeouts usw. mal gemacht habe :-)

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Haengt natuerlich davon ab wie die Ausgangsports deines Controllers genau ausgefuehrt sind, aber so allgemein sehe ich da keine Probleme. Habe ich auch schon mal so gemacht.

Ich wuerde da zwar noch keine Probleme erwarten, aber nimm mal 4.7k als Pullup.

Diese Moeglichkeit gibt es so gut wie immer. :)

Olaf

Reply to
Olaf Kaluza

Ich könnte mir vorstellen, daß einige Probleme von I2C-Cores (also wenn die in Hardware implementiert sind) von der Komplexität wegen möglichen Multimasterbetrieb kommt, mit der Bus-Contention Erkennung usw. Bis jetzt habe ich allerdings noch nie ein System gesehen, wo mehr als ein Master auf demselben Bus drin war. Vielleicht sollten die Microcontroller-Hersteller das mal berücksichtigen und nur Single-Master Betrieb ermöglichen, den dann aber stabil.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Peter Schaeffer wrote: > [I2C-Bus]

Nein, so allgemein nicht. Auch ohne Multimaster kann Open-Collector für CLK notwendig sein. Der gute alte MAS3507 MPEG-Decoder machte z.B. öfter mal Clock-Stretching, wenn er mit was anderem beschäftigt war.

Laut I2C-Spezifikation dürfen alle Slaves die Leitung beliebig lange auf Low festhalten. Man muss also vorher genau gucken, was am Bus hängt.

--
Thomas Kindler
Reply to
Thomas Kindler

Allerdings. Push-Pull Driving eines I2C ist wie das Oeffnen von Pandora's Buechse oder der Griff in einen Teich voller Piranhas. Man beachte den ersten Abschnitt hier:

formatting link

Oder noch besser sich an den Philips Spec halten. Denn es kann durchaus die ersten 4000 Einheiten alles gut gehen und nach der naechsten Lieferung ist Heulen und Zaehneknirschen.

Oder besser gleich SPI verwenden ...

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Noch nen Debugtipp: In die Leitungen vom Master zum Slave einen niederohmigen Widerstand hängen (z.B. 22Ohm). Da sieht man dann auf dem Osci schön, ob der Master oder der Slave auf L zieht.

M.

Reply to
Matthias Weingart

Frank Buss schrieb:

Paß auf, jelcih erzählt Jörg wieder seine Story vom Anlasser seines alten Opel *g*

Thomas

Reply to
Thomas Rachel

Frank Buss schrieb: ...

...

Vielen Dank an alle. Der Bus läuft jetzt wie erwartet. Das Problem war eine ganze Reihe kleiner Fehler.

Jetzt habe ich das praktisch neu implementiert und "kann jetzt auch I2C". Gefallen tut's mir immer noch nicht, ein Schönwetter-Bus halt ;-)

Falk

Reply to
Falk Willberg

Dafuer gibt es SMB...:

--
Uwe Bonnes                bon@elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Reply to
Uwe Bonnes

Ich hatte nie einen Opel. Das waren Studienkollegen und viele davon hatten das obligatorische Haemmerchen im Kofferraum liegen. Trotzdem kam mir das immer wie der pure Luxus vor, denn meine Ente musste angekurbelt werden. Eine 6V Batterie war eben damals schon Raritaet, konnten sich nur betuchte VW-Brezelkaefer Fahrer leisten.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Falk Willberg schrieb:

Selbstmachen ist eh meist besser, siehste.

i2c funzt einwandfrei und wurde von Philips auch nur als Fernseher-Steckmodul-Bus gedacht um damit die fetten Kabelbäume abzuschaffen.

Wenn dann andere i2c sogar zwischen Geräten die an Mobilfunkmasten hängen benutzen, kann man denen nicht wirklich helfen.

Was auch gut geht ist den Ausgang kurzzeitig aktiv nach Plus zu ziehen. Also im Prinzip wie ein 8051 Port funzt.

- Henry

--
www.ehydra.dyndns.info
Reply to
Henry Kiefer

Aber den Slave gibt's nur mit I2C.

Falk

Reply to
Falk Willberg

Besonders unterschiedlich zu I2C ist SMB aber nicht gerade:

formatting link

Der Timeout gefällt mir aber gut, auch wenn ich ja der Meinung bin, daß I2C-Implementierungen sowas auch haben sollten, denn wieso sollte man bis DC runtergehen wollen?

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

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.