Forum: Mikrocontroller und Digitale Elektronik MPU6050 - Stm32 - I2C hängt sich auf


von Ert (Gast)


Lesenswert?

Hallo,

evtl kann mir hier einer helfen.

Ich betreibe einen MPU6050 via I2C an einem STM32f4 Discovery Board.
Nur lässt sich der MPU nur auslesen wenn ich die Spannnungsversorgung am 
MPU kurz unterbreche und dann initalisiere. Wenn ich die Versorgung dann 
dran lasse und den Mikrocontroller neu bespiele läuft gar nichts mehr 
auf dem Bus...

Woran könnte es liegen, dass sich der MPU nicht wieder reinitalisieren 
lässt?

Danke für alle Antworten.

G Ert

von Markus H. (markushehn)


Lesenswert?

Poste doch mal Programmcode von deinen I2C-Routinen.

von Timmo H. (masterfx)


Lesenswert?

Wenn du während einer aktiven i2c Kommunikation den uC resettest kann es 
durchaus sein dass die I2C state machine vom Sensor irgendwo mitten drin 
ist und somit beim nächsten Anlauf des uC sich nicht so verhält wie du 
bzw. deine i2c Routinen es erwarten. Beim SPI wird durch den Chipselect 
die State machine resettet, das gibt's bei I2c nicht (bei smbus schon).
Vermutlich wartest du in irgendeiner Routine auf eine Antwort bekommst 
sie aber nicht. In dem Fall musst du deinen Slave wieder in einen 
definierten Zustand bringen, wie das geht steht z.B. hier: 
http://www.analog.com/media/en/technical-documentation/application-notes/54305147357414AN686_0.pdf

: Bearbeitet durch User
von DerDan (Gast)


Lesenswert?

Timmo H. schrieb:
> http://www.analog.com/media/en/technical-documenta...

Wie so oft wird hier das "Freiräumen" des Busses mit einer Stopp 
Bedingung abgeschlossen. Um einen I2C Baustein zu reseten ist das aber 
eigentlich keine gute Idee. Wird vor dem Reset eine EEPROM Page nur mit 
3/4 der gewünschten Daten befüllt, werden diese nach eine Stopp 
Bedienung tatsächlich geschrieben. Aus meiner Sicht ist es deshalb 
sinnvoller als Abschluss des „Freiräumen“  eine Start Bedingung auf den 
Bus zu legen

mfg

DerDan

von DerDan (Gast)


Lesenswert?

Ach ja und Falls es sich nicht um ein Baustein handelt der den Bus 
blockiert, hilft es auch die I2C Peripherie über das RCC Register zu 
resetten

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.