Why are different here2's i2c address and icm20948 address?

I connect here2 gps with CubeOrange.
On Mavlink Console, I type command “i2cdetect” and check 0x0C, 0x55.

I connect icm20948 with CubeOrange.
On Mavlink Console, I type command “i2cdetect” and check 0x68.
and, I couldn’t read compass data from icm20948.

I know that here2 gps include icm20948.
So, I think that I can check same address.
why are different here2’s i2c address and icm20948 address?

In conclusion, I want to use icm20948.
How can I use that?

Only the mag is accessible via I2C. The ICM20948 is on SPI but that’s not exposed via I2C.

In order to use it you would have to edit the Here2 firmware which is open source:

@JulianOes You are right.
I want to access ak09916 mag sensor(in icm20948).

I have been using here2 gps before.
Actually, I’m using septentrio mosaic-go gps now.
There is an icm20948 sensor inside the here2 gps.
There is not an icm20948 sensor inside mosaic-go unlike here2.
So, I am going to use icm20948 (finally ak09916).
(I know that I need to connect external mag sensor to Cube Orange for stable flight.)

There is an issue where the azimuth angle moves more than 20 degrees after the drone lands.
I used rm3100, ist8, pimoroni icm20948(using scl, sda pin out) sensors when testing.

But, when I use sparkfun icm20948’s aux_cl(ACL), aux_da(ADA) pin out, the issue not happen.

In this case, is it right that using sparkfun icm20948’s aux_cl(ACL), aux_dl(ADA)?
Or, why dows the azimuth move?