

The BMI270 is a low-power, 6-axis inertial measurement unit (IMU) that integrates a 3-axis accelerometer and a 3-axis gyroscope. It is specifically designed for motion tracking applications, offering precise orientation and motion data while maintaining minimal power consumption. This makes it an ideal choice for wearable devices, fitness trackers, augmented reality (AR) systems, and other motion-sensitive applications.








The BMI270 is a highly versatile IMU with the following key technical specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.71V to 3.6V |
| Power Consumption | 30 µA (accelerometer in low-power mode) |
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
| Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s |
| Communication Interface | I2C, SPI |
| Operating Temperature Range | -40°C to +85°C |
| Dimensions | 2.5 mm x 3.0 mm x 0.8 mm |
The BMI270 is typically available in a 14-pin LGA package. Below is the pin configuration:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VDD | Power supply (1.71V to 3.6V) |
| 2 | VDDIO | I/O voltage supply |
| 3 | GND | Ground |
| 4 | CS | Chip select for SPI (active low) |
| 5 | SDO | Serial data output (SPI) / I2C address |
| 6 | SDA/SDI | I2C data line / SPI data input |
| 7 | SCL/SCK | I2C clock line / SPI clock |
| 8 | INT1 | Interrupt 1 output |
| 9 | INT2 | Interrupt 2 output |
| 10-14 | NC | Not connected (leave floating) |
Below is an example of how to interface the BMI270 with an Arduino UNO using the I2C protocol:
#include <Wire.h>
#define BMI270_I2C_ADDRESS 0x68 // Default I2C address of BMI270
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure BMI270
Wire.beginTransmission(BMI270_I2C_ADDRESS);
Wire.write(0x7E); // Register address for command register
Wire.write(0x11); // Command to initialize accelerometer
Wire.endTransmission();
delay(100); // Wait for initialization to complete
}
void loop() {
// Request accelerometer data
Wire.beginTransmission(BMI270_I2C_ADDRESS);
Wire.write(0x12); // Register address for accelerometer data
Wire.endTransmission(false);
Wire.requestFrom(BMI270_I2C_ADDRESS, 6); // Request 6 bytes (X, Y, Z)
if (Wire.available() == 6) {
int16_t accelX = (Wire.read() << 8) | Wire.read();
int16_t accelY = (Wire.read() << 8) | Wire.read();
int16_t accelZ = (Wire.read() << 8) | Wire.read();
// Print accelerometer data
Serial.print("Accel X: ");
Serial.print(accelX);
Serial.print(" Y: ");
Serial.print(accelY);
Serial.print(" Z: ");
Serial.println(accelZ);
}
delay(500); // Delay for readability
}
No Communication with the Sensor:
Incorrect or No Data Output:
High Noise in Sensor Data:
Interrupts Not Triggering:
Q: Can the BMI270 operate in both I2C and SPI modes simultaneously?
A: No, the BMI270 can operate in either I2C or SPI mode, but not both at the same time. The mode is determined by the connections and initialization.
Q: What is the default I2C address of the BMI270?
A: The default I2C address is 0x68 when the SDO pin is connected to GND, and 0x69 when connected to VDDIO.
Q: How do I reduce power consumption further?
A: Use the low-power mode of the accelerometer and gyroscope, and disable unused features through the configuration registers.
Q: Can the BMI270 be used for gesture recognition?
A: Yes, the BMI270 supports gesture recognition and activity tracking through its built-in motion detection features.