I²C Wie Fehlerbehandlung richtig machen STM32F4

OP #3116335
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
OP #3117983
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
OP #3118390
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren