gensyuノート

gensyu's blog

RustでTiny2040をLチカしてみる

Tiny2040を入手したので、最近ハマっているRustでLチカをしてみる。

Hal クレート

まずは、rp-halクレートがGitリポジトリにあるのでクローンしてくる。

git clone https://github.com/rp-rs/rp-hal

github.com

ビルドと書き込み

ビルドから書き込みだけど、組込み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ファイルをコピーする。無事動いた。

f:id:gensyuu:20210612193523p:plain

スクランナー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",
]