Forum: Mikrocontroller und Digitale Elektronik I²C Wie Fehlerbehandlung richtig machen STM32F4


von Lukas H. (1uk3)


Lesenswert?

Hi

Ich habe eine Weile den Fehler in meinem Programm gesucht, bis mir 
wieder eingefallen ist das ich für den Bus nur die internen PullUp 
Widerstände des STM32(Master) benutzt habe und die waren zu schwach(lt. 
Datanblatt ca 40k). Problem gelöst

Im Fehlerfall hat der Slave(MPU6050) SDA auf low gehalten. Jetzt frag 
ich mich wie man auf sowas reagiert wenn es doch mal vorkommen sollte.

1) Ein paar Pulse auf SCL?
2) Slave reset(Strom weg^^)?
3) ???

zu 1) kann man beim STM32F4 irgendwie SCL umschalten, ohne vorher auf 
GPIO zu wechseln und danach wieder zurück? Kann im reference manual 
nichts finden

Vielen Dank
Lukas

von Lukas H. (1uk3)


Lesenswert?

Mit 4k7 Pull Up funktioniert der Bus perfekt.

Heute hab ich beim Debuggen reset gedrückt und dann war wieder SDA low. 
Wahrscheinlich hat er gerade vom Sensor gelesen.
Wie würdet ihr das lösen? Es kann ja mal ein Watchdog oder Brownout 
reset auftreten und dann ist der Sensor nicht mehr ansprechbar --> 
schlecht

von mr. mo (Gast)


Lesenswert?

Lukas H. schrieb:
> zu 1) kann man beim STM32F4 irgendwie SCL umschalten, ohne vorher auf
> GPIO zu wechseln und danach wieder zurück? Kann im reference manual
> nichts finden

Gab es da nicht eine Funktion um i2c zu resetten? Ich meine sowas mal in 
der standart lib. gesehen zu haben.

von hp-freund (Gast)


Lesenswert?

Das "Wichtig" ein Stück tiefer beachtet?

http://diller-technologies.de/stm32.html#i2c

von Lukas H. (1uk3)


Lesenswert?

>Gab es da nicht eine Funktion um i2c zu resetten? Ich meine sowas mal in
>der standart lib. gesehen zu haben.

SWRST
Hab ich schon getestet. Hilft sehr wenig, weil SDA low ist. Dadurch wird 
das BUSY flag sofort wieder gesetzt

>Das "Wichtig" ein Stück tiefer beachtet?
Ahhh mit DeInit funktionierts auch Danke!
Ich hab bemerkt das es nur funktioniert wenn ich zuerst die beiden Pins 
auf AF schalte, und dann erst initialisiere.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Philips hatte in seinem Grundlagen Blatt zu I2C auch mal eine Reset 
Prozedur beschrieben. Wenn ich mich recht erinnere, wackelt man 
mindestens 9-mal an SCL und horcht an SDA, wann der Bus wieder high ist.

von DerDan (Gast)


Lesenswert?

Wohl eher bis zu 9 mal ?

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.