Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BMM150: Discrepancy between data sheet and reference driver on GitHub

    BMM150: Discrepancy between data sheet and reference driver on GitHub

    hor63
    Member

    Hi,

    there is an obvious discrepancy between the BMM150 datasheet and the reference driver on GitHub:

    The magetometer data lower byte (here for X and Y axis) is 

    Bit 7: Data LSB <4>

    Bit 6: Data LSB <3> 

    Bit 5: Data LSB <2>

    Bit 4: Data LSB <1>

    Bit 3: Data LSB <0>

    Bit 2: Reserved - 0

    Bit 1: Reserved - 0

    Bit0: SelfTestX.

    However the reference code of the driver (here line 840 in bmm150.c) seems to assume that the lower byte of mag data contains significant mag data in bits 0-4, and bits 5-7 are 0:

    msb_data = ((int16_t)((int8_t)reg_data[1])) * 32;
    /* Raw mag X axis data */
    raw_mag_data.raw_datax = (int16_t)(msb_data | reg_data[0]);

     

    Can one please explain the discrepancy?

    Thanks,

    Kai

    4 REPLIES 4

    o_o
    Contributor

    Hi Kai,

     

    I think what you are missing here, is the BMM_GET_BITS macro. This macro grabs the correct LSB bits and shifts them to the rightmost position. Both datasheet and API are correct.

    /* Mag X axis data */
    reg_data[0] = BMM150_GET_BITS(reg_data[0], BMM150_DATA_X);
    /* Shift the MSB data to left by 5 bits */
    /* Multiply by 32 to get the shift left by 5 value */
    msb_data = ((int16_t)((int8_t)reg_data[1])) * 32;
    /* Raw mag X axis data */
    raw_mag_data.raw_datax = (int16_t)(msb_data | reg_data[0]);

     

    o_o

    Thanks a lot for the quick answer.

    One additional question regarding BMX160: Are the MAG data transferred verbatim in the format as described for BMM150 by the MAG interface, or somehow processed? The BMX160 data sheet does not mention anything but just states high- and low-byte for the mag data.

    Thanks,

    Kai

    handytech
    Community Moderator
    Community Moderator

    The data read from the BMM150 is directly copied as it is to the register map of the BMX160.

    Many thanks for the extreme quick turn-around.

    Your support is truly outstanding.

    May I suggest that you refer for the inner workings of the magnetometer in the BMX160 datasheet to BMI150?

    Best regards,

    Kai

    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