RustでTiny2040をLチカしてみる
Tiny2040を入手したので、最近ハマっているRustでLチカをしてみる。
Hal クレート
まずは、rp-halクレートがGitリポジトリにあるのでクローンしてくる。
git clone https://github.com/rp-rs/rp-hal
ビルドと書き込み
ビルドから書き込みだけど、組込みRust本で使用していたUF2ブートローダーをつかって
ファームウェアを書き込む cargo hf2
コマンドが使えなさそう。
hf2は内部的にHIDを使っていそうだが、Tiny2040がHIDとしてでてこない。
(RP2040がHIDデバイスとして使ったりできるようにしているからかな?)
ということで、バイナリからuf2ファイルに変換してストレージにコピーする方法をとる。 まずは使うCargoサブコマンド一式インストール。
cargo install uf2conv cargo-binutils
Lチカのソースコードはexampleディレクトリにあるので今回はそれを書き込んでやる。
ビルド
cargo objcopy --example blink --release -- -O binary blink.bin
UF2へ変換
uf2conv blink.bin --base 0x10000000 --family 0xe48bff56 --output blink.uf2
あとは出来上がったUF2ファイルをコピーする。無事動いた。
tiny2040をRustでLチカ pic.twitter.com/2L3LJCsXai
— げんしゅう (@gensyu_) 2021年6月9日
タスクランナーcargo-make
の導入
でも、hf2サブコマンドに慣れてしまったのでわざわざコマンド打つのも面倒だから、なんかいいものはないかと調べてみると
cargo-make
というタスクランナーを発見。
ワークスペースのディレクトリにMakefile.toml
を置き、タスクを記述してやることで色々できるっぽい。
Pythonとかコマンドなども動かせるので便利そう。
一旦下記にようにしてうまく動いたので満足。
[tasks.buildbin] command = "cargo" args = ["objcopy", "--example", "blinky", "--release", "--", "-O", "binary", "firmware.bin"] [tasks.convuf2] command = "uf2conv" args = ["firmware.bin", "--base", "0x10000000", "--family", "0xe48bff56", "--output", "firmware.uf2"] [tasks.flashuf2] command = "cp" args = ["./firmware.uf2", "/[RPTINYのドライブ]/"] [tasks.rp2040build] dependencies = [ "buildbin", "convuf2", "flashuf2", ]