はじめに
Moddable SDK 4.0.0でNordic SemiconductorのnRF52840がサポートされたので、さっそく試してみました。
nRF52840用の環境構築手順はこちらです。
xs-devで環境構築
xs-devツールで環境構築する方が楽です。
xs-devツールのインストール手順はこちらです。
まず、brewコマンドでxzツールをインストールします。
brew install xz
xs-devツールをアップデートします。
sudo npm update -g xs-dev
Moddable SDKをアップデートします。
xs-dev update
nRFツールをインストールします。
xs-dev setup --device nrf52
ℹ Ensuring nrf52 directory
✔
Successfully set up nrf52 platform support for Moddable!
Test out the setup by starting a new terminal session, plugging in your device, and running: xs-dev run --example helloworld --device nrf52
別のターミナルを開き、XIAO BLEを接続(RESETボタンを2回ダブルクリックしてDFUモードへ変更)し、helloworldのプログラムをビルド・インストールしますが、インストールが完了しません。
xs-dev run --example helloworld --device nrf52/xiao
manifest.jsonを変更する
手動でmcconfigコマンドでビルド・インストールを実行したところ、uf2ファイルをXIAO BLEへ書き込もうとしているところで止まっていることがわかった。
cd ${MODDABLE}/examples/helloworld
mcconfig -d -m -p nrf52/xiao
# xsl modules
# mcrez resources
Total resource size: 0 bytes
# cc mc.resources.c (slots in flash)
### 289 instances, 567 keys, 65 colors, 0 holes
# cc mc.xs.c (slots in flash)
# buildinfo
# creating xs_nrf52.out
# link to .out file
# Version
# XS: 4.0.0
# Memory usage
# Ram: 41016 bytes
# Heap: 217088 bytes
# Flash: 489544 bytes
# QSPI: 0 bytes
Making: /Users/kitazaki/moddable/build/bin/nrf52/xiao/debug/helloworld/xs_nrf52.uf2 from xs_nrf52.hex
Converting to uf2, output size: 547840, start address: 0x27000
Wrote 547840 bytes to /Users/kitazaki/moddable/build/bin/nrf52/xiao/debug/helloworld/xs_nrf52.uf2
/dev/cu.usbmodemD14CE42966AF1
Setting programming mode. product/vendor match: /dev/cu.usbmodemD14CE42966AF1
Waiting for /Volumes/MODDABLEnRF..........
XIAO BLEをDFUモードに変更すると、XIAO-SENSEという名前で認識されているため、MODDABLEnRFというボリュームが見つからず、書き込みが失敗していることが原因と判明しました。
デバイスのmanifest.jsonファイルを変更します。
cd $MODDABLE/build/devices/nrf52/targets/xiao
"UF2_VOLUME_NAME": "MODDABLEnRF"
↓
"UF2_VOLUME_NAME": "XIAO-SENSE"
もう一度、mcconfigコマンドを実行すると、今度はビルド・インストールが成功し、デバッガ(xsbug)が起動して問題なく動作しました。
xs-dev infoコマンドにはnRF環境の情報が表示されない?!
xs-dev info
xs-dev environment info:
CLI Version 0.27.0
OS Darwin
Arch arm64
Shell /bin/zsh
NodeJS Version v18.14.2 (/usr/local/bin/node)
Python Version 3.9.12 (/Users/kitazaki/.espressif/python_env/idf4.4_py3.9_env/bin/python)
Moddable SDK Version 4.0.0 (/Users/kitazaki/moddable) Supported target devices mac, esp32, pico
ESP32 IDF Directory /Users/kitazaki/.local/share/esp32/esp-idf
Pico SDK Directory /Users/kitazaki/pico/pico-sdk
If this is related to an error when using the CLI, please create an issue at "https://github.com/hipsterbrown/xs-dev/issues/new" with the above info.
XIAO BLEのbootloaderの書き込み
XIAO BLEは出荷時点でAdafruit nRF52 Bootloaderが書き込まれているため、bootloaderの書き込みを行う必要はありませんが、bootloaderを書き換えた場合に備えて、bootloaderの書き込み手順を確認しておきます。
git clone https://github.com/adafruit/Adafruit_nRF52_Bootloader
cd Adafruit_nRF52_Bootloader
git submodule update --init
XIAO BLEを接続し、DFUモードへ変更します。makeコマンドでbootloaderを書き込みます。
make BOARD=xiao_nrf52840_ble SERIAL=/dev/cu.usbmodem1101 dfu-flash
または
make BOARD=xiao_nrf52840_ble_sense SERIAL=/dev/cu.usbmodem1101 dfu-flash
BOARDにxiao_nrf52840_bleを指定した場合、XIAO BLEを接続しDFUモードへ変更するとXIAO_BOOTとして認識されます。
BOARDにxiao_nrf52840_ble_senseを指定した場合、XIAO BLEを接続しDFUモードへ変更するとXIAO_SENSEとして認識されます。
デバイスのmanifest.jsonの"UF2_VOLUME_NAME"の設定値を変更する際は注意してください。
Moddable用のBootloaderの書き込み (2023年9月6日 追記)
Moddable用のBootloaderを書き込むと、デバイスのmanifest.jsonの"UF2_VOLUME_NAME"の設定値を変更する必要がありません。