Custom BNO086 SPI implementation: Accel and Mag work but can't enable Gyro

Hi everyone,

I’m currently trying to communicate with a BNO086 (qwiic breakout board) over SPI using an ESP32-WROOM MCU. I’m trying to implement the communication myself as a part of my diploma project.

I’ve reached a strange situation. I can successfully enable the acceletometer and magnetometer but cannot get the gyroscope to work.
(Also cannot enable the features which are using gyroscope)

After successfully initializing the IMU, I’m sending SH-2 Set Feature command on channel 2. It looks like this:
uint8_t testPacket[21] =

{

0x15, 0x00, 0x02, 0x05,

0xFD, <ID in HEX>, 0x00, 0x00, 0x00,

0x0D, 0x40, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00

};

Then for the sake of debugging I do a Get Feature command.
uint8_t testPacket2[6] =

{

0x06, 0x00, 0x02, 0x06,

0xFE, <ID in HEX>

};

I have no problems with the feature ID’s of 0x01 (Accel) and 0x03 (Mag) - after sending the two command I get the responses which I expect.
However, when I use the corresponding ID for gyroscope (0x02), I don’t receive anything. From the Get Feature I see there is no activation occuring (update interval and everything else is 0).

Has anyone encountered something similar?

I’ve tried different solutions but nothing seems to help. I hope the hardware is fine and I’m missing something stupid in the code…

I’m particularly interested in whether the Gyro requires some extra additional initialization / configuration or there’s something subtle in the SH-2 protocol that I’m missing.

As I’ve said, I’m implementing this from scratch with the idea to understand the protocol and then do it as a part of Embedded Systems diploma project. I prefer to understand where I’m wrong instead of switching to a library.

I will provide extra info and source code as replies to the topic.

Any ideas and similar experiences would be appreciated!
Thank you for your time and attention!

Source code:

#include <SPI.h>

// BNO086 control pins

const uint8_t IMU_PS0 = 32;

const uint8_t IMU_PS1 = 33;

const uint8_t IMU_INT = 12;

const uint8_t IMU_RST = 13;

// ESP32 SPI pins

const uint8_t SPI_SCK = 18;

const uint8_t SPI_SO = 19; // BNO086 SO → ESP32 MISO

const uint8_t SPI_SI = 23; // BNO086 SI → ESP32 MOSI

const uint8_t SPI_CS = 5;

bool boardCheck = false;

uint8_t imuBuff[64];

// Product ID Request

// {0x06, 0x00, 0x02, 0x00, 0xF9, 0x00};

// Set Feature

uint8_t testPacket[21] =

{

0x15, 0x00, 0x02, 0x05,

0xFD, 0x01, 0x00, 0x00, 0x00,

0x0D, 0x40, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00

};

// Get Feature

uint8_t testPacket2[6] =

{

0x06, 0x00, 0x02, 0x06,

0xFE, 0x01

};

bool initialized = false;

bool tested = false;

bool tested2 = false;

// Input: byteLSB, byteMSB

// Output: (int16_t)([MSB][LSB])

int16_t Int16Lsb2Msb(uint8_t byteLSB, uint8_t byteMSB)

{

uint16_t safeInt16MSB = static_cast<uint16_t>(byteMSB);

return static_cast<int16_t>((safeInt16MSB << 8) | byteLSB);

}

// Input: byteLSB, byteMSB

// Output: (uint16_t)([MSB][LSB])

uint16_t Uint16Lsb2Msb(uint8_t byteLSB, uint8_t byteMSB)

{

uint16_t safeUint16MSB = static_cast<uint16_t>(byteMSB);

return static_cast<uint16_t>((safeUint16MSB << 8) | byteLSB);

}

// Input: byteLSB1, byteLSB2, byteMSB1, byteMSB2

// Output: [MSB2][MSB1][LSB2][LSB1]

int32_t Int32Lsb2Msb(uint8_t firstByteLSB, uint8_t secondByteLSB, uint8_t firstByteMSB, uint8_t secondByteMSB)

{

uint32_t safeInt32MSB = static_cast<uint32_t>(Uint16Lsb2Msb(secondByteMSB, firstByteMSB));

uint32_t safeInt32LSB = static_cast<uint32_t>(Uint16Lsb2Msb(secondByteLSB, firstByteLSB));



return static_cast<int32_t>((safeInt32MSB << 16) | safeInt32LSB);

}

// Input: byteLSB1, byteLSB2, byteMSB1, byteMSB2

// Output: [MSB2][MSB1][LSB2][LSB1]

uint32_t Uint32Lsb2Msb(uint8_t firstByteLSB, uint8_t secondByteLSB, uint8_t firstByteMSB, uint8_t secondByteMSB)

{

uint32_t safeUint32MSB = static_cast<uint32_t>(Uint16Lsb2Msb(secondByteMSB, firstByteMSB));

uint32_t safeUint32LSB = static_cast<uint32_t>(Uint16Lsb2Msb(secondByteLSB, firstByteLSB));



return static_cast<uint32_t>((safeUint32MSB << 16) | safeUint32LSB);

}

void printSHTP(const uint8_t* buffer, uint16_t bufferSize)

{

uint8_t channel = buffer\[2\];

uint8_t seqNum = buffer\[3\];



Serial.print("Length: ");

Serial.println(bufferSize);



Serial.print("Channel: ");

Serial.println(channel);



Serial.print("SeqNum: ");

Serial.println(seqNum);



Serial.print("\\nPayload: ");



if (bufferSize > 64)

{

    for (uint8_t i = 4; i < 64; i++)

    {

        Serial.print(buffer\[i\]);

        Serial.print(" ");

    }



    Serial.println("\\n");

}

else

{

    for (uint8_t i = 4; i < bufferSize; i++)

    {

        Serial.print(buffer\[i\]);

        Serial.print(" ");

    }



    Serial.println("\\n");

}

}

void setup()

{

Serial.begin(115200);

delay(1000);



pinMode(SPI_CS, OUTPUT);

digitalWrite(SPI_CS, HIGH);



SPI.begin();

// SPI.begin(SPI_SCK, SPI_SO, SPI_SI, SPI_CS);



pinMode(IMU_PS0, OUTPUT);

pinMode(IMU_PS1, OUTPUT);

pinMode(IMU_INT, INPUT);

pinMode(IMU_RST, OUTPUT);



digitalWrite(IMU_PS0, HIGH);

digitalWrite(IMU_PS1, HIGH);

digitalWrite(IMU_RST, HIGH);



for (uint8_t i = 0; i < 64; i++)

{

    imuBuff\[i\] = 0;

}

}

void loop()

{

if(false == boardCheck)

{

    delay(2000);



    Serial.println("=== BOARD CHECK ===");



    Serial.print("Current IMU_INT is: ");

    Serial.println(digitalRead(IMU_INT));



    printSHTP(imuBuff, 0);



    Serial.println();



    boardCheck = true;



    Serial.println("===================");



    return;

}



if(LOW == digitalRead(IMU_INT))

{

    SPI.beginTransaction(

        SPISettings(

            1000000,

            MSBFIRST,

            SPI_MODE3

        )

    );

    digitalWrite(SPI_CS, LOW);



    // Read SHTP header

    for(uint8_t i = 0; i < 4; i++)

    {

        imuBuff\[i\] = SPI.transfer(0x00);

    }



    uint16_t length = Uint16Lsb2Msb(imuBuff\[0\], imuBuff\[1\]);

    length &= 0x7FFF;

    

    uint16_t bytesToRead = length;

    if(bytesToRead > sizeof(imuBuff))

    {

        bytesToRead = sizeof(imuBuff);

    }



    // Read payload

    for(uint16_t i = 4; i < bytesToRead; i++)

    {

        imuBuff\[i\] = SPI.transfer(0x00);

    }



    digitalWrite(SPI_CS, HIGH);

    SPI.endTransaction();



    printSHTP(imuBuff, bytesToRead);



    if(false == initialized)

    {

        if(imuBuff\[2\] == 0x02 && imuBuff\[4\] == 0xF1 && imuBuff\[6\] == 0x84)

        {

            initialized = true;

            Serial.println("======================");

            Serial.println("= IMU IS INITIALIZED =");

            Serial.println("======================");



            return;

        }

    }

    return;

}



if(true == initialized)

{

    if(false == tested)

    {

        Serial.println();



        // PS0 used instead of WAK

        digitalWrite(IMU_PS0, LOW);



        while(HIGH == digitalRead(IMU_INT))

        {

        }



        SPI.beginTransaction(

            SPISettings(

                1000000,

                MSBFIRST,

                SPI_MODE3

            )

        );



        digitalWrite(SPI_CS, LOW);

        SPI.transfer(testPacket, sizeof(testPacket));



        digitalWrite(SPI_CS, HIGH);

        SPI.endTransaction();



        // PS0 back HIGH

        digitalWrite(IMU_PS0, HIGH);



        Serial.println("The test package was sent successfully.");



        tested = true;

        return;

    }



    if(false == tested2)

    {

        Serial.println();

        delay(10);



        // Serial.print("Currently IMU_INT is: ");

        // Serial.println(digitalRead(IMU_INT));



        // PS0 used instead of WAK

        digitalWrite(IMU_PS0, LOW);



        while(HIGH == digitalRead(IMU_INT))

        {

        }



        SPI.beginTransaction(

            SPISettings(

                1000000,

                MSBFIRST,

                SPI_MODE3

            )

        );



        digitalWrite(SPI_CS, LOW);

        SPI.transfer(testPacket2, sizeof(testPacket2));



        digitalWrite(SPI_CS, HIGH);

        SPI.endTransaction();



        // PS0 back HIGH

        digitalWrite(IMU_PS0, HIGH);

        Serial.println("The test package 2 was sent successfully.");



        tested2 = true;

        return;

    }

}

}

Connectivity is as follows (see also the source code for reference):

That looks like a counterfeit sparkfun board :-/ Our looks like this

That being said I would recommend re-soldering all of the left side’s contacts…they don’t look solid to me

Here’s the Serial log from enabling Accel:


(and so on… the data is being uploaded)

Here’s the log from trying to enable Gyro:
the first pictures are the same

Hi TS-Russel,

Thank you for the fast response!
I’ve bought this board as a part of a universary project before half a year. I don’t know if it was from AliBaba or AliExpress but it seemed legit… We did a group order with friends and bought a total 3 (or 4) IMU’s of exactly this type. As I know one the guys managed to successfully use it with the library you’ve provided.

It would be very sad if it is counterfeit… I will try to re-solder the left side. I’m curious how I managed to activate the accelerometer, assuming the solder is not solid… seems strange :smiley:

I’d definitely re-solder and maybe have the person with a working setup send photos of their wiring, copy it, and perhaps their code (if different)

I agree with resolder. Strange that gyro wouldn’t come up. It does look counterfeit.

Likely a distraction, but I did implement a micropython driver for this device:

tr

252 is the clue, this is 0xFC, which is _GET_FEATURE_RESPONSE in my code,

You have to read all of the three or four documents listed in my Readme to figure the initialization all out. It is because the combination of the Bosch engine for the sensor and all of the Ceva/Hillcrest processing make it complicated.

I can’t remember exactly, but the initialization of the sensor is pretty complicated, in fact, I bailed on both the Sparkfun & Adafriut drivers because they had a number bugs and they skipped over things that I fixed in my code, I’ve been meaning to go back and do back ports into both Sparkfun and Adafruit, but I haven’t had the time. And my code meets my needs.

Good luck!

I see you are getting big payloads. Sensor reports are generally small. what you are seeing is SHTP headers with Time base references and multiple reports. There is a lot of details in the SH-2. All of these has to be parsed to understand it. And you need to be precise about responding to each in the correct ways on the correct channels. It is a big complicated and the info is spread across all of the docs I mentioned. You will need to implement the whole SH-2 protocol which is complicated.

Highly suggest printing values in hex (since all of the docs use this), you are going to have to parse each payload to understand what it really is. There are also big “advertisement” packages at the start which will provide you all of the report lengths. This is not a simple state machine, where you can just ping a sensor and get data.

You can get a sense of these by running my code with debug on to see the reports and how they are put together, I even disabled some debug messages because of the volume of them so you may have to re-enable them to get the full picture. I’ll try to post a log below.

If you are doing this for a short-term school project, my advice is pick another sensor.

Here is the log output I created. Also make sure you do a hard reset, then wait for the acknowledgement, then the dance starts…

DBG:: ********** init on SPI Interface *************

DBG:: Hard Reset starting…
DBG:: Hard Reset End, awaiting acknowledgement (0xf8)

DBG:: Wait for Advertisement after reset and Reset Complete
DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 284 (0x11c)
DBG:: Channel: SHTP_CHAN_COMMAND (0x0)
DBG:: Sequence: 0

DBG:: Data:
DBG:: Data Len: 280
DBG:: [0x00] 0x00 0x01 0x04 0x00
DBG:: [0x04] 0x00 0x00 0x00 0x80
DBG:: [0x08] 0x06 0x31 0x2E 0x30
DBG:: [0x0C] 0x2E 0x30 0x00 0x02
DBG:: [0x10] 0x02 0x00 0x01 0x03
DBG:: [0x14] 0x02 0xFF 0x7F 0x04
DBG:: [0x18] 0x02 0x00 0x01 0x05
DBG:: [0x1C] 0x02 0xFF 0x7F 0x08
DBG:: [0x20] 0x05 0x53 0x48 0x54
DBG:: [0x24] 0x50 0x00 0x06 0x01
DBG:: [0x28] 0x00 0x09 0x08 0x63
DBG:: [0x2C] 0x6F 0x6E 0x74 0x72
DBG:: [0x30] 0x6F 0x6C 0x00 0x01
DBG:: [0x34] 0x04 0x01 0x00 0x00
DBG:: [0x38] 0x00 0x08 0x0B 0x65
DBG:: [0x3C] 0x78 0x65 0x63 0x75
DBG:: [0x40] 0x74 0x61 0x62 0x6C
DBG:: [0x44] 0x65 0x00 0x06 0x01
DBG:: [0x48] 0x01 0x09 0x07 0x64
DBG:: [0x4C] 0x65 0x76 0x69 0x63
DBG:: [0x50] 0x65 0x00 0x01 0x04
DBG:: [0x54] 0x02 0x00 0x00 0x00
DBG:: [0x58] 0x08 0x0A 0x73 0x65
DBG:: [0x5C] 0x6E 0x73 0x6F 0x72
DBG:: [0x60] 0x68 0x75 0x62 0x00
DBG:: [0x64] 0x06 0x01 0x02 0x09
DBG:: [0x68] 0x08 0x63 0x6F 0x6E
DBG:: [0x6C] 0x74 0x72 0x6F 0x6C
DBG:: [0x70] 0x00 0x06 0x01 0x03
DBG:: [0x74] 0x09 0x0C 0x69 0x6E
DBG:: [0x78] 0x70 0x75 0x74 0x4E
DBG:: [0x7C] 0x6F 0x72 0x6D 0x61
DBG:: [0x80] 0x6C 0x00 0x07 0x01
DBG:: [0x84] 0x04 0x09 0x0A 0x69
DBG:: [0x88] 0x6E 0x70 0x75 0x74
DBG:: [0x8C] 0x57 0x61 0x6B 0x65
DBG:: [0x90] 0x00 0x06 0x01 0x05
DBG:: [0x94] 0x09 0x0C 0x69 0x6E
DBG:: [0x98] 0x70 0x75 0x74 0x47
DBG:: [0x9C] 0x79 0x72 0x6F 0x52
DBG:: [0xA0] 0x76 0x00 0x80 0x06
DBG:: [0xA4] 0x31 0x2E 0x31 0x2E
DBG:: [0xA8] 0x30 0x00 0x81 0x6C
DBG:: [0xAC] 0xF8 0x10 0xF5 0x04
DBG:: [0xB0] 0xF3 0x10 0xF1 0x10
DBG:: [0xB4] 0xFB 0x05 0xFA 0x05
DBG:: [0xB8] 0xFC 0x11 0xEF 0x02
DBG:: [0xBC] 0x01 0x0A 0x02 0x0A
DBG:: [0xC0] 0x03 0x0A 0x04 0x0A
DBG:: [0xC4] 0x05 0x0E 0x06 0x0A
DBG:: [0xC8] 0x07 0x10 0x08 0x0C
DBG:: [0xCC] 0x09 0x0E 0x0A 0x08
DBG:: [0xD0] 0x0B 0x08 0x0C 0x06
DBG:: [0xD4] 0x0D 0x06 0x0E 0x06
DBG:: [0xD8] 0x0F 0x10 0x10 0x05
DBG:: [0xDC] 0x11 0x0C 0x12 0x06
DBG:: [0xE0] 0x13 0x06 0x14 0x10
DBG:: [0xE4] 0x15 0x10 0x16 0x10
DBG:: [0xE8] 0x17 0x00 0x18 0x08
DBG:: [0xEC] 0x19 0x06 0x1A 0x00
DBG:: [0xF0] 0x1B 0x00 0x1C 0x06
DBG:: [0xF4] 0x1D 0x00 0x1E 0x10
DBG:: [0xF8] 0x1F 0x00 0x20 0x00
DBG:: [0xFC] 0x21 0x00 0x22 0x00
DBG:: [0x100] 0x23 0x00 0x24 0x00
DBG:: [0x104] 0x25 0x00 0x26 0x00
DBG:: [0x108] 0x27 0x00 0x28 0x0E
DBG:: [0x10C] 0x29 0x0C 0x2A 0x0E
DBG:: [0x110] 0x2B 0x06 0x2C 0x00
DBG:: [0x114] 0x2D 0x00 0x2E 0x00
*******************************
DBG:: New Style SHTP Advertisement Response (0x00), channel: SHTP_COMMAND (0x0)

DBG:: Advertisement response on Channel 0x00
DBG::
Advertisement TLV Decode:
DBG:: TAG_GUID: 0
DBG:: SHTP Version: 1.0.0
DBG:: Max Cargo Write: 252
DBG:: Max Cargo Read: 32763
DBG:: TAG_MAX_TRANSFER_WRITE: 256
DBG:: TAG_MAX_TRANSFER_READ: 32767
DBG:: TAG_APP_NAME: SHTP
DBG:: TAG_NORMAL_CHANNEL: 0
DBG:: TAG_CHANNEL_NAME: control
DBG:: TAG_GUID: 1
DBG:: TAG_APP_NAME: executable
DBG:: TAG_NORMAL_CHANNEL: 1
DBG:: TAG_CHANNEL_NAME: device
DBG:: TAG_GUID: 2
DBG:: TAG_APP_NAME: sensorhub
DBG:: TAG_NORMAL_CHANNEL: 2
DBG:: TAG_CHANNEL_NAME: control
DBG:: TAG_NORMAL_CHANNEL: 3
DBG:: TAG_CHANNEL_NAME: inputNormal
DBG:: TAG_WAKE_CHANNEL: 4
DBG:: TAG_CHANNEL_NAME: inputWake
DBG:: TAG_NORMAL_CHANNEL: 5
DBG:: TAG_CHANNEL_NAME: inputGyroRv
DBG:: SHTP Version: 1.1.0
DBG:: Report List, lengths (Report List):
DBG:: Report 0xF8, Length: 16
DBG:: Report 0xF5, Length: 4
DBG:: Report 0xF3, Length: 16
DBG:: Report 0xF1, Length: 16
DBG:: Report 0xFB, Length: 5
DBG:: Report 0xFA, Length: 5
DBG:: Report 0xFC, Length: 17
DBG:: Report 0xEF, Length: 2
DBG:: Report 0x01, Length: 10
DBG:: Report 0x02, Length: 10
DBG:: Report 0x03, Length: 10
DBG:: Report 0x04, Length: 10
DBG:: Report 0x05, Length: 14
DBG:: Report 0x06, Length: 10
DBG:: Report 0x07, Length: 16
DBG:: Report 0x08, Length: 12
DBG:: Report 0x09, Length: 14
DBG:: Report 0x0A, Length: 8
DBG:: Report 0x0B, Length: 8
DBG:: Report 0x0C, Length: 6
DBG:: Report 0x0D, Length: 6
DBG:: Report 0x0E, Length: 6
DBG:: Report 0x0F, Length: 16
DBG:: Report 0x10, Length: 5
DBG:: Report 0x11, Length: 12
DBG:: Report 0x12, Length: 6
DBG:: Report 0x13, Length: 6
DBG:: Report 0x14, Length: 16
DBG:: Report 0x15, Length: 16
DBG:: Report 0x16, Length: 16
DBG:: Report 0x17, Length: 0
DBG:: Report 0x18, Length: 8
DBG:: Report 0x19, Length: 6
DBG:: Report 0x1A, Length: 0
DBG:: Report 0x1B, Length: 0
DBG:: Report 0x1C, Length: 6
DBG:: Report 0x1D, Length: 0
DBG:: Report 0x1E, Length: 16
DBG:: Report 0x1F, Length: 0
DBG:: Report 0x20, Length: 0
DBG:: Report 0x21, Length: 0
DBG:: Report 0x22, Length: 0
DBG:: Report 0x23, Length: 0
DBG:: Report 0x24, Length: 0
DBG:: Report 0x25, Length: 0
DBG:: Report 0x26, Length: 0
DBG:: Report 0x27, Length: 0
DBG:: Report 0x28, Length: 14
DBG:: Report 0x29, Length: 12
DBG:: Report 0x2A, Length: 14
DBG:: Report 0x2B, Length: 6
DBG:: Report 0x2C, Length: 0
DBG:: Report 0x2D, Length: 0
DBG:: Report 0x2E, Length: 0

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 5 (0x5)
DBG:: Channel: SHTP_CHAN_EXE (0x1)
DBG:: Sequence: 0

DBG:: Data:
DBG:: Data Len: 1
DBG:: [0x00] 0x01
*******************************

DBG:: Command Execution Received on Channel (0x0)
DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 20 (0x14)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 0

DBG:: Data:
DBG:: Data Len: 16
DBG:: [0x00] 0xF1 0x00 0x84 0x00
DBG:: [0x04] 0x00 0x00 0x01 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
*******************************

DBG:: Command response (0xf1)
DBG:: Received: Command to Re-Initialze BNO08x

DBG:: Request Product ID to verify Reset
DBG:: Sending PRODUCT_ID_REQUEST (0xf9) on channel 2
DBG:: WAKE pulse to BNO08x
DBG:: Sending Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 6 (0x6)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 0

DBG:: Data:
DBG:: Data Len: 2
DBG:: [0x00] 0xF9 0x00
*******************************

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 20 (0x14)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 1

DBG:: Data:
DBG:: Data Len: 16
DBG:: [0x00] 0xF8 0x04 0x03 0x0C
DBG:: [0x04] 0x53 0xA8 0x98 0x00
DBG:: [0x08] 0x3E 0x00 0x00 0x00
DBG:: [0x0C] 0x06 0x00 0x00 0x00
*******************************

DBG:: Product ID Response (0xf8):
DBG:: *** Last Reset Cause: 4 = External Reset
DBG:: *** Part Number: 10004563
DBG:: *** Software Version: 3.12.6
DBG:: Build: 62

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 52 (0x34)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 2

DBG:: Data:
DBG:: Data Len: 48
DBG:: [0x00] 0xF8 0x00 0x01 0x0A
DBG:: [0x04] 0x96 0xA4 0x98 0x00
DBG:: [0x08] 0x94 0x01 0x00 0x00
DBG:: [0x0C] 0x0A 0x00 0x00 0x00
DBG:: [0x10] 0xF8 0x00 0x05 0x07
DBG:: [0x14] 0xA7 0xA6 0x98 0x00
DBG:: [0x18] 0x3F 0x01 0x00 0x00
DBG:: [0x1C] 0x11 0x00 0x00 0x00
DBG:: [0x20] 0xF8 0x00 0x05 0x03
DBG:: [0x24] 0xB5 0xA6 0x98 0x00
DBG:: [0x28] 0xE2 0x00 0x00 0x00
DBG:: [0x2C] 0x0E 0x00 0x00 0x00
*******************************

DBG:: Product ID Response (0xf8):
DBG:: *** Last Reset Cause: 0 = Not Applicable
DBG:: *** Part Number: 10003606
DBG:: *** Software Version: 1.10.10
DBG:: Build: 404

DBG:: Product ID Response (0xf8):
DBG:: *** Last Reset Cause: 0 = Not Applicable
DBG:: *** Part Number: 10004135
DBG:: *** Software Version: 5.7.17
DBG:: Build: 319

DBG:: Product ID Response (0xf8):
DBG:: *** Last Reset Cause: 0 = Not Applicable
DBG:: *** Part Number: 10004149
DBG:: *** Software Version: 5.3.14
DBG:: Build: 226

DBG:: *** Hard reset success, acknowledged with first Product ID 0xF8

DBG:: ********** End init *************

SPI(0, baudrate=3000000, polarity=1, phase=1, bits=8, sck=18, mosi=19, miso=16)

Start

DBG:: Send SET_FEATURE_COMMAND (0xfd) to enable FEATURE ID: 0x1
DBG:: Requested Interval: 10.0 ms
DBG:: WAKE pulse to BNO08x
DBG:: Sending Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 21 (0x15)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 1

DBG:: Data:
DBG:: Data Len: 17
DBG:: [0x00] 0xFD 0x01 0x00 0x00
DBG:: [0x04] 0x00 0x10 0x27 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
DBG:: [0x10] 0x00
*******************************

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 21 (0x15)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 3
DBG:: Feature Enabled: acceleration (0x1)

DBG:: Data:
DBG:: Data Len: 17
DBG:: [0x00] 0xFC 0x01 0x00 0x00
DBG:: [0x04] 0x00 0x40 0x1F 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
DBG:: [0x10] 0x00
*******************************

DBG:: Enabled Report: acceleration: 0x1
DBG:: Actual Report Interval: 8.0 ms
DBG:: All Enabled tuples = {1: (0.0, 0.0, 0.0, 0, 0.0)}

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 0
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x0C 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x00 0x02
DBG:: [0x08] 0x00 0xE0 0xFE 0x71
DBG:: [0x0C] 0xFF 0x9B 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 1
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x07 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x01 0x02
DBG:: [0x08] 0x00 0xDE 0xFE 0x75
DBG:: [0x0C] 0xFF 0x9D 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 2
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x09 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x02 0x02
DBG:: [0x08] 0x00 0xE8 0xFE 0x73
DBG:: [0x0C] 0xFF 0x98 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 3
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x07 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x03 0x02
DBG:: [0x08] 0x00 0xE3 0xFE 0x73
DBG:: [0x0C] 0xFF 0x9B 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 4
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x07 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x04 0x02
DBG:: [0x08] 0x00 0xE8 0xFE 0x71
DBG:: [0x0C] 0xFF 0x96 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 5
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x00 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x05 0x02
DBG:: [0x08] 0x00 0xE3 0xFE 0x6E
DBG:: [0x0C] 0xFF 0x9F 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Send SET_FEATURE_COMMAND (0xfd) to enable FEATURE ID: 0x3
DBG:: Requested Interval: 10.0 ms
DBG:: WAKE pulse to BNO08x
DBG:: Sending Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 21 (0x15)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 2

DBG:: Data:
DBG:: Data Len: 17
DBG:: [0x00] 0xFD 0x03 0x00 0x00
DBG:: [0x04] 0x00 0x10 0x27 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
DBG:: [0x10] 0x00
*******************************

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 6
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x62 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x06 0x02
DBG:: [0x08] 0x00 0xEA 0xFE 0x73
DBG:: [0x0C] 0xFF 0x9F 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 7
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x0C 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x07 0x02
DBG:: [0x08] 0x00 0xE5 0xFE 0x73
DBG:: [0x0C] 0xFF 0xA1 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 8
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x05 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x08 0x02
DBG:: [0x08] 0x00 0xE7 0xFE 0x70
DBG:: [0x0C] 0xFF 0xA3 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 9
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x00 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x09 0x02
DBG:: [0x08] 0x00 0xE3 0xFE 0x71
DBG:: [0x0C] 0xFF 0x96 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 21 (0x15)
DBG:: Channel: SHTP_CHAN_CONTROL (0x2)
DBG:: Sequence: 4
DBG:: Feature Enabled: magnetic (0x3)

DBG:: Data:
DBG:: Data Len: 17
DBG:: [0x00] 0xFC 0x03 0x00 0x00
DBG:: [0x04] 0x00 0x10 0x27 0x00
DBG:: [0x08] 0x00 0x00 0x00 0x00
DBG:: [0x0C] 0x00 0x00 0x00 0x00
DBG:: [0x10] 0x00
*******************************

DBG:: Enabled Report: magnetic: 0x3
DBG:: Actual Report Interval: 10.0 ms
DBG:: All Enabled tuples = {3: (0.0, 0.0, 0.0, 0, 0.0), 1: (-1.1132812, -0.55859376, 9.5859376, 2, 1064.0)}

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 10
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x88 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x00 0x02
DBG:: [0x08] 0x00 0x2D 0xFE 0x36
DBG:: [0x0C] 0xFE 0x0B 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 11
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x00 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x0A 0x02
DBG:: [0x08] 0x00 0xE1 0xFE 0x76
DBG:: [0x0C] 0xFF 0x91 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 12
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x1C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x01 0x02
DBG:: [0x08] 0x00 0x34 0xFE 0x37
DBG:: [0x0C] 0xFE 0xFE 0xFC
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 13
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x00 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x0B 0x02
DBG:: [0x08] 0x00 0xE4 0xFE 0x73
DBG:: [0x0C] 0xFF 0x90 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 14
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x1C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x02 0x02
DBG:: [0x08] 0x00 0x3F 0xFE 0x37
DBG:: [0x0C] 0xFE 0x0B 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 15
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x10 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x0C 0x02
DBG:: [0x08] 0x00 0xE3 0xFE 0x76
DBG:: [0x0C] 0xFF 0x99 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 16
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6A 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x03 0x02
DBG:: [0x08] 0x00 0x34 0xFE 0x3D
DBG:: [0x0C] 0xFE 0x05 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 17
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x00 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x0D 0x02
DBG:: [0x08] 0x00 0xE9 0xFE 0x71
DBG:: [0x0C] 0xFF 0x90 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 18
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x1C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x04 0x02
DBG:: [0x08] 0x00 0x34 0xFE 0x2B
DBG:: [0x0C] 0xFE 0x09 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 19
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x10 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x0E 0x02
DBG:: [0x08] 0x00 0xE3 0xFE 0x73
DBG:: [0x0C] 0xFF 0x97 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 20
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6D 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x05 0x02
DBG:: [0x08] 0x00 0x33 0xFE 0x3D
DBG:: [0x0C] 0xFE 0x0B 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 21
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x14 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x0F 0x02
DBG:: [0x08] 0x00 0xE8 0xFE 0x73
DBG:: [0x0C] 0xFF 0x97 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 22
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x06 0x02
DBG:: [0x08] 0x00 0x45 0xFE 0x2C
DBG:: [0x0C] 0xFE 0x0B 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 23
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x10 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x10 0x02
DBG:: [0x08] 0x00 0xE3 0xFE 0x73
DBG:: [0x0C] 0xFF 0x97 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 24
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x07 0x02
DBG:: [0x08] 0x00 0x3B 0xFE 0x26
DBG:: [0x0C] 0xFE 0xF7 0xFC
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 25
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x12 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x11 0x02
DBG:: [0x08] 0x00 0xE8 0xFE 0x78
DBG:: [0x0C] 0xFF 0x91 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 26
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x08 0x02
DBG:: [0x08] 0x00 0x34 0xFE 0x37
DBG:: [0x0C] 0xFE 0x03 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 27
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x14 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x12 0x02
DBG:: [0x08] 0x00 0xE1 0xFE 0x76
DBG:: [0x0C] 0xFF 0x92 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 28
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x09 0x02
DBG:: [0x08] 0x00 0x41 0xFE 0x26
DBG:: [0x0C] 0xFE 0xFE 0xFC
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 29
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x12 0x00 0x00
DBG:: [0x04] 0x00 0x01 0x13 0x02
DBG:: [0x08] 0x00 0xE4 0xFE 0x6E
DBG:: [0x0C] 0xFF 0x91 0x09
*******************************
DBG:: first report: acceleration (0x1)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 30
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

DBG:: Data:
DBG:: Data Len: 15
DBG:: [0x00] 0xFB 0x6C 0x00 0x00
DBG:: [0x04] 0x00 0x03 0x0A 0x02
DBG:: [0x08] 0x00 0x28 0xFE 0x2B
DBG:: [0x0C] 0xFE 0x02 0xFD
*******************************
DBG:: first report: magnetic (0x3)

DBG:: Received Packet *************
********** Packet *************
DBG:: Header:
DBG:: Packet Len: 19 (0x13)
DBG:: Channel: SHTP_CHAN_INPUT (0x3)
DBG:: Sequence: 31
DBG:: Report Type: BASE_TIMESTAMP (0xfb)

─────── cntrl-c

Notice, hard reset (really required first, soft reset isn’t good enough, some drivers do this, but that causes other problems they haven’t debugged yet), then you have to handshake with it after it sends the advertisement of report lengths, then notice the Wake pin pulse, then get the product id, then and only the can you initialize all of the reports from the sensors, they are async, and reports will start coming, then you can initialize the sensors one by one. If you skip steps you are likely to get failures that are hard to debug. Check the acknowledge SH-2 packets from each step.

The board is a pretty good imitation of the genuine item, but that is all one can say about it, based on the photo.

The soldering definitely needs to be improved, but soldering faults are unlikely to explain why just the gyro is not responding.