メモ:Electro-Smith Daisy で L チカしてみる

これが来たのでLチカしてみる*1

Web Programmer

まず、Getting Started には、Web Programmerというツールから WebUSB API を使って Daisy にサンプルプログラムをロードする手順が載ってるけど、

たぶん Linux だと権限の問題でこういうエラーに遭遇する。

調べればすぐ解決しそうな気はするけど、これを使うのはどうせ初めだけですぐローカルでの開発に移るので、ここはすっ飛ばすことにした。 (たぶん macOSWindows なら問題ないと思います)

ローカルの開発環境を整える

手順はここ。

Arch 系だとこんな感じになるはず。newlib は組み込み用の標準ライブラリらしい。これがないとあとでコンパイルエラーが起こる。

sudo pacman -S dfu-util arm-none-eabi-gcc arm-none-eabi-newlib

次にソースコードを落とす。けっこう重い。

git clone --recurse-submodules https://github.com/electro-smith/DaisyExamples ~/path/to/DaisyExamples

ビルドスクリプトを実行してライブラリをコンパイルする。

cd ~/path/to/DaisyExamples
./rebuild_libs.sh

Blink をコンパイルして Daisy に読み込み

./seed/Blink に移動して make する。

$ make
mkdir build
arm-none-eabi-gcc -c -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -DUSE_HAL_DRIVER -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H750xx -I../../libdaisy/core/ -I../../libdaisy -I../../libdaisy/src/ -I../../libdaisy/Drivers/CMSIS/Include/ -I../../libdaisy/Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../../libdaisy/Drivers/STM32H7xx_HAL_Driver/Inc/ -I../../DaisySP  -O2 -Wall -fdata-sections -ffunction-sections -MMD -MP -MF"build/system_stm32h7xx.d" -Wa,-a,-ad,-alms=build/system_stm32h7xx.lst ../../libdaisy/core/system_stm32h7xx.c -o build/system_stm32h7xx.o
arm-none-eabi-g++  -c -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -DUSE_HAL_DRIVER -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H750xx -I../../libdaisy/core/ -I../../libdaisy -I../../libdaisy/src/ -I../../libdaisy/Drivers/CMSIS/Include/ -I../../libdaisy/Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../../libdaisy/Drivers/STM32H7xx_HAL_Driver/Inc/ -I../../DaisySP  -O2 -Wall -fdata-sections -ffunction-sections -MMD -MP -MF"build/Blink.d" -fno-exceptions -fasm -finline -finline-functions-called-once -fshort-enums -fno-move-loop-invariants -fno-unwind-tables  -Wa,-a,-ad,-alms=build/Blink.lst Blink.cpp -o build/Blink.o
arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -DUSE_HAL_DRIVER -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H750xx -I../../libdaisy/core/ -I../../libdaisy -I../../libdaisy/src/ -I../../libdaisy/Drivers/CMSIS/Include/ -I../../libdaisy/Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../../libdaisy/Drivers/STM32H7xx_HAL_Driver/Inc/ -I../../DaisySP  -O2 -Wall -fdata-sections -ffunction-sections -MMD -MP -MF"build/startup_stm32h750xx.d" ../../libdaisy/core/startup_stm32h750xx.s -o build/startup_stm32h750xx.o
arm-none-eabi-g++  build/system_stm32h7xx.o build/Blink.o build/startup_stm32h750xx.o -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard --specs=nano.specs --specs=nosys.specs -T../../libdaisy/core/STM32H750IB_flash.lds -L../../libdaisy/build  -L ../../DaisySP/build -ldaisy -lc -lm -lnosys -ldaisysp -Wl,-Map=build/Blink.map,--cref -Wl,--gc-sections -o build/Blink.elf
arm-none-eabi-size build/Blink.elf
   text    data     bss     dec     hex filename
  26280      36   14656   40972    a00c build/Blink.elf
arm-none-eabi-objcopy -O ihex build/Blink.elf build/Blink.hex
arm-none-eabi-objcopy -O binary -S build/Blink.elf build/Blink.bin

コンパイルできたら Daisy を USB ケーブルで接続する。(たぶん出荷時にはこれから読み込む Blink が載ってるため)接続した状態だと、下の写真で言うと左側の LED は常時点灯、右側は点滅している。 ここで、BOOT ボタン(写真右)を押したまま RESET ボタン(写真左)を押すと bootloader mode に切り替わる。切り替わるとこの写真のように点滅していた右側の LED は消える。

Daisy の LED が左側だけ点灯している様子
Daisy の LED が左側だけ点灯している様子

写真の状態になったら、コンソールに戻って make program-dfu を実行するとプログラムが Daisy にロードされ、さっき消えていた LED が 1 秒に 1 回点灯するようになる。

$ make program-dfu
dfu-util -a 0 -s 0x08000000:leave -D build/Blink.bin
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 1024
DfuSe interface name: "Internal Flash   "
Downloading to address = 0x08000000, size = 26316
Download    [=========================] 100%        26316 bytes
Download done.
File downloaded successfully
dfu-util: Error during download get_status
make: *** [../../libdaisy/core/Makefile:236: program-dfu] エラー 74

この最後のエラーにビクッとするが、wiki の説明によるとこれはエラーではないので無視していいらしい。なにそれやめて...

Error 74 is an error inside of the dfu-util program and does not indicate the success or failure of uploading your firmware.

まあ成功らしいのでとりあえず成功ってことで。

*1:リンク先も私のブログです。はてなブログは技術的なこと、noteはそれ以外(楽器、音楽、本など)、という運用をしてるんですが、これみたいに微妙な領域のやつをどっちに書くかいつも迷います...