Hola,
Hace un par de horas que conseguí ponerlo en marcha y he comprobado que permite hacer lo que quieras, eso significa que ya tenemos un maestro I2C genérico que permite leer y escribir tantos bytes como queramos (el máximo es de 7281 bytes, que sale de dividir 65536/9), e incluso poner la dirección de lectura, escribir varios bytes y luego leer.
Dejo un vídeo para ver la puesta en marcha del magnetómetro de tres ejes HMC5883L. Hay que tener en cuenta que los valores que da es sobre un rango y dentro de una ganancia, además de que sólo tomo el byte bajo de un "word" de 16 bits del eje X.
Lo ideal para comprobar que el módulo trabaja bien es ver las señales a través de PulseView:
Esta es la trama de configuración:

Luego hay que dar más de 67 ms de tiempo al magnetómetro para que pueda hacer la lectura y poder disponer de esos datos.
Y en la lectura tenemos lo siguiente:

Escribe la dirección de lectura 1E, además escribe "6" (que es la cantidad de bytes a leer) y los siguientes 6 bytes es la lectura en sí. Cada eje ocupa 16 bits, por ello hay que agruparlos de dos en dos.
Este chip lo que hace es medir la fuerza del campo magnético, para conseguir convertirlo en una brújula es más complicado porque se necesita el arcotangente (my/mx).
Estos días me pondré a documentar el funcionamiento aplicado a cualquier I2C, y como la parte de escritura ya la tengo hecha, la lectura será menos densa.
Adjunto el circuito utilizado en el vídeo.
Saludos.