Forum: Mikrocontroller und Digitale Elektronik MPU-9250 I2C Master und Interrupt Konfiguration


von Dino H. (hdino)


Lesenswert?

Hallo zusammen,

ich möchte eine MPU-9250 (Breakout Board von Sparkfun) mit einem 
Mikrocontroller Interrupt-gesteuert per I2C auslesen und dabei am 
liebsten die I2C Master Funktionalität der MPU benutzen, um auch die 
Kompassmesswerte in einem Rutsch zu bekommen (vgl. 
https://github.com/kriswiner/MPU-9250/issues/86).

Als Controller hab ich erstmal einen STM32 mit CubeMX HAL verwendet. Der 
I2C Bus ist mit 400 kHz Taktfrequenz konfiguriert. Mein Programm macht 
nun folgendes:
1. Warten, bis die MPU bereit ist
2. Reset und 200 ms warten
3. WHO_I_AM Register prüfen
4. Samplingrate vom Gyro auf 1 kHz stellen (0x01 ins CONFIG Register 
schreiben)
5. In einer Endlosschleife die Messwertregister auslesen

Das funktioniert. Wenn ich nun zwischen 4. und 5. noch den Interrupt Pin 
einschalte, d.h. 0x01 ins INT_ENABLE Register schreibe, kann ich etwa 
10-30 Samples lesen und dann bleibt der I2C Bus hängen (HAL meldet 
busy). Zuerst dachte ich an einen Fehler in der STM HAL und hab das 
ganze noch auf einem Arduino implementiert, wo sich der Fehler aber 
reproduzieren lässt.

Wenn ich nun den I2C Bypass aktiviere, also 0x02 ins INT_PIN_CFG 
Register schreibe, funktioniert der Code wieder. Der Bypass selbst läuft 
auch, d.h. ich kann dann das Kompassmodul ansprechen.

Schalte ich nun jedoch das I2C Mastermodul der MPU ein (Bit 5 im 
USER_CTRL Register), tritt das Problem wieder auf. Slaves habe ich dabei 
noch nicht konfiguriert.

Ich habe die Registerdoku jetzt noch zwei Mal durchgelesen, aber nach 
meinem Verständnis sollte das so funktionieren. Weiß jemand, ob ich da 
vielleicht doch noch etwas übersehen habe? Muss noch etwas anderes 
konfiguriert werden?

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.