Модуль 8.1 — Экосистема встраиваемого Rust
Упражнение 8.1.1: ID LSM303AGR
Используйте новые знания, чтобы запустить первое приложение и прочитать ID акселерометра LSM303AGR. Связаться с LSM303AGR можно по I2C, который есть на плате micro:bit. Обратите внимание, что nRF52833 поддерживает I2C через периферийное устройство TWIM (Two-Wire Interface Master).
Для начала настроим периферию I2C на нашей отладочной плате и прочитаем регистр ID акселерометра LSM303AGR.
Отправная точка находится в файле exercises/8-embedded/1-embedded-ecosystem/src/main.rs в репозитории.
Попробуйте запустить существующий проект, а затем реализуйте функциональность в соответствии с комментариями в коде.
Чтобы работать с проектом, выполните из его папки в терминале:
cargo build: собирает проект;cargo run: собирает проект, прошивает его на устройство и выводит логи в терминал (использует инструментprobe-rs run).
В обоих случаях можно добавить флаг --release, чтобы включить оптимизации.
Несколько подсказок, которые помогут начать
- Документацию по HAL можно открыть командой
cargo doc --open. Она собирается для точного чипа и версии, которые мы используем. Обычно документацию ищут на docs.rs, но там может открыться HAL для другого варианта nRF. - Как настроить I2C для nRF52833: демонстрационный пример TWIM из embassy-nrf.
- Даташит LSM303AGR: https://www.st.com/resource/en/datasheet/lsm303agr.pdf. ID акселерометра хранится в регистре
WHO_AM_I_Aпо адресу0x0F. Для обращения к самому акселерометру нужен адрес0x19. - Используйте метод
Twim::blocking_write_read: сначала он записывает адрес устройства, затем адрес регистра, а затем читает содержимое в буфер. (Подсказка: поискать метод можно в сгенерированной документации.)