Bosch Sensortec Community

    Showing results for 
    Search instead for 
    Did you mean: 

    BMP280 library - wrong range checks?

    BMP280 library - wrong range checks?

    Occasional Visitor

    ... that I found here:

    In bmp280.c, there is the function:
      static int8_t st_check_boundaries(int32_t utemperature, int32_t upressure)

    Which makes range checks like:

      if ((utemperature <= BMP280_ST_ADC_T_MIN || utemperature >= BMP280_ST_ADC_T_MAX) &&
      (upressure <= BMP280_ST_ADC_P_MIN || upressure >= BMP280_ST_ADC_P_MAX))

    Looking at how the macros are defined in bmp280_defs.h:
      /* 0x00000 is minimum output value */
      #define BMP280_ST_ADC_T_MIN INT32_C(0x00000)

    If 0 is the minimum output value, i.e. utemperature is allowed to have the value of 0,
    then this check is wrong.
    It should use < || > instead of <= || >=.

    Maybe unlikely to encounter normally, but I've seen a uncompressed pressure/temp being 0 on the first read after activating the device. I have a suspicion that that's only a bug on my side with the i2c stuff. But anyway, that's how I found it, by this failing after the first read and working afterwards when only non-zero values are fetched via i2c.

    2 REPLIES 2

    Community Moderator
    Community Moderator

    Hello skt, 


    So, you have two questoins. 

    1) error range 

    2) First i2c read 0 value

    In case of first question, I will check with my apps team that MIN and MAX are allowed. 

    And second question is if you read BMP280 with polling methomd, you might try to read it before BMP280 is ready. 

    My suggestion is to make delay like 30 ~ 50 ms, then try again 🙂 

    Please let me know if you have any further questions. 


    Community Moderator
    Community Moderator

    Hello skt, 


    Regarding range issue, we will update our software in jan 2021. 

    Thank you for letting me know. 

    Thanks 🙂 


    Minhwan Oh