

The BMI270 is a low-power, 6-axis inertial measurement unit (IMU) manufactured by 宏维微 (Part ID: HW-991). It integrates a 3-axis accelerometer and a 3-axis gyroscope into a single compact package. This component is designed for motion sensing applications, offering high accuracy and low power consumption. Its advanced features make it particularly suitable for wearable devices, fitness trackers, augmented reality (AR) systems, and Internet of Things (IoT) applications.








| Parameter | Value |
|---|---|
| Manufacturer | 宏维微 |
| Part ID | HW-991 |
| Sensor Type | 6-axis IMU (3-axis accelerometer + 3-axis gyroscope) |
| Operating Voltage | 1.71V to 3.6V |
| Current Consumption | 30 µA (low-power mode) |
| Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
| Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s |
| Communication Interface | I²C, SPI |
| Operating Temperature Range | -40°C to +85°C |
| Package Type | LGA-14 (2.5 mm x 3.0 mm x 0.8 mm) |
The BMI270 comes 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 (SPI mode) |
| 5 | SDO | Serial data output (SPI mode) |
| 6 | SDA/SDI | Data line for I²C or SPI |
| 7 | SCL/SCK | Clock line for I²C or SPI |
| 8 | INT1 | Interrupt 1 output |
| 9 | INT2 | Interrupt 2 output |
| 10 | NC | Not connected |
| 11 | NC | Not connected |
| 12 | NC | Not connected |
| 13 | NC | Not connected |
| 14 | NC | Not connected |
0x68. If the AD0 pin is pulled high, the address changes to 0x69.Below is an example of how to interface the BMI270 with an Arduino UNO using I²C communication:
#include <Wire.h>
#define BMI270_I2C_ADDRESS 0x68 // Default I²C address of the BMI270
void setup() {
Wire.begin(); // Initialize I²C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Initialize BMI270
Wire.beginTransmission(BMI270_I2C_ADDRESS);
Wire.write(0x7E); // Register address for command register
Wire.write(0x11); // Command to initialize accelerometer and gyroscope
Wire.endTransmission();
Serial.println("BMI270 initialized.");
}
void loop() {
// Read accelerometer data
Wire.beginTransmission(BMI270_I2C_ADDRESS);
Wire.write(0x12); // Register address for accelerometer data
Wire.endTransmission();
Wire.requestFrom(BMI270_I2C_ADDRESS, 6); // Request 6 bytes (X, Y, Z)
if (Wire.available() == 6) {
int16_t accelX = (Wire.read() | (Wire.read() << 8));
int16_t accelY = (Wire.read() | (Wire.read() << 8));
int16_t accelZ = (Wire.read() | (Wire.read() << 8));
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:
0x68 or 0x69) is being used.Incorrect or No Data Output:
High Power Consumption:
This documentation provides a comprehensive guide to understanding and using the BMI270 IMU. For further details, consult the official datasheet or contact the manufacturer, 宏维微.