フラッシュする
フラッシュとは、プログラムをマイクロコントローラの不揮発性メモリに書き込むことです。いったん フラッシュされると、マイクロコントローラは電源が入るたびに書き込まれたプログラムを実行します。
このプログラムは、マイクロコントローラのメモリ上で動く 唯一の プログラムになります。つまり、 マイクロコントローラ上ではほかに何も動いていません。OS も、「デーモン」も、何もありません。 プログラムがデバイスを完全に制御します。
バイナリ自体のフラッシュは、cargo embed のおかげでとても簡単です。
ただし、そのコマンドを実行する前に、それが実際には何をしているのかを見てみましょう。USB コネクタが 上を向くように micro:bit の側面を見ると、実はそこに黒い四角が 3 つあることに気付くはずです。 一番大きいものはスピーカーです。もう 1 つはすでに説明した MCU ですが……では、残る 1 つは 何のためにあるのでしょうか? このチップは 別の MCU で、これからプログラミングする NRF52833 に匹敵するほど高性能な NRF52820 です! このチップには主に 3 つの目的があります。
- USB コネクタ経由で NRF52833 MCU の電源制御とリセット制御を可能にする。
- MCU 用の serial to USB bridge を提供する。
- 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 の
ステップを飛ばせます。