Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    BMI160 Spi read chip_id

    BMI160 Spi read chip_id

    Lmuh
    Member
    I want to communicate spi with pigpio library, but I'm stuck on the simplest thing. I want to read BMI 160 chip id. The code I wrote is below. Before I run the program, I run pigpiod, there is no problem with my connections.
    import pigpio
    import time

    pi=pigpio.pi()
    h=pi.spi_open(0,50000,0)
    # chip id register adress=0x00
    # read register adress msb bit 1 0x80
    (xx,data)=pi.spi_xref(h,[0x00 | 0x80 ])
    print(data)
    # not print data=0xD1 ,print data =0xff
     
    1 REPLY 1

    BSTRobin
    Community Moderator
    Community Moderator

    Hello Lmuh,

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

    /*!
    * @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