はじめに
Seeed XIAO BLE (nRF52840)は購入状態でDFUモードにした時に、PC(macOS)で認識されるドライブ名が「XIAO-SENSE」です。
Moddable SDK 4.0.0でサポートされたnRF52のデバイス定義ファイルでは、ドライブ名が「MODDABLEnRF」となっています。
$MODDABLE/build/devices/nrf52/targets/xiao/manifest.json
(抜粋)
"UF2_VOLUME_NAME": "MODDABLEnRF"
デバイス定義ファイルの"UF2_VOLUME_NAME"の設定を修正("MODDABLEnRF" → "XIAO-SENSE")することで、問題なくModdable SDKのサンプルプログラムを動かすことができました。
その後、GitHubのDiscussionsで問い合わせたところ、Moddable用のBootloaderを書き込んで動かすことを想定している、という回答を得ました。
Moddable SDK 4.0.0のnRF52のBootloader
「Using the Moddable SDK with nRF52」のページを参照すると、Bootloaderの記載があります。
Bootloaderはビルドする必要があります。
Moddable用のBootloaderのビルド手順
$ git clone https://github.com/Moddable-OpenSource/Adafruit_nRF52_Bootloader --recurse-submodules
$ cd Adafuit_nRF52_Bootloader
$ make BOARD=moddable_xiao
正常にビルドが完了すると、_build/build-moddable_xiaoディレクトリ配下にBootloaderが作成されます。
$ cd _build/build-moddable_xiao/
$ ls -1 moddable_xiao_bootloader*
moddable_xiao_bootloader-0.6.0-nosd.hex
moddable_xiao_bootloader-0.6.0-nosd.uf2
moddable_xiao_bootloader-0.6.0.hex
moddable_xiao_bootloader-0.6.0.out
moddable_xiao_bootloader-0.6.0.out.map
moddable_xiao_bootloader-0.6.0_s140_7.2.0.hex
moddable_xiao_bootloader-0.6.0_s140_7.2.0.zip
Moddable用のBootloaderを書き込む
Seeed XIAO BLE (nRF52840)をDFUモードにした時にシリアルデバイスとして認識されます。
DFUモードにするには、小さなRESETボタンをすばやく2回押します。
$ ls -1 /dev/cu.usbmodem*
/dev/cu.usbmodem1101
adafruit-nrfutilコマンドを使用して、Moddable用のBootloaderを書き込みます。
$ pip3 install adafruit-nrfutil
$ adafruit-nrfutil --verbose dfu serial -pkg moddable_xiao_bootloader-0.6.0_s140_7.2.0.zip -p /dev/cu.usbmodem1101 -b 115200 --touch 1200
正常に書き込みが完了すると、PC(macOS)で認識されるドライブ名が「MODDABLEnRF」となります。
注意
1回書き込むと、Moddable用のBootloaderではDFUモードにしてもシリアルデバイスとして認識されなくなります。
オリジナルのBootloaderへ戻す場合や、将来Moddable用のBootloaderをアップデートする場合は、J-LinkやST-LinkなどのBootloaderを書き込むためのデバイスが必要です。
OpenOCDとST-Link V2を使ってBootloaderを書き込む
接続
Seeed XIAO BLEの基板の裏面にSWCLKとSWDIO端子があり、Bootloaderを書き込むためのデバイスと接続する必要があります。
SWCLKとSWDIO端子にジャンパーケーブルを直接ハンダづけすることもできますが、実用上はExpansion Board Baseを使用した方が便利です。
Bootloaderを書き込むためのデバイスとしてST-Link V2 (USBドングル)を使用し、Expansion Board Base経由でXIAO BLEと接続します。
Bootloaderを書き込む
OpenOCDをインストールし、openocdコマンドを使用してBootloaderを書き込みます。
$ brew install openocd
Moddable用のBootloaderを書き込む場合
$ openocd -f interface/stlink-v2.cfg -f target/nrf52.cfg -c init -c "reset init" -c halt -c "nrf5 mass_erase" -c "program /Users/kitazaki/tmp/20230828_1/Adafruit_nRF52_Bootloader/_build/build-moddable_xiao/moddable_xiao_bootloader-0.6.0_s140_7.2.0.hex verify" -c reset -c exit
BootloaderをオリジナルのBootloaderに戻す場合
Arduino IDEをインストールし、ボードマネージャーでSeeed XIAO BLEを追加すると、Bootloaderもダウンロードされるので、そのファイルを使用します。
$ openocd -f interface/stlink-v2.cfg -f target/nrf52.cfg -c init -c "reset init" -c halt -c "nrf5 mass_erase" -c "program /Users/kitazaki/Library/Arduino15/packages/Seeeduino/hardware/nrf52/1.1.4/bootloader/Seeed_XIAO_nRF52840_Sense/Seeed_XIAO_nRF52840_Sense_bootloader-0.6.2_s140_7.3.0.hex verify" -c reset -c exit
OpenOCDとJ-Linkを使ってBootloaderを書き込む
接続
Bootloaderを書き込むためのデバイスとしてJ-Linkを使用し、Expansion Board Base経由でXIAO BLEと接続します。
Moddable用のBootloaderを書き込む場合
$ openocd -f interface/jlink.cfg -c "transport select swd" -f target/nrf52.cfg -c init -c "reset init" -c halt -c "nrf5 mass_erase" -c "program /Users/kitazaki/tmp/20230828_1/Adafruit_nRF52_Bootloader/_build/build-moddable_xiao/moddable_xiao_bootloader-0.6.0_s140_7.2.0.hex verify" -c reset -c exit
BootloaderをオリジナルのBootloaderに戻す場合
$ openocd -f interface/jlink.cfg -c "transport select swd" -f target/nrf52.cfg -c init -c "reset init" -c halt -c "nrf5 mass_erase" -c "program /Users/kitazaki/Library/Arduino15/packages/Seeeduino/hardware/nrf52/1.1.4/bootloader/Seeed_XIAO_nRF52840_Sense/Seeed_XIAO_nRF52840_Sense_bootloader-0.6.2_s140_7.3.0.hex verify" -c reset -c exit