Forum: Mikrocontroller und Digitale Elektronik I2C und versehentliche Kurzschlüsse


von Alex R. (geneo)


Lesenswert?

Hallo,

mal eine kleine kurze Frage:

Wenn ich meinen Mikrocontroller(STM32) per I2C mit einem anderen IC 
direkt verbinde, kann es doch passieren, dass ich die SDA-Leitung mit 
diesem IC "versehentlich" (Dummheit, Bug, Sonnenflecken,...) per 
Push/Pull auf High setze.

Ist es dann nicht so, dass ich einen Kurzschluss erzeuge, wenn die 
Gegenstelle SDA auf Low zieht?

Wenn das wirklich passiert, was wäre die eleganteste/simpelste Variante, 
sich auf Hardware-Ebene dagegen zu schützen? Gibt es hier 
unterschiedliche Ansätze z.B. bei 10-50kHz vs. 1MHz?

Vielleicht stehe ich aber auch auf dem Schlauch, weil ich eigentlich nie 
einen entsprechenden Schutz gesehen habe (der auch hohe Frequenzen 
zulässt).

Vielen Dank schonmal.

: Bearbeitet durch User
von Sebastian R. (sebastian_r569)


Lesenswert?

Alex R. schrieb:
> per Push/Pull auf High

Wenn das I2C-Interface Push-Pull hat, würde ich mich ganz schnell von 
dem IC trennen.

I2C ist genau aus diesem Grund Open-Drain bzw. Open-Collector mit 
Pull-Ups, die für das High aufm Bus zuständig sind.

Alex R. schrieb:
> was wäre die eleganteste/simpelste Variante,
> sich auf Hardware-Ebene dagegen zu schützen?

Nur Open-Drain-Interfaces auf den Bus lassen

Alex R. schrieb:
> weil ich eigentlich nie
> einen entsprechenden Schutz gesehen habe (der auch hohe Frequenzen
> zulässt).

Weil er bei echtem, korrekt umgesetzten I2C auch nicht notwendig ist.

Aber ja, wenn man bei einem Mikrocontroller das I2C komplett "zu Fuß" 
macht und versehentlich den Pin auf High anstatt auf Tristate setzt, 
wäre das ein Kurzschluss. Merkt man dann aber und macht es nicht wieder.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Alex R. schrieb:
> Ist es dann nicht so, dass ich einen Kurzschluss erzeuge, wenn die
> Gegenstelle SDA auf Low zieht?
Ja, aber weil die beteiligten ICs in ihren Ausgangstreibern 
Bahnwiderstände im Bereich um 50 Ohm haben, ließen durch diesen 
"Kurzschluss" höchstens 5V/(2x50R) = 50mA. Weil zudem dieser 
"Kurzschluss" nur während einer Übertragung auftritt, geht dein IC nicht 
kaputt.

Probiers einfach mal aus. Ich habe mal mit 2 AVR gezielt so eien 
"Kurzschluss" gemacht. Bei 1 Pin wurde der nicht mal arg viel wärmer als 
normal, das haben die beiden µC viele Wochen problemlos überstanden.

Erst wenn gleichzeitig viele Pins so einen "Kurzschluss"zu verdauen 
hatten, erwärmten sich die Controller.

Das Fachwort für so ein Problem heißt übrigens "Buskollision".

: Bearbeitet durch Moderator
von Alex R. (geneo)


Lesenswert?

Hmm,
bei mir war es beim Ausprobieren zwischenzeitig auch Dummheit.
Hatte den SCL- und SDA-Pin meines STM32 auf Push gegen einen INA233.

Selbst mit 50Ω beim INA233 (kann ich aber nichts im Datenblatt dazu 
finden) komme ich bei 3V3 auf 66mA. Mehr als dreimal soviel, wie mein 
STM32 pro Pin verträgt.

Man lernt halt durch Fehler.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Alex R. schrieb:
> Wenn ich meinen IC per I2C mit einem anderen direkt verbinde, kann es
> doch passieren, dass ich die SDA-Leitung mit diesem IC "versehentlich"
> (Dummheit, Bug, Sonnenflecken,...) per Push/Pull auf High setze.

Eigentlich nein!
I2C ist nicht "Hot Plug" fähig.
Zumindest ist Austausch von Komponenten im Betrieb nicht beabsichtigt.
Somit hat man Zeit genug die Verbindungen sorgfältig zu setzen.

Und ja, Kurzschlüsse können Bauteile beschädigen.
Dazu passt: Gegen Dummheit ist kein Kraut gewachsen.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Alex R. schrieb:
> mit 50Ω beim INA233 (kann ich aber nichts im Datenblatt dazu finden)
Der Wert ist ein wenig versteckt in den min/max Parametern. Dort steht, 
dass bei 3mA noch bis zu 0,4V am Pin anliegen, obwohl der 0V ausgeben 
soll. Das ist dann also ein Widerstand von 0,4V/3mA = 133 Ohm. Die 
minimale Spannung könnte laut Datenblatt auch 0V sein, das wird aber nie 
der Fall sein. Also kann sich der Bahnwiderstand im Bereich von 0..133R 
abspielen und die 50R liegen nett in der Mitte.

> Selbst mit 50Ω beim INA233 (kann ich aber nichts im Datenblatt dazu
> finden) komme ich bei 3V3 auf 66mA. Mehr als dreimal soviel, wie mein
> STM32 pro Pin verträgt.
1. dein STM32 hat auch diesen intrinsischen Bahnwiderstand von ca. 50R
2. der STM32 verträgt auch mal mehr als 20mA, wenn es nur 1 Pin ist

Oder andersrum: ich wette, dein STM32 geht nicht mal kaputt, wenn du 
einen IO-Pin direkt auf Vcc oder GND klemmst und dann den falschen Pegel 
ausgibst.

von Alex R. (geneo)


Lesenswert?

Entschuldigt bitte,
ich hatte meinen Eingangspost unglücklich formuliert.
Ich meinte Mikrocontroller<->IC. Also durchaus mit Programmierteil 
dabei.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Alex R. schrieb:
> ich hatte meinen Eingangspost unglücklich formuliert.
Naja, die zusätzliche Erklärung bringt mir eher Verwirrung als 
Klarheit...

>  Ich meinte Mikrocontroller<->IC.
Klar soweit: ein IC gibt high aus, das andere gibt low aus. 
Buskollision.

> Also durchaus mit Programmierteil dabei.
???

Alex R. schrieb:
> mal eine kleine kurze Frage:
> was wäre die eleganteste/simpelste Variante, sich auf Hardware-Ebene
> dagegen zu schützen?
Gar nichts machen.

von Alex R. (geneo)


Lesenswert?

Lothar M. schrieb:
> Alex R. schrieb:
>> ich hatte meinen Eingangspost unglücklich formuliert.
> Naja, die zusätzliche Erklärung bringt mir eher Verwirrung als
> Klarheit...
>
>>  Ich meinte Mikrocontroller<->IC.
> Klar soweit: ein IC gibt high aus, das andere gibt low aus.
> Buskollision.
>
>> Also durchaus mit Programmierteil dabei.
> ???
>
> Alex R. schrieb:
>> mal eine kleine kurze Frage:
>> was wäre die eleganteste/simpelste Variante, sich auf Hardware-Ebene
>> dagegen zu schützen?
> Gar nichts machen.

Ich bezog mich da eher auf:
> I2C ist nicht "Hot Plug" fähig.
> Zumindest ist Austausch von Komponenten im Betrieb nicht beabsichtigt.
> Somit hat man Zeit genug die Verbindungen sorgfältig zu setzen.

Mit einem Mikrocontroller kann man ja je nach Programmierung das 
grundsätzliche Verhalten der Leitungen leicht ändern. Wie in diesem Fall 
auch leicht zum Schlechten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Alex R. schrieb:
> Mit einem Mikrocontroller kann man ja je nach Programmierung das
> grundsätzliche Verhalten der Leitungen leicht ändern. Wie in diesem Fall
> auch leicht zum Schlechten.
Aber normalerweise merkt man so einen Programmierfehler ja auch recht 
schnell, weil dann nichts mehr richtig funktioniert.

von Steve van de Grens (roehrmond)


Lesenswert?

Auf die Art habe ich ein paar 286er Mainboards (ISA Bus) gekillt.

AVR Mikrocontroller habe ich damit aber noch nicht kaputt bekommen. 
Offenbar vertragen sie kurzgeschlossene Ausgänge eine ganze Weile, 
sofern es nicht sehr viele gleichzeitig sind.

Weiss jemand, ob 74HCTxx und 74LSxx kurzschlussfest sind?

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ich habs beim ATMega644 geschafft, einen Pin zu killen. Ich weiß nicht 
mehr ob der danach dauerhaft low oder high war, auf jeden Fall hatte der 
µC eine deutlich ausgeprägte interne Heizung wenn man versucht hat, den 
Zustand dieses Pins zu ändern.

von Gerhard O. (gerhard_)


Lesenswert?

Moin,

ist vielleicht ein alter Hut: Vor langer Zeit programmierte ich eine 
soft-I2C für einen uC ohne "TWI" HW. Um Open-Drain zu simulieren, setzte 
ich die beabsichtigten beiden Port Pins auf permanent LOW und schaltete 
mit dem DDR Register zwischen Input Mode und Aktive Daten. Ein Sende-L 
war DDR=Ausgang, Ein H war DDR in Input Mode. Funktionierte so 
ausgezeichnet und zuverlässig. Kurzschlüsse machten elektrisch nichts 
aus. Natürlich brauchte man wie sonst die üblichen Pullup-Rs. In der Not 
frißt man halt auch Fliegen;-)

Gerhard

von Frank K. (fchk)


Lesenswert?

Alex R. schrieb:

> Wenn das wirklich passiert, was wäre die eleganteste/simpelste Variante,
> sich auf Hardware-Ebene dagegen zu schützen? Gibt es hier
> unterschiedliche Ansätze z.B. bei 10-50kHz vs. 1MHz?

Eine Möglichkeit wäre ein I2C Repeater. Z.B. sowas hier:

https://www.nxp.com/products/interfaces/ic-spi-i3c-interface-devices/voltage-level-translators/two-wire-serial-bus-extender-for-hdmi-ddc-ic-bus-and-smbus:PCA9507

Der entkoppelt den externen Bus vom internen, hat zusätzliche Treiber 
für größere Kabellängen und kann noch eine Pegelwandlung vornehmen. Port 
B ist hier der interne Bus, Port A der externe.

Es gibt auch noch andere Bausteine mit ähnlichen Funktionen aber leicht 
unterschiedlichen elektrischen Eigenschaften. Da müsste man dann den für 
die Anwendung passenden raussuchen.

Vorteil: Wenn extern irgend etwas böses passiert (elektrostatische 
Entladung, 48V auf einem Pin oder was auch immer), dann ist nur der SO08 
Chip kaputt und nicht der STM32 und auch kein anderer Chip, der zufällig 
am gleichen Bus hängt. Den Repeaterchip kann man relativ einfach 
tauschen. Bei einen 176-pin TQFP STM32 ist das schon was anderes, das 
möchte man eher vermeiden.

Nachteil: ist halt ein extra Baustein, ca 2€ in Einzelstückzahlen, 80 
Cent auf Rolle.

fchk

von Rainer W. (rawi)


Lesenswert?

Alex R. schrieb:
> Mehr als dreimal soviel, wie mein STM32 pro Pin verträgt.

Woher willst du wissen, wieviel dein STM verträgt?
Das Datenblatt gibt dir nur einen Mindestwert.

von Clemens L. (c_l)


Angehängte Dateien:

Lesenswert?

Steve van de Grens schrieb:
> Weiss jemand, ob 74HCTxx und 74LSxx kurzschlussfest sind?

(Quelle: https://www.ti.com/lit/pdf/szza008)

HC: ca. 45 mA
LS: ca. 35 mA

Das Absolute Maximum Rating von HC ist 25 mA.
LS hat keine spezifierte Grenze, ist wahrscheinlich harmlos.

: Bearbeitet durch User
von Alex R. (geneo)


Angehängte Dateien:

Lesenswert?

Rainer W. schrieb:
> Alex R. schrieb:
>> Mehr als dreimal soviel, wie mein STM32 pro Pin verträgt.
>
> Woher willst du wissen, wieviel dein STM verträgt?
> Das Datenblatt gibt dir nur einen Mindestwert.

Oh, habe ich falsch geschaut!?
Ich dachte unter "Maximum Ratings"->"Current charateristics" wäre ich 
richtig.

von Rainer W. (rawi)


Lesenswert?

Alex R. schrieb:
> Oh, habe ich falsch geschaut!?
> Ich dachte unter "Maximum Ratings"->"Current charateristics" wäre ich
> richtig.

Im Datenblatt stehen die Garantiewerte des Herstellers. Wieviel der 
Ausgang wirklich verträgt, erfährst du wahrscheinlich nur, wenn du 
guckst, bei welchem Strom der Ausgang kaputt geht. Bei zu hohem Strom 
kann auch einfach eine schnellere Alterung stattfinden.

von Manfred P. (pruckelfred)


Lesenswert?

Rainer W. schrieb:
>> Ich dachte unter "Maximum Ratings"->"Current charateristics" wäre ich
>> richtig.
>
> Im Datenblatt stehen die Garantiewerte des Herstellers. Wieviel der
> Ausgang wirklich verträgt, erfährst du wahrscheinlich nur, wenn du
> guckst, bei welchem Strom der Ausgang kaputt geht.

Ich sehe eine falsche Fragestellung. Man kann hoffen, dass der Baustein 
einen Fehler toleriert, den man mal im Versuchsaufbau macht.

Wenn im Regelbetrieb das Risiko besteht, dass zwei aktive Ausgänge 
gegeneinander geschaltet werden könnten, muß man eben 
Begrenzungswiderstände einfügen.

Sich bei einem Gerät auf die Überlastfähigkeit zu verlassen, ist grober 
Pfusch.

von Alex R. (geneo)


Lesenswert?

Manfred P. schrieb:
> Rainer W. schrieb:
>>> Ich dachte unter "Maximum Ratings"->"Current charateristics" wäre ich
>>> richtig.
>>
>> Im Datenblatt stehen die Garantiewerte des Herstellers. Wieviel der
>> Ausgang wirklich verträgt, erfährst du wahrscheinlich nur, wenn du
>> guckst, bei welchem Strom der Ausgang kaputt geht.
>
> Ich sehe eine falsche Fragestellung. Man kann hoffen, dass der Baustein
> einen Fehler toleriert, den man mal im Versuchsaufbau macht.
>
> Wenn im Regelbetrieb das Risiko besteht, dass zwei aktive Ausgänge
> gegeneinander geschaltet werden könnten, muß man eben
> Begrenzungswiderstände einfügen.
>
> Sich bei einem Gerät auf die Überlastfähigkeit zu verlassen, ist grober
> Pfusch.

Genau das war auch meine Perspektive.
Ich verlass mich ungern auf irgendwelche Toleranzen, die nur der 
Hersteller kennt und die durch Streuung auch noch variieren.

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.