Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    BMI160 in SPI mode with MCC PIC18F47K40

    BMI160 in SPI mode with MCC PIC18F47K40

    JFdez007
    New Poster

    Hello there!

    I´m trying get CHIP-ID using SPI MCC library and i dont know corretly how to use the following void:

    uint8_t SPI1_ExchangeByte(uint8_t data)
    {
    SSP1BUF = data;
    while(!PIR3bits.SSP1IF);
    PIR3bits.SSP1IF = 0;
    return SSP1BUF;
    }

    I tryed it like that:

    readDummyp = SPI1_ExchangeByte(0X00);

    But it recieve 0x85 and i dont know what it means.

    regrets.

    3 REPLIES 3

    BSTRobin
    Community Moderator
    Community Moderator

    Hello JFdez007,

    You could refer the example code attached.

    Hi BSTRobin,

    thanks for answering.

    do you know if it possible using only SPIlibrary?

    Because if i use that reference, it´s for install in the project.

    BSTRobin
    Community Moderator
    Community Moderator

    Hello JFdez007,

    You could refer to the code logic of the sensor API, activate the SPI interface first, and then read the chip ID via SPI.

    As you used SPI library, you could call the library and capture SPI waveform to check if the actual SPI communication is normal.

    /*!
    * @brief This API is the entry point for sensor.It performs
    * the selection of I2C/SPI read mechanism according to the
    * selected interface and reads the chip-id of bmi160 sensor.
    */
    int8_t bmi160_init(struct bmi160_dev *dev)
    {
    int8_t rslt;
    uint8_t data;
    uint8_t try = 3;

    /* Null-pointer check */
    rslt = null_ptr_check(dev);

    /* Dummy read of 0x7F register to enable SPI Interface
    * if SPI is used */
    if ((rslt == BMI160_OK) && (dev->intf == BMI160_SPI_INTF))
    {
    rslt = bmi160_get_regs(BMI160_SPI_COMM_TEST_ADDR, &data, 1, dev);
    }

    if (rslt == BMI160_OK)
    {
    /* Assign chip id as zero */
    dev->chip_id = 0;

    while ((try--) && (dev->chip_id != BMI160_CHIP_ID))
    {
    /* Read chip_id */
    rslt = bmi160_get_regs(BMI160_CHIP_ID_ADDR, &dev->chip_id, 1, dev);
    }

    if ((rslt == BMI160_OK) && (dev->chip_id == BMI160_CHIP_ID))
    {
    dev->any_sig_sel = BMI160_BOTH_ANY_SIG_MOTION_DISABLED;

    /* Soft reset */
    rslt = bmi160_soft_reset(dev);
    }
    else
    {
    rslt = BMI160_E_DEV_NOT_FOUND;
    }
    }

    return rslt;
    }

    BMI160 SPI read chip ID.png

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist