Hello ,
There are two points to check.
1.Compare the following code, check I2C address on you side.
/* Fixed I2C configuration */ bme680_g.dev_id = BME680_I2C_ADDR_SECONDARY; bme680_g.intf = BME680_I2C_INTF; /* User configurable I2C configuration */ bme680_g.write = bus_write; bme680_g.read = bus_read; bme680_g.delay_ms = sleep; /* Initialize BME680 API */ ret.bme680_status = bme680_init(&bme680_g);
/*! * @brief Write operation in either I2C or SPI * * param[in] dev_addr I2C or SPI device address * param[in] reg_addr register address * param[in] reg_data_ptr pointer to the data to be written * param[in] data_len number of bytes to be written * * @return result of the bus communication function */ int8_t bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) { SensorAPI_I2Cx_Write(dev_addr, reg_addr, reg_data_ptr, data_len);
return 0; }
/*! * @brief Read operation in either I2C or SPI * * param[in] dev_addr I2C or SPI device address * param[in] reg_addr register address * param[out] reg_data_ptr pointer to the memory to be used to store the read data * param[in] data_len number of bytes to be read * * @return result of the bus communication function */ int8_t bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data_ptr, uint16_t data_len) { SensorAPI_I2Cx_Read(dev_addr, reg_addr, reg_data_ptr, data_len);
return 0; }
uint8_t GTXBuffer[512], GRXBuffer[2048];
int8_t SensorAPI_I2Cx_Read(uint8_t slave_address7, uint8_t subaddress, uint8_t *pBuffer, uint16_t ReadNumbr) { uint16_t DevAddress = slave_address7 << 1;
// send register address HAL_I2C_Master_Transmit(&I2C_HANDLE, DevAddress, &subaddress, 1, BUS_TIMEOUT); HAL_I2C_Master_Receive(&I2C_HANDLE, DevAddress, pBuffer, ReadNumbr, BUS_TIMEOUT); return 0; }
int8_t SensorAPI_I2Cx_Write(uint8_t slave_address7, uint8_t subaddress, uint8_t *pBuffer, uint16_t WriteNumbr) { uint16_t DevAddress = slave_address7 << 1;
GTXBuffer[0] = subaddress; memcpy(>XBuffer[1], pBuffer, WriteNumbr);
// send register address HAL_I2C_Master_Transmit(&I2C_HANDLE, DevAddress, GTXBuffer, WriteNumbr+1, BUS_TIMEOUT); return 0; }
2.Ensure you provide correct timestamp to BSEC.
/*! * @brief Capture the system time in microseconds * * @return system_current_time current system timestamp in microseconds */ int64_t get_timestamp_us() { int64_t system_current_time = 0; // ... // Please insert system specific function to retrieve a timestamp (in microseconds) // ... uint32_t tick; tick = HAL_GetTick(); system_current_time = 1000*(int64_t)tick; return system_current_time; }
... View more