以前の記事で BLE Nano V2 をオンラインの開発環境で動かしてみました。
その時は mbed CLI ではコンパイル&実行まではできていなかったので、今回試してみました。
書き込み用のボードの違い
BLE Nano で開発するには書き込み用のボードが必要なので、初めて買う時には書き込み用ボードとセットになったキットを買う必要がありますが、私が BLE Nano V1 の時に買ったものと V2 の時に買ったものでは DAPLink のバージョンが異なっています。下記の写真の左側が V1 の時にセットになっていたもので DAPLink の v1.0、右側が V2 の時にセットになっていたもので DAPLink の v1.5 でした。
結論から言っておくと、 BLE Nano V2 と DAPLink v1.0 の組み合わせでは、 mbed CLI での書き込み&実行はうまくいきませんでした。 DAPLink のそれぞれのバージョンで試した結果を下記に記載していきます。
BLE Nano V2 + DAPLink v1.0
まずは Lチカのサンプルをインポートして、そのディレクトリに移動します。
$ mbed import http://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-blinky/ [mbed] Importing program "mbed-os-example-blinky" from "https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-blinky" at latest revision in the current branch [mbed] Adding library "mbed-os" from "https://github.com/ARMmbed/mbed-os" at rev #485bdeee150e $ cd mbed-os-example-blinky
LED のピン番号の指定を、 BLE Nano V2 の本体の LED のピン番号になるように、 led1 のピン番号の指定だけ変更して P0_11 にします。変更後のコードは下記の通りです。
$ cat main.cpp #include "mbed.h" DigitalOut led1(P0_11); // main() runs in its own thread in the OS int main() { while (true) { led1 = !led1; wait(0.5); } }
BLE Nano V2 + DAPLink v1.0 を Mac に挿した状態で mbed detect してみると、下記のように検知されています。
$ mbed detect WARNING: MBED_GCC_ARM_PATH set as environment variable but doesn't exist [mbed] Detected RBLAB_BLENANO, port /dev/tty.usbmodem1412, mounted /Volumes/DAPLINK, interface version 0241: [mbed] Supported toolchains for RBLAB_BLENANO +----------------+-----------+-----------+-----------+-----------+-----------+ | Target | mbed OS 2 | mbed OS 5 | ARM | GCC_ARM | IAR | +----------------+-----------+-----------+-----------+-----------+-----------+ | RBLAB_BLENANO2 | - | Supported | Supported | Supported | Supported | +----------------+-----------+-----------+-----------+-----------+-----------+ Supported targets: 1 Supported toolchains: 3
TOOLCHAIN は今回はどのケースでも GCC_ARM ですが、 TARGET は複数のパターンで試しました。まずは Detected RBLAB_BLENANO
となっているので、 TARGET を RBLAB_BLENANO としてみます。
$ mbed target RBLAB_BLENANO [mbed] RBLAB_BLENANO now set as default target in program "mbed-os-example-blinky" $ mbed toolchain GCC_ARM [mbed] GCC_ARM now set as default toolchain in program "mbed-os-example-blinky" $ mbed config --list [mbed] Global config: GCC_ARM_PATH=/Users/akanuma/Documents/mbed_connect_ws/mac-workshop-content/MacOS/Section-2/gcc-arm-none-eabi-6-2017-q2-update/bin [mbed] Local config (/Users/akanuma/workspace/mbed_cli_mac/mbed-os-example-blinky): TOOLCHAIN=GCC_ARM TARGET=RBLAB_BLENANO
そしてコンパイル実行。
$ mbed compile WARNING: MBED_GCC_ARM_PATH set as environment variable but doesn't exist [Error] @,: Compiler version mismatch: Have 7.2.1; expected version >= 6.0.0 and < 7.0.0 Building project mbed-os-example-blinky (RBLAB_BLENANO, GCC_ARM) Scan: . Scan: env Scan: mbed Scan: FEATURE_BLE Could not compile for RBLAB_BLENANO: Target does not support mbed OS 5
RBLAB_BLENANO は mbed OS 5 に対応していないということでコンパイルできません。おそらくですが RBLAB_BLENANO は BLE Nano V1 という指定になるので、 mbed OS5 には対応していないということで、コンパイルが実行できないものと思われます。
次に mbed detect
の結果として Target に表示されていた、 RBLAB_BLENANO2 を Target に設定してみます。
$ mbed target RBLAB_BLENANO2 [mbed] RBLAB_BLENANO2 now set as default target in program "mbed-os-example-blinky"
そしてコンパイルを実行します。
$ mbed compile WARNING: MBED_GCC_ARM_PATH set as environment variable but doesn't exist [Error] @,: Compiler version mismatch: Have 7.2.1; expected version >= 6.0.0 and < 7.0.0 Building project mbed-os-example-blinky (RBLAB_BLENANO2, GCC_ARM) Scan: . Scan: env Scan: mbed Scan: FEATURE_BLE Using regions bootloader, application in this build. Region bootloader: size 0x23000, offset 0x0 Region application: size 0x5d000, offset 0x23000 Compile [ 0.2%]: mbed_tz_context.c Compile [ 0.3%]: CAN.cpp Compile [ 0.5%]: Ethernet.cpp 〜〜〜中略〜〜〜 Compile [100.0%]: test_env.cpp Link: mbed-os-example-blinky_application Elf2Bin: mbed-os-example-blinky_application Merging Regions Filling region bootloader with /Users/akanuma/workspace/mbed_cli_mac/mbed-os-example-blinky/mbed-os/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_5.0.0_softdevice.hex Padding region bootloader with 0xb58 bytes Filling region application with ./BUILD/RBLAB_BLENANO2/GCC_ARM/mbed-os-example-blinky_application.hex Space used after regions merged: 0x40c54 +------------------+--------+-------+------+ | Module | .text | .data | .bss | +------------------+--------+-------+------+ | [fill] | 244 | 4 | 57 | | [lib]/c.a | 22447 | 2472 | 89 | | [lib]/gcc.a | 3112 | 0 | 0 | | [lib]/misc | 208 | 12 | 28 | | [lib]/stdc++.a | 1 | 0 | 0 | | main.o | 311 | 4 | 1 | | mbed-os/drivers | 785 | 0 | 0 | | mbed-os/features | 62740 | 12 | 2082 | | mbed-os/hal | 1758 | 8 | 130 | | mbed-os/platform | 3820 | 260 | 217 | | mbed-os/rtos | 10332 | 168 | 6133 | | mbed-os/targets | 13795 | 48 | 759 | | Subtotals | 119553 | 2988 | 9496 | +------------------+--------+-------+------+ Total Static RAM memory (data + bss): 12484 bytes Total Flash memory (text + data): 122541 bytes Image: ./BUILD/RBLAB_BLENANO2/GCC_ARM/mbed-os-example-blinky.hex
エラーなくコンパイルを実行することができましたので、出力された hex ファイルを DAPLink にコピーします。
$ cp ./BUILD/RBLAB_BLENANO2/GCC_ARM/mbed-os-example-blinky.hex /Volumes/DAPLINK/.
コピー時もエラーは出ないのですが、コピーが終わっても実際には動作しませんでした。どうやら DAPLink v1.0 だと mbed CLI では書き込みがうまくいかないようです。
BLE Nano V2 + DAPLink v1.5
次に BLE Nano V2 と DAPLink v1.5 の組み合わせで試してみます。この組み合わせで mbed detect
すると、下記のような結果になります。
$ mbed detect WARNING: MBED_GCC_ARM_PATH set as environment variable but doesn't exist [mbed] Detected None, port /dev/tty.usbmodem1412, mounted /Volumes/DAPLINK, interface version 0242: [mbed] Supported toolchains for None +----------------------+-----------+-----------+-----------+-----------+-----------+ | Target | mbed OS 2 | mbed OS 5 | ARM | GCC_ARM | IAR | +----------------------+-----------+-----------+-----------+-----------+-----------+ | ARCH_PRO | Supported | Supported | Supported | Supported | Supported | | ARM_BEETLE_SOC | Supported | Supported | Supported | Supported | Supported | | ARM_CM3DS_MPS2 | Supported | Supported | Supported | Supported | Supported | | B96B_F446VE | Supported | Supported | Supported | Supported | Supported | | DELTA_DFBM_NQ620 | - | Supported | Supported | Supported | Supported | | DISCO_F303VC | Supported | Supported | Supported | Supported | Supported | | DISCO_F407VG | Supported | Supported | Supported | Supported | Supported | | DISCO_F413ZH | Supported | Supported | Supported | Supported | Supported | | DISCO_F429ZI | Supported | Supported | Supported | Supported | Supported | | DISCO_F469NI | Supported | Supported | Supported | Supported | Supported | | DISCO_F746NG | Supported | Supported | Supported | Supported | Supported | | DISCO_F769NI | Supported | Supported | Supported | Supported | Supported | 〜〜〜中略〜〜〜 | NRF51_DK | Supported | Supported | Supported | Supported | Supported | | NRF51_DONGLE | Supported | Supported | Supported | Supported | Supported | | NRF52840_DK | - | Supported | Supported | Supported | Supported | | NRF52_DK | - | Supported | Supported | Supported | Supported | | NUCLEO_F070RB | Supported | Supported | Supported | Supported | Supported | 〜〜〜中略〜〜〜 | WIO_3G | Supported | Supported | Supported | Supported | Supported | | WIZWIKI_W7500 | Supported | Supported | Supported | Supported | Supported | | WIZWIKI_W7500ECO | Supported | Supported | Supported | Supported | Supported | | WIZWIKI_W7500P | Supported | Supported | Supported | Supported | Supported | | XDOT_L151CC | - | Supported | Supported | Supported | Supported | +----------------------+-----------+-----------+-----------+-----------+-----------+ Supported targets: 138
mbed に登録されている開発ボードの中にはマッチするものがないということで、対応しているボードのリストが表示されます。この中から NRF52_DK を Target に設定します。
$ mbed target NRF52_DK [mbed] NRF52_DK now set as default target in program "mbed-os-example-blinky" $ mbed toolchain GCC_ARM [mbed] GCC_ARM now set as default toolchain in program "mbed-os-example-blinky" $ mbed config --list [mbed] Global config: GCC_ARM_PATH=/Users/akanuma/Documents/mbed_connect_ws/mac-workshop-content/MacOS/Section-2/gcc-arm-none-eabi-6-2017-q2-update/bin [mbed] Local config (/Users/akanuma/workspace/mbed_cli_mac/mbed-os-example-blinky): TOOLCHAIN=GCC_ARM TARGET=NRF52_DK
そしてコンパイル実行。
$ mbed compile WARNING: MBED_GCC_ARM_PATH set as environment variable but doesn't exist [Error] @,: Compiler version mismatch: Have 7.2.1; expected version >= 6.0.0 and < 7.0.0 Building project mbed-os-example-blinky (NRF52_DK, GCC_ARM) Scan: . Scan: env Scan: mbed Scan: FEATURE_BLE Using regions bootloader, application in this build. Region bootloader: size 0x23000, offset 0x0 Region application: size 0x5d000, offset 0x23000 Compile [ 0.2%]: mbed_tz_context.c Compile [ 0.3%]: CAN.cpp Compile [ 0.5%]: Ethernet.cpp 〜〜〜中略〜〜〜 Compile [100.0%]: test_env.cpp Link: mbed-os-example-blinky_application Elf2Bin: mbed-os-example-blinky_application Merging Regions Filling region bootloader with /Users/akanuma/workspace/mbed_cli_mac/mbed-os-example-blinky/mbed-os/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_14_2/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_5.0.0_softdevice.hex Padding region bootloader with 0xb58 bytes Filling region application with ./BUILD/NRF52_DK/GCC_ARM/mbed-os-example-blinky_application.hex Space used after regions merged: 0x40cd4 +------------------+--------+-------+------+ | Module | .text | .data | .bss | +------------------+--------+-------+------+ | [fill] | 284 | 4 | 57 | | [lib]/c.a | 22447 | 2472 | 89 | | [lib]/gcc.a | 3112 | 0 | 0 | | [lib]/misc | 208 | 12 | 28 | | [lib]/stdc++.a | 1 | 0 | 0 | | main.o | 311 | 4 | 1 | | mbed-os/drivers | 785 | 0 | 0 | | mbed-os/features | 62740 | 12 | 2082 | | mbed-os/hal | 1758 | 8 | 130 | | mbed-os/platform | 3832 | 260 | 217 | | mbed-os/rtos | 10332 | 168 | 6133 | | mbed-os/targets | 13871 | 48 | 759 | | Subtotals | 119681 | 2988 | 9496 | +------------------+--------+-------+------+ Total Static RAM memory (data + bss): 12484 bytes Total Flash memory (text + data): 122669 bytes Image: ./BUILD/NRF52_DK/GCC_ARM/mbed-os-example-blinky.hex
エラーなくコンパイルされたので hex ファイルを DAPLINK にコピーします。
$ cp ./BUILD/NRF52_DK/GCC_ARM/mbed-os-example-blinky.hex /Volumes/DAPLINK/.
こちらもエラーなくコピーされ、 DAPLink v1.0 との組み合わせの時と違い、 BLE Nano V2 本体で Lチカが実行されました。
まとめ
BLE Nano のような開発ボードはチップのバージョンによる差や OS のバージョンによる差の影響が大きく、また、うまくいかなくても何が原因なのかがわかりづらいケースが多い印象です。実際何か目的があってボードやチップやOSを選定する場合は、うまくいく組み合わせなのかを少しずつ確認しながら進めた方が良さそうです。