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

フラッシュする

フラッシュとは、プログラムをマイクロコントローラの不揮発性メモリに書き込むことです。いったん フラッシュされると、マイクロコントローラは電源が入るたびに書き込まれたプログラムを実行します。

このプログラムは、マイクロコントローラのメモリ上で動く 唯一の プログラムになります。つまり、 マイクロコントローラ上ではほかに何も動いていません。OS も、「デーモン」も、何もありません。 プログラムがデバイスを完全に制御します。

バイナリ自体のフラッシュは、cargo embed のおかげでとても簡単です。

ただし、そのコマンドを実行する前に、それが実際には何をしているのかを見てみましょう。USB コネクタが 上を向くように micro:bit の側面を見ると、実はそこに黒い四角が 3 つあることに気付くはずです。 一番大きいものはスピーカーです。もう 1 つはすでに説明した MCU ですが……では、残る 1 つは 何のためにあるのでしょうか? このチップは 別の MCU で、これからプログラミングする NRF52833 に匹敵するほど高性能な NRF52820 です! このチップには主に 3 つの目的があります。

  1. USB コネクタ経由で NRF52833 MCU の電源制御とリセット制御を可能にする。
  2. MCU 用の serial to USB bridge を提供する。
  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 buildcargo embed には実際には同じフラグが渡されていることにも気付いた でしょう。これは、cargo embed が実際にはビルドを実行し、その結果できたバイナリをチップに フラッシュしているからです。つまり、今後すぐにコードをフラッシュしたい場合は、cargo build の ステップを飛ばせます。