Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Прошивка

Прошивка — это процесс записи нашей программы в энергонезависимую память микроконтроллера. После прошивки микроконтроллер будет выполнять записанную программу каждый раз, когда его включают.

Наша программа будет единственной программой в памяти микроконтроллера. Я имею в виду, что на микроконтроллере больше ничего не работает: ни ОС, ни «демона», ничего. Наша программа полностью контролирует устройство.

Сама прошивка бинарника довольно проста благодаря cargo embed.

Но прежде чем выполнить эту команду, посмотрим, что она на самом деле делает. Если повернуть micro:bit USB-разъёмом вверх, на нём можно увидеть три чёрных квадрата. Самый большой — динамик. Другой — наш уже упомянутый MCU… а для чего нужен третий? Этот чип — ещё один MCU, NRF52820, почти такой же мощный, как NRF52833, который мы будем программировать! У этого чипа три основных назначения:

  1. Управление питанием и сбросом нашего MCU NRF52833 через USB-разъём.
  2. Мост между последовательным портом и USB для нашего MCU.
  3. Интерфейс для прошивки и отладки нашего 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, если хотите сразу прошить код.