The BMI323 is a 3-axis digital accelerometer and gyroscope sensor manufactured by Bosch. It is designed for motion tracking applications, offering high precision measurements of angular velocity and acceleration. This sensor is ideal for use in smartphones, wearables, gaming devices, and other IoT applications requiring accurate motion detection and orientation tracking.
The BMI323 combines a 3-axis accelerometer and a 3-axis gyroscope in a compact package. Below are the key technical details:
Parameter | Value |
---|---|
Supply Voltage (VDD) | 1.71V to 3.6V |
I/O Voltage (VDDIO) | 1.2V to 3.6V |
Power Consumption | 850 µA (typical, full operation) |
Measurement Range (Accel) | ±2g, ±4g, ±8g, ±16g |
Measurement Range (Gyro) | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s |
Output Data Rate (ODR) | Up to 6.4 kHz |
Interface | I²C, SPI |
Operating Temperature | -40°C to +85°C |
Package Size | 2.5 mm x 3.0 mm x 0.83 mm |
The BMI323 is available in a 12-pin LGA package. Below is the pin configuration:
Pin Number | Pin Name | Description |
---|---|---|
1 | VDD | Power supply |
2 | VDDIO | I/O voltage supply |
3 | GND | Ground |
4 | CS | Chip select (SPI) / I²C address select |
5 | SCL | Serial clock (I²C) / SPI clock |
6 | SDA | Serial data (I²C) / SPI data input |
7 | SDO | SPI data output |
8 | INT1 | Interrupt 1 output |
9 | INT2 | Interrupt 2 output |
10 | NC | Not connected |
11 | NC | Not connected |
12 | GND | Ground |
Below is an example of how to interface the BMI323 with an Arduino UNO using I²C:
#include <Wire.h>
#define BMI323_I2C_ADDRESS 0x68 // Default I²C address when CS is low
// BMI323 register addresses
#define BMI323_CHIP_ID_REG 0x00
#define BMI323_ACCEL_X_LSB 0x12
void setup() {
Wire.begin(); // Initialize I²C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Check BMI323 connection
Wire.beginTransmission(BMI323_I2C_ADDRESS);
Wire.write(BMI323_CHIP_ID_REG); // Request chip ID register
Wire.endTransmission();
Wire.requestFrom(BMI323_I2C_ADDRESS, 1);
if (Wire.available()) {
uint8_t chipID = Wire.read();
if (chipID == 0x33) { // Expected chip ID for BMI323
Serial.println("BMI323 detected!");
} else {
Serial.println("BMI323 not detected. Check connections.");
}
}
}
void loop() {
// Read accelerometer X-axis data
Wire.beginTransmission(BMI323_I2C_ADDRESS);
Wire.write(BMI323_ACCEL_X_LSB); // Request X-axis LSB register
Wire.endTransmission();
Wire.requestFrom(BMI323_I2C_ADDRESS, 2); // Read 2 bytes (LSB + MSB)
if (Wire.available() == 2) {
int16_t accelX = Wire.read(); // Read LSB
accelX |= (Wire.read() << 8); // Read MSB and combine
Serial.print("Accel X: ");
Serial.println(accelX);
}
delay(100); // Delay for readability
}
Sensor Not Detected:
Incorrect Readings:
No Interrupts Triggered: