BMI270 и BMI160 — шестиосевые IMU Bosch Sensortec
BMI270 и BMI160 — шестиосевые датчики движения Bosch Sensortec: акселерометр и гироскоп в одном корпусе LGA-14 2,5 × 3,0 мм с одинаковой разводкой выводов и адресами I²C. Различаются они током, частотами, функциями распознавания жестов и тем, как запускаются: BMI270 без загрузки 8-килобайтного файла конфигурации не работает. Разбираем по даташитам выводы, интерфейсы, режимы питания, порядок запуска, ключевые регистры и что меняется при переходе с BMI160 на BMI270.
Обновлено Редакция GAW
BMI270 и BMI160 — инерциальные датчики (IMU) Bosch Sensortec: трёхосевые акселерометр и гироскоп с 16-битными АЦП, датчик температуры, FIFO и прерывания в одном корпусе LGA. Оба подключаются к микроконтроллеру по I²C или SPI, а второй интерфейс умеют использовать как ведущий I²C для магнитометра или как ведомый SPI для блока стабилизации камеры (OIS). Сравнение с BMI323 и BNO055, шум и дрейф гироскопа и слияние данных разобраны в статье «Акселерометры и гироскопы (IMU)»; здесь — то, что нужно для схемы и первого запуска.
Коротко
- Корпус — LGA-14 2,5 × 3,0 мм, высота 0,83 мм, шаг 0,5 мм; выводы BMI270 и BMI160 совпадают.
- Питание — VDD 1,71–3,6 В, VDDIO 1,2–3,6 В; предел 4 В у BMI270 и 4,25 В у BMI160.
- Ток — BMI270: 685 мкА в нормальном режиме, 970 мкА в режиме производительности, 3,5 мкА в Suspend; BMI160: 925 мкА с акселерометром и гироскопом.
- Шкалы — ±2…±16 g и ±125…±2000 °/с у обоих; ODR гироскопа до 6,4 кГц у BMI270 и 3,2 кГц у BMI160.
- Интерфейсы — I²C до 1 МГц (адреса 0x68 и 0x69), SPI до 10 МГц; FIFO 2 КБ у BMI270 и 1024 байта у BMI160.
- Запуск — BMI270 требует загрузки 8 КБ конфигурации после каждого включения; CHIP_ID 0x24 (BMI270) и 0xD1 (BMI160).
Выводы
| Вывод | Обозначение | Назначение | Подключение при I²C |
|---|---|---|---|
| 1 | SDO | выход данных SPI; в режиме I²C — младший бит адреса | GND — 0x68, VDDIO — 0x69 |
| 2 | ASDx | данные второго интерфейса: SDA магнитометра или SDI OIS | VDDIO или не подключать, не на GND |
| 3 | ASCx | такт второго интерфейса: SCL магнитометра или SCK OIS | VDDIO или не подключать, не на GND |
| 4 | INT1 | прерывание 1 (может быть входом синхронизации FIFO) | не подключать, если не нужен |
| 5 | VDDIO | питание интерфейса 1,2–3,6 В | питание логики МК |
| 6 | GNDIO | общий интерфейса | общий |
| 7 | GND | общий аналоговой и цифровой частей | общий |
| 8 | VDD | питание датчика 1,71–3,6 В | питание |
| 9 | INT2 | прерывание 2 | не подключать, если не нужен |
| 10 | OCSB | выбор OIS (второй SPI) | не подключать |
| 11 | OSDO | выход данных OIS | не подключать |
| 12 | CSB | выбор микросхемы SPI и выбор протокола | VDDIO |
| 13 | SCx | SCK в SPI, SCL в I²C | SCL |
| 14 | SDx | SDI в SPI 4W, SDA в I²C, SDIO в SPI 3W | SDA |
Таблица — по табл. 22 даташита BMI270 (с. 135); в табл. 30 BMI160 (с. 101) номера и назначение выводов те же. Bosch рекомендует конденсаторы 100 нФ у выводов 5 (VDDIO) и 8 (VDD). Метка вывода 1 BMI160 внутри соединена с выводом 1 — подключать её к другой цепи нельзя (с. 106).
Корпус BMI270 — 2,5 × 3,0 мм, высота 0,83 мм (с. 1); допуски есть только на чертеже на с. 143: длина 2,95–3,05 мм, ширина 2,45–2,55 мм, высота 0,79–0,87 мм, шаг выводов 0,50 мм. Номера чертежа на листе нет. Уровень чувствительности к влаге — MSL 1, пайка оплавлением с пиком до 260 °C (с. 147).
Параметры
| Параметр | BMI270 | BMI160 |
|---|---|---|
| Питание VDD / VDDIO | 1,71–3,6 В (тип. 1,8) / 1,2–3,6 В | 1,71–3,6 В (тип. 3,0) / 1,2–3,6 В (тип. 2,4) |
| Предел на выводах питания | 4 В | 4,25 В |
| Ток: акселерометр и гироскоп | 685 мкА (нормальный), 970 мкА (производительность) | 925 мкА тип., 990 мкА макс. |
| Ток: только акселерометр | 210 мкА | 180 мкА тип., 300 мкА макс. |
| Ток: всё в Suspend | 3,5 мкА | 3 мкА тип., 10 мкА макс. |
| Шкалы акселерометра | ±2, ±4, ±8, ±16 g; 16 384…2048 LSB/g | то же |
| Смещение нуля акселерометра | ±20 мg (срок службы, после пайки) | ±25 мg (компонент), ±40 мg (на плате), ±150 мg (срок службы) |
| Шум акселерометра | 0,16 мg/√Гц (±8 g) | 180 мкg/√Гц тип., 300 мкg/√Гц макс. (±8 g) |
| ODR акселерометра | 12,5–1600 Гц (0,78–400 Гц в экономичном режиме) | 12,5–1600 Гц |
| Шкалы гироскопа | ±125…±2000 °/с | ±125…±2000 °/с |
| Смещение нуля гироскопа | ±0,5 °/с (срок службы) | ±3 °/с (25 °C, без компенсации) |
| Шум гироскопа | 0,007 °/с/√Гц (производительность), 0,010 (нормальный) | 0,007 °/с/√Гц |
| ODR гироскопа | 25–6400 Гц | 25–3200 Гц |
| Запуск гироскопа из Suspend | 45 мс (2 мс из быстрого старта) | 55 мс (10 мс из быстрого старта) |
| FIFO | 2 КБ | 1024 байта |
| Рабочая температура | −40…+85 °C | −40…+85 °C |
Источники: BMI270 — табл. 1–5 (с. 11–16), BMI160 — табл. 1–5 (с. 7–11). У BMI160 чувствительность нормирована с допусками: например, 15 729–17 039 LSB/g на шкале ±2 g и 15,9–16,9 LSB/(°/с) на ±2000 °/с; у BMI270 в таблице только номиналы, а допуск задан ошибкой чувствительности: ±0,4 % у акселерометра (±8 g) и ±2 % у гироскопа, ±0,4 % после встроенной калибровки CRT.
Предельные режимы обоих: на логических выводах — от −0,3 В до VDDIO + 0,3 В (у BMI270 ещё и не больше 4 В); удар 2000 g длительностью 1 мс; падение на твёрдую поверхность с 1,8 м; ESD 2 кВ по модели тела человека и 500 В по модели заряженного прибора. Короткий удар длительностью до 200 мкс BMI270 выдерживает до 20 000 g, BMI160 — до 10 000 g.
Интерфейсы и адрес
После включения датчик работает по I²C. Если CSB соединён с VDDIO и не меняется, интерфейс остаётся I²C; первый фронт на CSB переключает его на SPI до следующего сброса — поэтому перед работой по SPI выполняют одно пустое чтение, например регистра CHIP_ID (результат отбрасывают). У BMI270 вывод CSB внутри подтянут к VDDIO резистором 75–140 кОм (табл. 18). У BMI270 есть ещё бит spi_en в регистре NV_CONF, который закрепляет SPI навсегда (разд. 6.3).
Адрес I²C задаёт вывод SDO: 0x68 (1101000) — на GND, 0x69 (1101001) — на VDDIO. Поддерживаются режимы 100 кГц, 400 кГц и Fast Mode Plus до 1 МГц, только 7-битные адреса, ёмкость шины до 400 пФ. SPI — режимы 4-проводный и 3-проводный, до 10 МГц при VDDIO от 1,62 В и до 7 МГц при меньшем VDDIO (табл. 19 BMI270). При чтении по SPI первый байт ответа — пустой (Quick Start Guide, с. 17).
После записи в режиме Suspend или экономичном режиме следующей операции нужна пауза 450 мкс, в нормальном режиме — 2 мкс (табл. 20 BMI270). У BMI160 в этих режимах не поддерживаются пакетные записи, а обычные требуют ожидания около 400 мкс (разд. 2.2.1). Логические уровни — от VDDIO: единица от 0,7 · VDDIO, ноль до 0,3 · VDDIO.
Запуск BMI270
Порядок из разд. 4.4 и Quick Start Guide (с. 17–19):
- Для SPI — одно пустое чтение любого регистра. Проверить CHIP_ID (0x00) — должно быть 0x24.
- Записать 0x00 в PWR_CONF (0x7C) — выключить расширенное энергосбережение.
- Подождать не меньше 450 мкс.
- Записать 0x00 в INIT_CTRL (0x59).
- Пакетно записать 8 КБ файла конфигурации из Bosch BMI270-Sensor-API в INIT_DATA (0x5E), начиная с байта 0. Если ведущий не умеет писать 8 КБ одним пакетом, файл пишут частями, увеличивая INIT_ADDR_0 и INIT_ADDR_1 на длину предыдущей части в байтах, делённую на 2.
- Записать 0x01 в INIT_CTRL. Повторять загрузку после включения нельзя — только после нового сброса.
- Подождать 20 мс и прочитать INTERNAL_STATUS (0x21): 0x01 — инициализация прошла, 0x02 — ошибка.
По даташиту загрузка 8 КБ по SPI на 10 МГц занимает около 6,6 мс. Наш расчёт для I²C: 8192 байта — это не меньше 73 728 тактов SCL (по 9 тактов на байт с подтверждением), около 184 мс на 400 кГц и около 74 мс на 1 МГц без учёта адреса и пауз. Файл хранится в памяти микроконтроллера, поэтому прошивка с BMI270 сразу на 8 КБ больше.
После загрузки датчик в режиме Configuration (120 мкА). Пример нормального режима из Quick Start Guide: PWR_CTRL (0x7D) = 0x0E — включить акселерометр, гироскоп и датчик температуры; ACC_CONF (0x40) = 0xA8 — 100 Гц; GYR_CONF (0x42) = 0xA9 — 200 Гц; PWR_CONF (0x7C) = 0x02. Данные — 12 байт подряд с адреса 0x0C. Шкала после сброса — ±8 g у акселерометра (ACC_RANGE = 0x02) и ±2000 °/с у гироскопа (GYR_RANGE = 0x00).
Регистры: что меняется при переходе с BMI160
| Что | BMI270 | BMI160 |
|---|---|---|
| CHIP_ID (0x00) | 0x24 | 0xD1 |
| Данные 0x0C–0x11 | акселерометр X, Y, Z | гироскоп X, Y, Z |
| Данные 0x12–0x17 | гироскоп X, Y, Z | акселерометр X, Y, Z |
| Включение датчиков | регистры PWR_CTRL (0x7D) и PWR_CONF (0x7C) | команды в CMD (0x7E): 0x11 — акселерометр, 0x15 — гироскоп в нормальный режим |
| Загрузка конфигурации | обязательна, 8 КБ | нет |
| Программный сброс | 0xB6 в CMD (0x7E) | 0xB6 в CMD (0x7E) |
| Функции распознавания | шагомер, жесты запястья, любое движение, отсутствие движения, распознавание активности | любое и значимое движение, шаги и шагомер, касание, ориентация, свободное падение |
Наш вывод: код для BMI160, перенесённый на BMI270 без изменений, прочитает акселерометр вместо гироскопа и наоборот — порядок 6-байтных блоков данных у них противоположный. Команды CMD у BMI160 выполняются не мгновенно: перевод акселерометра в нормальный режим — 3,2–3,8 мс, гироскопа из Suspend — 55–80 мс (табл. 24 BMI160); в это время другие записи в CMD отбрасываются.
Пересчёт кодов: при шкале ±8 g — 4096 LSB/g, при ±2000 °/с — 16,384 LSB/(°/с) по таблице 3 BMI270 (16,4 по описанию регистра). Датчик температуры BMI270: 0x0000 — 23 °C, шаг 1/512 K, код 0x8000 — данных нет (с. 86); при включённом гироскопе значение обновляется каждые 10 мс (±12 %), а в режимах standby и fast power-up гироскопа — раз в 1,28 с. Если гироскоп выключен, датчиком температуры управляет бит PWR_CTRL.temp_en: включённый датчик обновляется с частотой 0,78 Гц, выключение экономит в среднем около 1,8 мкА (разд. 4.6.14).
Режимы питания BMI270
| Режим | Акселерометр | Гироскоп | Оба | Условие |
|---|---|---|---|---|
| Suspend | — | — | 3,5 мкА | всё выключено, adv_power_save = 1 |
| Configuration | — | — | 120 мкА | после инициализации |
| Экономичный | от 4 мкА | от 400 мкА | от 420 мкА | adv_power_save = 1, фильтры в экономичном режиме |
| Нормальный | 210 мкА | 600 мкА | 685 мкА | filter_perf = 1 |
| Производительность | 210 мкА | 900 мкА | 970 мкА | ещё gyr_noise_perf = 1 |
Типовые токи — по табл. 6 (с. 26). Режим питания меняет потребление, время запуска и доступные функции, но не качество данных: шум и полосу фильтров задают регистры ACC_CONF и GYR_CONF. У BMI160 сочетания режимов иначе: акселерометр 180 мкА, гироскоп 850 мкА, оба 925 мкА, гироскоп в быстром старте 500 мкА (табл. 7, с. 14).
Наш расчёт для батарейного узла: на каждые 100 мА·ч ёмкости батареи BMI270 с одним акселерометром в нормальном режиме (210 мкА) расходует около 476 ч, то есть 20 суток, а в экономичном режиме при 4 мкА — около 25 000 ч, почти три года. С гироскопом так не получится: даже экономичный режим — от 400 мкА.
BMI270, BMI160 и MPU-6050
| Параметр | BMI270 | BMI160 | MPU-6050 |
|---|---|---|---|
| Питание | 1,71–3,6 В | 1,71–3,6 В | 2,375–3,46 В |
| Ток, оба датчика | 685 мкА | 925 мкА | 3,8 мА |
| I²C | до 1 МГц, 0x68 / 0x69 | до 1 МГц, 0x68 / 0x69 | 400 кГц, 0x68 / 0x69 |
| SPI | до 10 МГц | до 10 МГц | нет (только у MPU-6000) |
| FIFO | 2 КБ | 1024 байта | 1024 байта |
| Корпус | LGA-14 2,5 × 3,0 мм | LGA-14 2,5 × 3,0 мм | QFN-24 4 × 4 мм |
Наш вывод: BMI270 потребляет в пять с половиной раз меньше MPU-6050 (наш расчёт: 3,8 / 0,685 ≈ 5,5), у него I²C до 1 МГц против 400 кГц и есть SPI. Плата за это — загрузка конфигурации и меньший корпус, который вручную паять труднее. Адрес 0x68 у всех трёх одинаков — при переходе с MPU-6050 его можно не менять.
Расхождения в документации
- Циклы записи NVM. В обоих даташитах таблица 1 разрешает 14 циклов записи NVM, а таблица 5 обещает хранение данных 10 лет при 85 °C «после 15 циклов».
- Чувствительность гироскопа BMI270. Таблица 3 даёт 16,384, 32,768, 65,536, 131,072 и 262,144 LSB/(°/с), описание регистра GYR_RANGE — 16,4, 32,8, 65,6, 131,2 и 262,4. Наш расчёт: 32 768 / 2000 = 16,384 — таблица точнее, регистр округляет; у BMI160 типовое значение — 16,4.
- Ток акселерометра BMI270 в экономичном режиме. Таблица 1 — 10 мкА при 25 Гц, таблица 6 — «до 4 мкА», в зависимости от настроек ACC_CONF.
- Название на схеме. Рисунок 9 в даташите BMI270 (с. 121) подписывает датчик как BMI260.
Частые вопросы
Почему BMI270 отвечает по I²C, но не выдаёт данных?
Не загружен файл конфигурации. После включения или сброса BMI270 находится в режиме Suspend, и перед работой его нужно инициализировать: записать 0x00 в PWR_CONF (0x7C), подождать не меньше 450 мкс, записать 0x00 в INIT_CTRL (0x59), передать 8 КБ конфигурации из репозитория Bosch BMI270-Sensor-API в регистр INIT_DATA (0x5E), записать 0x01 в INIT_CTRL и не раньше чем через 20 мс проверить, что INTERNAL_STATUS (0x21) равен 0x01. BMI160 такого шага не требует.
Какой адрес I²C у BMI270 и BMI160?
Одинаковый: 0x68, если вывод SDO (1) соединён с общим проводом, и 0x69, если он подключён к VDDIO. Вывод CSB (12) для работы по I²C соединяют с VDDIO. Тот же адрес 0x68 у MPU-6050, поэтому на одной шине с ним BMI ставят на 0x69.
Можно ли заменить BMI160 на BMI270 на той же плате?
По выводам и корпусу — да: у обоих LGA-14 2,5 × 3,0 мм и одинаковая таблица выводов (табл. 22 BMI270 и табл. 30 BMI160). Но программу придётся переписать: другой CHIP_ID (0x24 вместо 0xD1), другой порядок данных (у BMI270 сначала акселерометр с адреса 0x0C, у BMI160 — гироскоп), другие регистры управления питанием и обязательная загрузка конфигурации. Абсолютный предел питания у BMI270 ниже — 4 В против 4,25 В.
Можно ли подключить BMI270 к Arduino на 5 В?
Нет. Питание VDD и VDDIO — не выше 3,6 В, а на любом логическом выводе — не больше VDDIO + 0,3 В и не больше 4 В. С 5-вольтовой платой нужен преобразователь уровней, а VDDIO питают от 3,3 или 1,8 В — того же напряжения, что у логики микроконтроллера.
Источники
- Bosch Sensortec. BMI270 Datasheet (BST-BMI270-DS000-08, document revision 1.6, March 2026) — с. 2 — основные свойства (ODR, фильтры, VDD и VDDIO, 685 мкА, 7 мdps/√Гц, SPI 10 МГц, FIFO 2 КБ); с. 11 — табл. 1 (питание, токи по режимам, 2 мс до работы интерфейса, 14 циклов NVM, −40…+85 °C); с. 12–13 — табл. 2 (акселерометр); с. 13–15 — табл. 3 (гироскоп), табл. 4 (датчик температуры); с. 16 — табл. 5 (предельные режимы); с. 17–22 — Quick Start Guide (CHIP_ID 0x24, загрузка конфигурации, примеры настроек); с. 24–26 — разд. 4.3–4.5 (питание, инициализация, табл. 6 режимов); с. 34 — FIFO; с. 69 — программный сброс 0xB6; с. 74–75 — карта регистров; с. 85–86 — INTERNAL_STATUS и TEMPERATURE; с. 102–103 — ACC_RANGE и GYR_RANGE; с. 113 — INIT_DATA; с. 119 — PWR_CONF и PWR_CTRL; с. 121–123 — интерфейсы, табл. 17–19; с. 128 — I²C (адреса, режимы, тайминги); с. 134–136 — табл. 22 (выводы), конденсаторы 100 нФ; с. 143 — размеры корпуса; с. 147 — MSL 1 и пайка 260 °C; с. 149 — история изменений
- Bosch Sensortec. BMI160 Data sheet (BST-BMI160-DS000-09, revision 1.0, November 2020) — с. 2 — основные свойства (925 мкА, FIFO 1024 байта, 1,71–3,6 В, 2,5 × 3,0 × 0,83 мм); с. 7 — табл. 1 (питание, токи); с. 8–9 — табл. 2 (акселерометр: чувствительность с допусками, смещение до ±150 мg, шум 180 и 300 мкg/√Гц — с. 8 сверена по рендеру); с. 9–10 — табл. 3–4 (гироскоп: запуск 55 и 10 мс, 16,4 LSB/(°/с), смещение ±3 °/с, ODR 25–3200 Гц; температура); с. 11 — табл. 5 (предельные режимы, 4,25 В); с. 13–14 — режимы и табл. 7 (токи по сочетаниям режимов); с. 49 — карта регистров (CHIP_ID 0xD1, порядок данных); с. 86 — команды CMD и время их выполнения; с. 93–94 — I²C (адреса, до 1 МГц); с. 101 — табл. 30 (выводы); с. 106 — корпус LGA 2,5 × 3,0 × 0,83 мм; с. 113 — история изменений
- TDK InvenSense. MPU-6000 and MPU-6050 Product Specification (PS-MPU-6000A-00, Revision 3.4) — для сравнения: VDD 2,375–3,46 В, ток 3,8 мА (гироскоп и акселерометр без DMP), I²C 400 кГц, SPI только у MPU-6000, FIFO 1024 байта, корпус QFN 4 × 4 × 0,9 мм
Нашли ошибку?
Смотрите также
- Микросхемы датчиковТок, давление, влажность, температура, свет, ИК: карточки и статьи
- Акселерометры и гироскопыBMI160, BMI270, BMI323, BNO055: параметры, дрейф гироскопа, слияние, подключение
- MPU-60506 осей по I²C: выводы, адрес, регистры, пересчёт кодов, код Arduino
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- Адрес I²C7-битный адрес ведомого и байт адреса с битом R/W
- Питание интерфейса (VDDIO)Отдельный вывод питания цифрового интерфейса, задающий его логические уровни
- Частота выдачи данных (ODR)Сколько новых отсчётов в секунду выдаёт датчик и чем она задаётся
- Спектральная плотность шуманВ/√Гц: шум усилителя в полосе 1 Гц
- Смещение нуля гироскопаПоказание гироскопа в покое: значения, дрейф угла, компенсация
- Смещение нуля акселерометраПоказание оси акселерометра при нулевом ускорении вдоль неё
- Слияние данных датчиковОбъединение акселерометра, гироскопа и магнитометра в оценку ориентации
- FIFO (буфер «первым пришёл — первым ушёл»)Аппаратная очередь между периферией и программой
- MSL (чувствительность к влаге)Сколько деталь может лежать вне сухой упаковки до пайки