¿Obtienes respuestas que no sean cero al leer 0x00? Creo que la hoja de datos es incorrecta y WIA en realidad no devuelve 0x48, pero no tengo un chip a mano en este momento para probar.
No estoy seguro de si hay otros registros que deban configurarse para que la MPU funcione, pero para el registro, lo tengo funcionando y estos son los valores de registro de la MPU que uso:
0x6B = 0x01; // Clock source is PLLGYROZ
0x19 = 0x04; // Set SMPLRT_DIV to 0x04; this gives a 200 Hz sample rate when using the DLPF
0x1A = 0x03; // 42 Hz LPF
0x6A = 0x01; // Disable master mode and clear all signal paths
0x1B = 0x18; // Full gyro range
0x1C = 0x08; // 4G accel range
0x37 = 0x32; // Interrupts pin stays high until cleared, cleared on any read, I2C bypass
0x38 = 0x01; // Data ready interrupt enabled
Puede intentar ponerlo en modo FUSEROM (escriba 0x0F en el registro 0xA) y luego leer los valores de ajuste de sensibilidad de los registros 0x10 a 0x12; debe obtener el mismo valor en varias lecturas.
No estoy seguro de si hay una secuencia de inicialización "adecuada" para el AK8975, pero he tenido más éxito con: Poner en modo FUSEROM - > lea ASAX / Y / Z - > modo de muestra única, y luego esperando la interrupción DRDY (que, a pesar de lo que afirma la hoja de datos MPU9150, está disponible en el pin 14). Sin embargo, definitivamente tuve una gran cantidad de problemas para que funcionara correctamente.
Una última pregunta: ¿a qué velocidad está ejecutando el bus I2C? La línea STM32F4xx, al menos, tiene problemas para funcionar a 100 kHz. Tengo que correr a 400 kHz para obtener la funcionalidad correcta.