Hello, I'm using the BMX055 in a company's project. I read the data using the bma2x2_driver, bmg160_driver and bmm150_sensor_api for ACC, GYRO and MAG respectively. The data coming from ACC and DATA seem to be fine, whereas the data from the MAG doesn't seem relyable. As a preliminary test I'm using the smartphone compass to detect the North, in order to compare it with the result I get from the BMX055. Since the results are very different and the readings from the BMX055 are varying over time I tried to perform a self test: - the normal test completes successfully - the advanced test always fails (I used 3 different boards) Here is a snipped of my code: static struct bmm150_dev dev; s8 initMAG(void) { s8 ret = BMM150_OK; /* Sensor interface over I2C */ dev.dev_id = BMM150_DEFAULT_I2C_ADDRESS; dev.intf = BMM150_I2C_INTF; dev.read = user_i2c_read; dev.write = user_i2c_write; dev.delay_ms = user_delay_ms; ret = bmm150_init(&dev); if(ret != 0) { ESP_LOGE(TAG_IMU, "Error initializing the magnetometer. Error code: %d", ret); } ret += perform_mag_self_tests(); /* Setting the power mode as normal */ dev.settings.pwr_mode = BMM150_NORMAL_MODE; ret += bmm150_set_op_mode(&dev); /* Setting the preset mode as Low power mode i.e. data rate = 10Hz XY-rep = 1 Z-rep = 2*/ dev.settings.preset_mode = BMM150_PRESETMODE_REGULAR; ret += bmm150_set_presetmode(&dev); return ret; } where: int8_t perform_mag_self_tests(void) { int8_t rslt; /* Perform Normal Self test */ rslt = bmm150_perform_self_test(BMM150_NORMAL_SELF_TEST, &dev); ESP_LOGI(TAG_IMU, "NORMAL SELF TEST RESULT : %d", rslt); /* Validate normal self test result */ if (rslt == BMM150_OK) { ESP_LOGI(TAG_IMU, "Normal Self test passed"); } else { ESP_LOGE(TAG_IMU, "Normal Self test failed"); } /* Perform Advanced Self test */ rslt |= bmm150_perform_self_test(BMM150_ADVANCED_SELF_TEST, &dev); ESP_LOGI(TAG_IMU, "ADVANCED SELF TEST RESULT : %d", rslt); /* Validate Advanced self test result */ if (rslt == BMM150_OK) { ESP_LOGI(TAG_IMU, "Advanced Self test passed"); } else { ESP_LOGE(TAG_IMU, "Advanced Self test failed"); } return rslt; } Could you please help me identifying the problem? Thank you!
... View more