Прошивка
Прошивка — это процесс записи нашей программы в энергонезависимую память микроконтроллера. После прошивки микроконтроллер будет выполнять записанную программу каждый раз, когда его включают.
Наша программа будет единственной программой в памяти микроконтроллера. Я имею в виду, что на микроконтроллере больше ничего не работает: ни ОС, ни «демона», ничего. Наша программа полностью контролирует устройство.
Сама прошивка бинарника довольно проста благодаря cargo embed.
Но прежде чем выполнить эту команду, посмотрим, что она на самом деле делает. Если повернуть micro:bit USB-разъёмом вверх, на нём можно увидеть три чёрных квадрата. Самый большой — динамик. Другой — наш уже упомянутый MCU… а для чего нужен третий? Этот чип — ещё один MCU, NRF52820, почти такой же мощный, как NRF52833, который мы будем программировать! У этого чипа три основных назначения:
- Управление питанием и сбросом нашего MCU NRF52833 через USB-разъём.
- Мост между последовательным портом и USB для нашего MCU.
- Интерфейс для прошивки и отладки нашего NRF52833 (это назначение сейчас важнее всего).
Этот чип работает как мост между нашим компьютером (к которому он подключён по USB) и MCU (с которым он соединён дорожками и обменивается данными по протоколу SWD). Этот мост позволяет прошивать новые бинарники в MCU, проверять состояние программы с помощью отладчика и делать другие полезные вещи.
Ну что, прошьём!
$ cargo embed --example init
(...)
Erasing sectors ✔ [00:00:00] [####################################################################################################################################################] 2.00KiB/ 2.00KiB @ 4.21KiB/s (eta 0s )
Programming pages ✔ [00:00:00] [####################################################################################################################################################] 2.00KiB/ 2.00KiB @ 2.71KiB/s (eta 0s )
Finished flashing in 0.608s
Вы заметите, что cargo-embed не завершается после вывода последней строки. Так и должно быть: не закрывайте cargo-embed — в таком состоянии он понадобится на следующем шаге, то есть для отладки! Кроме того, вы, вероятно, заметили, что cargo build и cargo embed принимают одни и те же флаги. Это потому, что cargo embed сам запускает сборку, а затем прошивает получившийся бинарник в чип. Поэтому в будущем можно пропускать шаг cargo build, если хотите сразу прошить код.