Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    BMX160

    BMX160

    MJAChapman
    New Poster

    I have a lot of issues with respect to the BMX160.

    I'll start with the data sheet. From what I see there is no reference to the BMM150 although it appears to integrated into the package but there is no references as to how. The forums when people have asked about the BMX160 the response is related to the BMI160 and I suspect with the BMM150 attached to it auxiliary I2C port. Looking at the Page 25 and 26 there are steps to communicate with the magnetometer (BMM150) using the Indirect Read and Write protocol except the documentation is misleading. What I eventually discovered was that:

    1. MAG_IF[3] is a read/write data register
    2. MAG_IF[2] selects the magnetometer Address to Write to
    3. MAG_IF[1]selects the magnetometer Address to Read from

    I have issues with the static reading from the magnetometer. I compared it with the NXPFXOS8700 and FXAS21002 sensor I'm currently using and there is a significant variation. trying to calibrate using the PJRC (of Teensy fame) tool and a version that I adapted from NXP c

    I have attached 2 files:

    1. BMX160 Indirect Read-Write Code V01 -the Arduino cpp code snip that is used to read and write to the BMX160 over I2C. In my code I test the BMX160 status register to make sure the transaction is complete but it doesn't always work. Sometimes the data returned from the current read is the data from the last read. See the BMX160 Advanced Test Configuration the sequence.
    2. BMX160 Advanced Test Configuration V01 - the prinout of the steps to perform an Advanced Self Test and the results look odd. I have assumed that each bit in the count is 0.3uT although it is difficult to work out what is going on in the BMM150 code as it includes compensation using Trim data.

    From my observations reading the documents the TFM should trigger a sample (sequence) and the return to sleep.

    3 REPLIES 3

    FAE_CA1
    Community Moderator
    Community Moderator

    Hi,

    Thanks for your inquiry.

    It is true that inside BMX160 the BMM150 magnetometer is connected to BMI160 IMU auxiliary interface. It works the same way as BMI160 shuttle board that is avaialble to purchase at https://www.digikey.com/product-detail/en/bosch-sensortec/BMI160-SHUTL/828-1052-ND/6136295.

    We have API source code for BMX160 = BMI160 + BMM150 avaialble online at https://github.com/BoschSensortec/BMI160_driver. You don't need to do everything from scratch. There are also examples on the Github. You only need to define three functions on your platform such as I2C read, I2C write and delay. Then you can use the API calls right away.

    Thanks.

    cwi
    Established Member

    Hi,

    This might be the case but your drivers are not suitable for DMA triggered reading and writing .Therefore, I need to implement the driver for myself.Polling the SPI is far to slow. And it would be good to tell the user that there are trim values. In the entire datasheet of the BMX160 it is not mentioned. Nor the compensation is explained. Is there a specific reason for it?

    Further, I am only guessing that I need to read the trim values via mag_if[2] and mag_if[3]. But is bulk read possible? Or do I need to pick up each trim value manually?

    Kind regards,

    Constantin

    FAE_CA1
    Community Moderator
    Community Moderator

    Hi,

    On page 26 of BMX160 datasheet, it says that please refer to API/driver from Bosch for the BMM150 magnetometer. This is to make it easy for developers to use BMM150 without the need to know the formula behind. You can read the trimmed values from the magnetometer manually and then apply the formula to calculate the magnetic field uT based on the raw data of x/y/z axes. Please see the attached two PDF files for more information.

    Thanks.

    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