Перейти к содержанию

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
1SDOвыход данных SPI; в режиме I²C — младший бит адресаGND — 0x68, VDDIO — 0x69
2ASDxданные второго интерфейса: SDA магнитометра или SDI OISVDDIO или не подключать, не на GND
3ASCxтакт второго интерфейса: SCL магнитометра или SCK OISVDDIO или не подключать, не на GND
4INT1прерывание 1 (может быть входом синхронизации FIFO)не подключать, если не нужен
5VDDIOпитание интерфейса 1,2–3,6 Впитание логики МК
6GNDIOобщий интерфейсаобщий
7GNDобщий аналоговой и цифровой частейобщий
8VDDпитание датчика 1,71–3,6 Впитание
9INT2прерывание 2не подключать, если не нужен
10OCSBвыбор OIS (второй SPI)не подключать
11OSDOвыход данных OISне подключать
12CSBвыбор микросхемы SPI и выбор протоколаVDDIO
13SCxSCK в SPI, SCL в I²CSCL
14SDxSDI в SPI 4W, SDA в I²C, SDIO в SPI 3WSDA

Таблица — по табл. 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).

Параметры

ПараметрBMI270BMI160
Питание VDD / VDDIO1,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 мкА макс.
Ток: всё в Suspend3,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 Гц
Запуск гироскопа из Suspend45 мс (2 мс из быстрого старта)55 мс (10 мс из быстрого старта)
FIFO2 КБ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):

  1. Для SPI — одно пустое чтение любого регистра. Проверить CHIP_ID (0x00) — должно быть 0x24.
  2. Записать 0x00 в PWR_CONF (0x7C) — выключить расширенное энергосбережение.
  3. Подождать не меньше 450 мкс.
  4. Записать 0x00 в INIT_CTRL (0x59).
  5. Пакетно записать 8 КБ файла конфигурации из Bosch BMI270-Sensor-API в INIT_DATA (0x5E), начиная с байта 0. Если ведущий не умеет писать 8 КБ одним пакетом, файл пишут частями, увеличивая INIT_ADDR_0 и INIT_ADDR_1 на длину предыдущей части в байтах, делённую на 2.
  6. Записать 0x01 в INIT_CTRL. Повторять загрузку после включения нельзя — только после нового сброса.
  7. Подождать 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

ЧтоBMI270BMI160
CHIP_ID (0x00)0x240xD1
Данные 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

ПараметрBMI270BMI160MPU-6050
Питание1,71–3,6 В1,71–3,6 В2,375–3,46 В
Ток, оба датчика685 мкА925 мкА3,8 мА
I²Cдо 1 МГц, 0x68 / 0x69до 1 МГц, 0x68 / 0x69400 кГц, 0x68 / 0x69
SPIдо 10 МГцдо 10 МГцнет (только у MPU-6000)
FIFO2 КБ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 В — того же напряжения, что у логики микроконтроллера.

Источники

  1. 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 — история изменений
  2. 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 — история изменений
  3. 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 мм

Нашли ошибку?