Thanks BSTRobin. I build the firmware myself using the SDK from https://www.bosch-sensortec.com/products/smart-sensors/bhi260ap/#software I took the reference cfg: Bosch_APP30_SHUTTLE_BHI260_aux_BMM150.cfg, and changed the physical sensor section as below: #Physical Drivers #DriverID,Bus,Addr,GPIO,Cal0,Cal1,Cal2,Cal3,Cal4,Cal5,Cal6,Cal7,Cal8,Off0,Off1,Off2,maxRate,Range 32,spi0,25,2, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 800.000000, 0 #BHI260Accel 33,spi0,25,-, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 800.000000, 0 #BHI260Gyro 24,spi0,25,-, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 50.000000, 0 #BMM150Mag_aux Then I rebuild the firmware by: ./build.sh Bosch_APP30_SHUTTLE_BHI260_aux_BMM150 I use bhy2_parse_orientation() to parse sensor data into heading, pitch and roll, and found the 180 degrees offsets. I dig into this a bit further. When I read the orientation matrices in my host code via bhy2_get_orientation_matrix() call, the matrices are different from what I put in cfg. For accel and gyro, I got: 0 1 0 -1 0 0 0 0 1 For magnet, I got: 1 0 0 0 -1 0 0 0 -1 I don't know where these matrix values are from. Are there some default values? Why the values in cfg does not take effect?
... View more