プログラミング言語RustをFeather-M4-Expressで動かす
2020/5/30:
書き込みツール(bossac)の説明を追加した。
2020/5/28
初版
Rust Feather-M4-Express
Rust Feather-M4-Express
概要
プログラミング言語Rustを以下のFeather-M4-Expressで動かす。 (ホストPCとしてはubuntuを想定している)
関連ツールのインストール
以下で必要なツールをインスールする:
(1)rustツールのインストール
curl https://sh.rustup.rs -sSf | sh
(2)Cコンパイラのバージョンアップ
binを作成するのに、これに含まれるツールを使用するのでインストールする
以下でインストールしたコンパイラが古くてビルドエラーが出たのでバージョンアップする。
sudo apt-get install gcc-arm-none-eabi
(1)以下のurlから最新版をダウンロードする:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
解凍したものを以下のフォルダに置く:
$HOME/Downloads/gcc-arm-none-eabi-8-2019-q3-update
(2)パス設定
#古いコンパイラを削除する
sudo apt-get remove gcc-arm-none-eabi
#パスを設定する
export PATH=$PATH:$HOME/Downloads/gcc-arm-none-eabi-8-2019-q3-update/bin
exportは、.bashrcに登録する
(3)picocom(通信ソフト)のインストール
sudo apt-get install picocom
(4)rust関連ツールのインストール
# for samd11, samd21:
rustup target add thumbv6m-none-eabi
# for samd51, same54:
rustup target add thumbv7em-none-eabihf
# uf2conv etc install
rustup component add llvm-tools-preview
cargo install uf2conv cargo-binutils
blinkyを実行する
# download
git clone https://github.com/atsamd-rs/atsamd.git
cd atsamd/boards/feather_m4/feather_m4
# build
cargo build --example blinky_basic
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/debug/examples/blinky_basic firmware.bin
# conv bin to uf2
uf2conv firmware.bin --base 0x4000 --output firmware.uf2
# flash
# bootloader-modeにする(resetを2度押す)
cp firmware.uf2 /media/USER_NAME/FEATHERBOOT/
「USER_NAME」は、自分の環境に合わせて変更すること。
実行結果として、オンボードのLEDが点滅する。
オンボードのnexpixelを動かす
# build
cargo build --example neopixel_rainbow
cargo build --example neopixel_rainbow --release
# debugでビルドした後、releaseでビルドする必要がある(そうしないととエラーになる)
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/release/examples/neopixel_rainbow firmware.bin
# 性能問題があるのでdebugではなくreleaseを採用する
# conv bin to uf2
uf2conv firmware.bin --base 0x4000 --output firmware.uf2
# flash
# bootloader-modeにする(resetを2度押す)
cp firmware.uf2 /media/USER_NAME/FEATHERBOOT/
「USER_NAME」は、自分の環境に合わせて変更すること。
実行結果として、オンボードのneopixelが色を変えながら光る。
serialを動かす
# build
cargo build --example serial
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/debug/examples/serial firmware.bin
# conv bin to uf2
uf2conv firmware.bin --base 0x4000 --output firmware.uf2
# flash
# bootloader-modeにする(resetを2度押す)
cp firmware.uf2 /media/USER_NAME/FEATHERBOOT/
「USER_NAME」は、自分の環境に合わせて変更すること。
USBシリアルを、RX,TX,GNDと接続して、実行すると
文字列がシリアル出力される。
出力例:
picocom /dev/ttyUSB0 -b19200
...
Terminal ready
Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hello, world!Hell
...
ソース上の文字列に改行などが入っていないので、'Hello, world!'が繋がって出力される。
注意:シリアルが動作中だと「bootloader-mode」に入りにくいようだ。 その場合、resetを押した後、再度、resetを2度押すと、そのモードに入るようだ。
serial_echoを動かす
# build
cargo build --example uart_poll_echo
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/debug/examples/uart_poll_echo firmware.bin
# conv bin to uf2
uf2conv firmware.bin --base 0x4000 --output firmware.uf2
# flash
# bootloader-modeにする(resetを2度押す)
cp firmware.uf2 /media/USER_NAME/FEATHERBOOT/
「USER_NAME」は、自分の環境に合わせて変更すること。
USBシリアルを、RX,TX,GNDと接続して、実行して
通信ソフト「picocom /dev/ttyUSB0 -b19200」を起動する。
そこで、文字をタイプすると、そのまま、文字が表示される。.
注意:シリアルが動作中だと「bootloader-mode」に入りにくいようだ。 その場合、resetを押した後、再度、resetを2度押すと、そのモードに入るようだ。
timerを動かす
# build
cargo build --example timers
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/debug/examples/timers firmware.bin
# conv bin to uf2
uf2conv firmware.bin --base 0x4000 --output firmware.uf2
# flash
# bootloader-modeにする(resetを2度押す)
cp firmware.uf2 /media/USER_NAME/FEATHERBOOT/
「USER_NAME」は、自分の環境に合わせて変更すること。
実行結果として、タイマーの周期でオンボードのLEDが点滅する。
なお、周期がわかりにくかったので、ソースの「timer.start(50u32.hz());」を
「timer.start(5u32.hz());」に変更した。
乱数生成を動かす
# build
cargo build --example trng
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/debug/examples/trng firmware.bin
# conv bin to uf2
uf2conv firmware.bin --base 0x4000 --output firmware.uf2
# flash
# bootloader-modeにする(resetを2度押す)
cp firmware.uf2 /media/USER_NAME/FEATHERBOOT/
「USER_NAME」は、自分の環境に合わせて変更すること。
実行結果として、生成した乱数の周期でオンボードのLEDが点滅する。
bossacによる書き込み
uf2ファイルに変換せずにbinのまま書き込みができるbossacというツールがあるので
それの使い方について説明する。
(1)bossacツールのインストール
sudo apt-get install build-essential
git clone https://github.com/shumatech/BOSSA/tree/arduino
cd BOSSA
make bin/bossac -j4
sudo cp bin/bossac /bin/
(2)bossacによる書き込み(例)
# build
cargo build --example blinky_basic
# conv elf to bin
arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/debug/examples/blinky_basic firmware.bin
#バイナリを作るところまでは同じ
# flash
# bootloader-modeにする(resetを2度押す)
bossac -p /dev/ttyACM0 -i -e -w -v -R -o 0x4000 firmware.bin
出力例:
$ bossac -p /dev/ttyACM0 -i -e -w -v -R -o 0x4000 firmware.bin
Device : ATSAMD51x19
Version : v1.1 [Arduino:XYZ] May 17 2020 17:56:23
Address : 0x0
Pages : 1024
Page Size : 512 bytes
Total Size : 512KB
Planes : 1
Lock Regions : 32
Locked : none
Security : false
BOD : false
BOR : true
Erase flash
Done in 2.383 seconds
Write 13852 bytes to flash (28 pages)
[==============================] 100% (28/28 pages)
Done in 0.072 seconds
Verify 13852 bytes of flash
[==============================] 100% (28/28 pages)
Verify successful
Done in 0.029 seconds
参照情報
atsamd & atsame support for Rust
Running bossac on the command line
STM32 Nucleo Board STM32F103RB
The Embedded Rust Book
The Embedded Rust Book - Semihosting
以上
| 固定リンク
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「Rust」カテゴリの記事
- プログラミング言語RustをXIAOで動かす(v2)(2020.10.05)
- プログラミング言語RustをXIAOで動かす(2020.06.09)
- プログラミング言語RustをFeather-M4-Expressで動かす(2020.05.28)
- プログラミング言語RustをCircuit-Playground-Expressで動かす(2020.05.28)
- プログラミング言語RustをNucleo-F103RBボードで動かす(STM32F1xx)(2020.05.11)
コメント