EdigE
← ЛЕНТА
MCU · 15.07.2026

ST начала выпускать официальные Rust-драйверы для MEMS

Официальный драйвер IMU LSM6DSV320X от STMicroelectronics получил no_std-совместимый Rust-код с async API, I²C и SPI. Пакет сохраняет регистровую логику C-драйверов, но переносит обмен с датчиком на traits embedded-hal. Граница инициативы проходит по DMA, прерываниям и полноте покрытия функций конкретного сенсора.

STMicroelectronics расширяет публичную линейку Rust-драйверов для MEMS-датчиков. В репозитории st-mems-rust-drivers собраны отдельные crates для нескольких семейств сенсоров, включая IMU LSM6DSV320X; пакеты публикуются в экосистеме crates.io. Код рассчитан на no_std и отделён от конкретного микроконтроллера: транспорт I²C и SPI задаётся интерфейсами embedded-hal и embedded-hal-async, поэтому один регистровый слой можно подключить к разным HAL.

Для LSM6DSV320X документация описывает асинхронный путь как основной. Блокирующий доступ включается feature-флагом blocking и требует реализации embedded_hal::i2c::I2c либо embedded_hal::spi::SpiDevice. Такой выбор заметно влияет на архитектуру прошивки. Async-вариант снимает ожидание транзакции с основного потока, однако требует корректно настроенной шины и DMA на стороне конкретной платформы. Управление линией прерывания, EXTI, таймерами задержек и обработкой событий FIFO остаётся за прикладным кодом и выбранным HAL.

API намеренно сохраняет лексику низкоуровневых C-библиотек ST. В crate видны методы device_id_get(), reset_set(), xl_data_rate_set(), hg_xl_data_rate_set(), gy_data_rate_set() и настройки диапазонов измерения. Это упрощает сверку с datasheet и перенос существующей инициализации: разработчик продолжает оперировать регистрами, ODR, full-scale и битовыми полями, получая типовую модель владения Rust на границе буферов и шины. Драйвер не включает sensor fusion, калибровку установки или готовую обработку жестов.

ST показывает примеры на NUCLEO-F401RE, но они служат референсной интеграцией, а не ограничением платформы. Смысл платформенной независимости здесь заключается в разделении обязанностей: драйвер формирует транзакции и интерпретирует регистры, а BSP предоставляет экземпляр I²C или SPI, синхронизацию и физические GPIO. Такой разрез особенно полезен для проектов, где один и тот же датчик должен работать на STM32, RP2040 либо специализированном контроллере с собственным HAL.

Покрытие пока развивается по отдельным компонентам. Публичная документация подтверждает I²C и SPI, тогда как I3C остаётся в разработке. Полный паритет с STMems_Standard_C_driver, покрытие редких регистровых режимов, маршрутов прерываний и сценариев FIFO требуется проверять по исходникам конкретного crate и на целевой плате. Для LSM6DSV320X также понадобится оценка задержек async-тракта при высокой частоте выдачи данных: безопасность типов не отменяет бюджет времени на DMA, обслуживание EXTI и чтение пакетов FIFO.

Инициатива переводит Rust для STM32 из области стартовых шаблонов в периферийный слой, где обычно накапливается привязка к поставщику и конкретной плате. Лицензия BSD-3-Clause позволяет включать опубликованный код в широкий спектр встроенных проектов, а близость API к C-версии снижает стоимость сопоставления регистровых последовательностей при миграции.