Bosch Sensortec Community

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

    Is BMA2x2 driver designed to be used in a synchronous way?

    Is BMA2x2 driver designed to be used in a synchronous way?

    KamWo
    New Poster

    Hello,

    there is one thing that bothers me, the whole API depends on:

    #define BMA2x2_BUS_READ_FUNC(dev_addr, reg_addr, reg_data, r_len) bus_read(dev_addr, reg_addr, reg_data, r_len)

    and it's the function which must be implemented by the user as it's specific for every MCU.

    I use I2C to read every byte in ISR and store it one at a time in a buffer. Reading data in that way does not allow me to use the BMA2x2 driver as is.

    My questions are:

    Does the BMA2x2_BUS_READ_FUNC function is meant to be synchronous(it looks so)?
    Does it have to block the whole program and wait for every byte from a bus (I2C/SPI) with busy waiting and is the whole API designed this way?
    Is there a way to use this API easily with interrupts?

    14 REPLIES 14

    BSTRobin
    Community Moderator
    Community Moderator

    Hello KamWo,

    API is a general and portable interface. The lower hardware driver performs data reading and writing in polling or interrupt mode.

    Hello BSTRobin,

    could you give some example with interrupt mode?

    BSTRobin
    Community Moderator
    Community Moderator

    Hello KamWo,

    MCU hardware read-write implementation, need to refer to MCU manufacturers routine.

    HAL_I2C_Master_Transmit_IT()
    HAL_I2C_Master_Receive_IT()

    Hello BSTRobin,

    I was asking about an example of using a BMA2x2 driver in an intrrupt mode. Because current usage of BMA2x2_RD_FUNC_PTR assumes synchronous (busy wait) way of reading.

    Methods HAL_I2C_Master_Transmit and HAL_I2C_Master_Receive can be used with the BMA2x2 driver but the MCU will be pooling I2C registers and wait for whole data to be transmited (it will be blocked and during this time it won't be able to do anything else and I want to avoid that). I'm not asking about reading data from I2C in the interrupt mode. I ask about example of using BMA2x2 driver when I read data from I2C in a non blocking way (i.e. using HAL_I2C_Master_Transmit_IT and HAL_I2C_Master_Receive_IT).

    BSTRobin
    Community Moderator
    Community Moderator

    Hello KamWo,

    Got your point. Sensor API is a reference code that contains the process of accessing the sensor and is easy to use.

    If you want to implement other access methods, you can modify it based on the current code.

    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