フラッシュに書き込む

フラッシュに書き込むということは、マイクロコントローラの(永続)メモリにプログラムを移動するプロセスです。 一度フラッシュに書き込むと、電源がオンになるたびにマイクロコントローラはフラッシュに書かれたプログラムを実行します。

今回の場合、led-rouletteはマイクロコントローラのメモリに存在する唯一のプログラムです。 これはこのマイクロコントローラ上で他に何も動いていないことを意味しています。 OSも「デーモン」も動いていません。 led-rouletteはデバイスの全ての制御を握っています。

cargo embedのおかげでバイナリをフラッシュに書き込むことは極めて簡単です。

コマンドを実行する前に、このコマンドが何をするのか見てみましょう。 micro:bitのUSBコネクタがある側を見てみると、2つの黒い四角があることに気づくでしょう(micro:bit2では3つ目の一番大きなスピーカーもあります)。 1つは既に話したとおりMCUです。 それではもう1つは何をするものなのでしょうか? このもう1つのチップは主に3つの役割を果たします。

  1. MCUにUSBコネクタからの電源を供給する
  2. MCUのシリアルとUSBのブリッジ機能を提供する(後の章で説明します)
  3. プログラマー/デバッガーになる(これが今のお目当てです)

基本的にこのチップは私たちのコンピュータ(USBで接続されている)とMCU(トレースで接続されていてSWDプロトコルで通信する)とのブリッジです。 このブリッジのおかげでMCUのフラッシュに新しいバイナリを書き込めるし、デバッガーを使ってMCUの状態を調査したりできます。

ファラッシュに書き込んでみましょう!

# For micro:bit v2
$ cargo embed --features v2 --target thumbv7em-none-eabihf
  (...)
     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

# For micro:bit v1
$ cargo embed --features v1 --target thumbv6m-none-eabi
  (...)
     Erasing sectors ✔ [00:00:00] [####################################################################################################################################################]  2.00KiB/ 2.00KiB @  4.14KiB/s (eta 0s )
 Programming pages   ✔ [00:00:00] [####################################################################################################################################################]  2.00KiB/ 2.00KiB @  2.69KiB/s (eta 0s )
    Finished flashing in 0.614s

cargo-embedが最後の1行を出力したあと、(訳注:実行が終了せずにコンソールを)ブロックしていることに気づくでしょう。 これは意図通り動いており、閉じてはいけません。 次のステップでデバッグするためにこのままの状態にしておく必要があります。 さらに、cargo buildcargo embedとに同じフラグが渡されていることにも気づくでしょう。 これはcargo embedがビルドを実行して、そのあとチップにビルド結果のバイナリを書き込んでいるためです。 そのため、新しいコードをすぐにフラッシュに書き込みたいときはcargo buildを省略できます。