11-19-2021 03:25 AM
Hi,
I'm new to the BMA456 accelerometer and would like to better understand this example provided on the Bosch website. The website refers to BoschSensortec / BMA456-Sensor-API in GitHub from where source and header files can be downloaded as I have done. The same page includes a User Guide with the following recommended Initializing Sequence:
uint16_t main(void) {
uint16_t rslt = BMA4_OK;
uint8_t init_seq_status = 0;
/* Declare an instance of the BMA456 device */
struct bma4_dev dev;
/* Modify the parameters */
dev.dev_addr = BMA4_I2C_ADDR_PRIMARY;
dev.interface = BMA4_I2C_INTERFACE;
dev.bus_read = USER_i2c_read;
dev.bus_write = USER_i2c_write;
dev.delay = USER_delay_ms;
dev.read_write_len = 8;
dev.resolution = 12;
dev.feature_len = BMA456_FEATURE_SIZE;
/* a. Reading the chip id. */
rslt |= bma456_init(&dev);
/* b. Performing initialization sequence.
c. Checking the correct status of the initialization sequence.
*/
rslt |= bma456_write_config_file(&dev);
return rslt;
}
struct bma4_dev is defined in one of the associated header files, bma4_defs.h, but the struct in that file has no member named 'dev_addr'. And there are other similar examples where the examples in the User Guide don't match the provided files.
How is this User Guide intended to be used ?
Solved! Go to Solution.
11-19-2021 03:34 AM
Hello TMunb,
You could follow example code to use driver code.
https://github.com/BoschSensortec/BMA456-Sensor-API/tree/master/examples/bma456/generic
11-19-2021 03:51 AM
Hello BSTRobin,
thanks for the quick reply.
Should I therefore not be using the example that I referred to in my previous post ? And if so why not ? It provides what I assume are all the necessary source and header files, but seems to have a problem with matching struct members. Is there a "fix" that can be applied either to the User Guide example code or in the files that would allow me to carry on with this path ? I assume I cannot be the only person who has seen this mismatch - has it been reported before meaning is it a known issue ?
Thanks.
11-19-2021 08:18 AM
Hello TMunb,
Refer to the actual code "https://github.com/BoschSensortec/BMA456-Sensor-API/blob/master/examples/bma456/generic/bma4_common....", it runs well.
/*!
* @brief Function to select the interface between SPI and I2C.
*/
int8_t bma4_interface_selection(struct bma4_dev *bma)
{
int8_t rslt = BMA4_OK;
if (bma != NULL)
{
/* Select the interface for execution
* For I2C : BMA4_I2C_INTF
* For SPI : BMA4_SPI_INTF
*/
bma->intf = BMA4_I2C_INTF;
/* Bus configuration : I2C */
if (bma->intf == BMA4_I2C_INTF)
{
printf("I2C Interface \n");
/* To initialize the user I2C function */
user_i2c_init();
dev_addr = BMA4_I2C_ADDR_PRIMARY;
bma->bus_read = user_i2c_read;
bma->bus_write = user_i2c_write;
}
...
}
11-22-2021 01:11 AM
hi BSTRobin,
so are you saying we combine the the original source and header files, as per the instructions below,
Inside your project, include files bma4_defs.h, bma4.h, bma4.c, bma456.c and bma456.h."
but instead of using the sample codes from that User Guide page we instead use bma4_common.c ?