Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    Development Desktop and BNO055 custom hardware communication

    Development Desktop and BNO055 custom hardware communication



    I have a custom board in the following setup: PC <--> #USB <--> FT231 <--> #UART <--> uC <--> #I2C <--> BNO055

    Is there a way to make this board work with Development Desktop? I could implement the needed firmware in the uC to forward the messages, but I couldn't find anything about the details. I'm not even sure, if it is proprietary info or not.

    Could you help me where to start?

    Thank you!

    3 REPLIES 3

    Occasional Contributor

    Hi Sir:

       I only can suggest you how to connect because I also don't have any experience.

        Maybe you should consider shuttle_id how to connect.  You can get BNO055 shuttle schematic from the following link:

       And BNO055 shuttle_id is 000011001, corresponds to AX/AY/AZ/AMUX/CODE4-CODE0.

    Established Member

    Yes ! The communucation protocol between Application Board 2.0/BNO USB stick and Development Desktop 2.0 software is proprietary.

    But most protocol details are exposed in COINES software source code. You could make use of them ! 😀

    [Hint : Check coinesAPI/pc/coines.c and  coinesAPI/pc/coines_defs.h ]

    Development Desktop  fetches board information at startup like how coines_get_board_info() would do

    Development  Desktop (PC ) sends  AA  06 02 1F 0A 0D
    You reply from microcontroller UART as AA 0F 01 00 42 1F 00 19 00 34 00 11 03 0A 0D

    The 7 bytes (7 to 13) highlighted in red  are the information bytes

    00 19 - Shuttle ID

    00 34 - Software ID (Firmware version - v3.4)

    00 11 - Hardware ID (Hardware revision - v1.1)

    03 - Application Board 2.0

    Source : BST-COINES-SD001.pdf


    int16_t coines_get_board_info(struct coines_board_info *data)
        int16_t rslt;
        if (data == NULL)
            return COINES_E_NULL_PTR;
        comm_intf_init_command_header(COINES_DD_GET, COINES_CMDID_BOARDINFORMATION);
        rslt = comm_intf_send_command(&coines_rsp_buf);
        if (rslt == COINES_SUCCESS)
            data->shuttle_id = (coines_rsp_buf.buffer[6] << ‌‌ | coines_rsp_buf.buffer[7];
            data->hardware_id = (coines_rsp_buf.buffer[8] << ‌‌ | coines_rsp_buf.buffer[9];
            data->software_id = (coines_rsp_buf.buffer[10] << ‌‌ | coines_rsp_buf.buffer[11];
            data->board = coines_rsp_buf.buffer[12];
        return rslt;


    You can do the same for I2C configure/read/write, SPI configure/read/write by checking the following functions

    • coines_config_i2c_bus
    • coines_write_i2c
    • coines_read_i2c
    • coines_config_spi_bus
    • coines_write_spi
    • coines_read_spi

    Excellent answer! Thanks a lot, I really appreciate that!