01-05-2022 11:49 PM
I have two Bosch sensors model BMI160 and BMP388. I am trying to use these sensors with my STM32 based NUCLEO board. I am using CubeIDE and C to code STM32.
Bosch has APIs for its sensors and they are pretty detailed. However, as far as I understand, a wrapper needs to be written in order to provide I2C or SPI connection.
https://github.com/BoschSensortec/BMP3-Sensor-API
Let me give an example from BMP388. Besides the main .c and .h files of the API, there are common.c and common.h files. As far as I understand interface communication happens via these files. In the standard version, "coines" protocol is used, but I need to convert it to STM32 HAL I2C communication for both sensors.
For the BMP388 I created something like this:
BMP3_INTF_RET_TYPE bmp3_i2c_read(uint8_t reg_addr, uint8_t * reg_data, uint32_t len, void * intf_ptr);
BMP3_INTF_RET_TYPE bmp3_i2c_write(uint8_t reg_addr,
const uint8_t * reg_data, uint32_t len, void * intf_ptr);
uint8_t GTXBuffer[512], GRXBuffer[2048];
int8_t SensorAPI_I2Cx_Read(uint8_t subaddress, uint8_t * pBuffer, uint32_t ReadNumbr, void * intf_ptr) {
uint8_t dev_addr = * (uint8_t * ) intf_ptr;
uint16_t DevAddress = dev_addr << 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 subaddress, uint8_t * pBuffer, uint32_t WriteNumbr, void * intf_ptr) {
uint8_t dev_addr = * (uint8_t * ) intf_ptr;
uint16_t DevAddress = dev_addr << 1;
GTXBuffer[0] = subaddress;
memcpy( & GTXBuffer[1], pBuffer, WriteNumbr);
// send register address
HAL_I2C_Master_Transmit( & I2C_HANDLE, DevAddress, GTXBuffer, WriteNumbr + 1, BUS_TIMEOUT);
return 0;
}
But I have no idea how to edit common.c and common.h to be able to run this function.
Solved! Go to Solution.
01-06-2022 01:12 AM
Hello DroneKid,
It seems you discuss same topic in https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/How-to-use-BMP388-with-STM32/td-p/50411, you could continue to discuss in that topic.
01-06-2022 01:16 AM
Hi, yes, I asked a similar question on that subject. However, I thought this new topic I opened was a more general question.
I'm trying to understand the Bosch Sensor API system, sorry if I did anything against the forum rules.
01-06-2022 06:31 AM
Hello DroneKid,
Welcome to ask question in community. I mean you could ask similar question in one topic, then reduce repetitive discussions. Bosch sensortec community an open forum with no special rules.
I tested read sensor data example on STM32F401 for your reference. You could see attached reference code and the following test restu, it work well.
01-06-2022 02:32 PM
Thank you for the answer. I see you used RTOS format, correct?
I can also adapt this code to BMI160, right?