Edited at

micro:bitでWebUSBを使う

MakeCode for micro:bit のベータ版で、WebUSBが使えるようになったので、試してみました。詳細はこちら。

https://support.microbit.org/support/solutions/articles/19000084059-beta-testing-web-usb

この記事の内容確認は、全てMac上のGoogle Chromeで行いました。Windows 10環境で動作しない場合は、以下の情報を参考にしてください

https://support.microbit.org/support/solutions/articles/19000089574-beta-testing-mbed-driver-doesn-t-work-with-windows


DAPLinkバイナリのダウンロード

まず、micro:bitのDAPLinkファームウェアを最新版に更新します。v0248以降のリリース版の.zipファイルアーカイブ(0249_release_package_9c5fd81e.zip)をダウンロードしてください。

https://github.com/ARMmbed/DAPLink/releases/tag/v0249

アーカイブをunzipします。多数のファイルが含まれていますが、micro:bit用のファームウェアは以下のファイルになります。

0249_kl26z_microbit_0x8000.hex


DAPLinkファームウェアの書き込み

続いて、このDAPLinkファームウェアをmicro:bitに書き込みます。


  • micro:bit 背面のリセットボタンを押しながら、USBケーブルでPCと接続する


  • MAINTENACE という名前のドライブがマウントされるので、0249_kl26z_microbit_0x8000.hex ファイルをコピーする

書き込みが終わるとUSBドライブはアンマウントられ、再びマウントされます。MICROBIT という名前のドライブがマウントされれば成功です。


MakeCode for micro:bit から使ってみる

これで準備が出来たので、MakeCodeからWebUSBの機能を使ってみます。


  • 表示されたデバイスを選び、接続ボタンを押す

これでデバイスが設定されます。ダウンロードボタンを押すと、プログラムがファイルとしてダウンロードされるのではなく、デバイス側に直接書き込まれます。

以上!!

これだけだと、「デバイスに直接書き込めるので、ホストパソコン側にファイルが増えなくて便利」だけなのですが、WebUSBの機能を使ったNode.jsパッケージがArmから公開されています。


DAP.js を使う

DAP.jsは、CMSIS-DAP のJavaScriptインタフェースです。CMSIS-DAPを通じてArmマイコンをNode.jsや、WebUSBを使ってブラウザから制御することが出来ます。詳細は、DAP.jsリポジトリの説明をご覧下さい。

https://github.com/ARMmbed/dapjs/

以下は、WebUSBが有効なDAPLinkファームウェアが載ったmicro:bitを繋いで、examples/read-registers/ のサンプルコードを動作させた例です。

$ node webusb.js 

Select a device to read registers:
1: BBC micro:bit CMSIS-DAP
R0: 00000000
R1: 200021e4
R2: 00000000
R3: 00000000
R4: 00000018
R5: 20002ce4
R6: 200024d4
R7: 0002f10f
R8: 00000000
R9: 00000000
R10: 00000000
R11: 00000000
R12: 0002f299
R13: 20003fec
R14: 0002f2a7
R15: 0001a832

いかがでしょうか?Armマイコン(Cortex-M0)の汎用レジスタの内容が表示されています。

今までは、専用デバッガだったり、OpenOCD/pyOCDとGDB等のデバッグソフトウェアを組み合わせて使ったりしなければ、マイコンのデバッグ制御が出来ませんでした。WebUSBなDAPLinkファームウェアとDAP.jsの組み合わせで、一気に可能性が広がりそうです。

コアレジスタやメモリを操作するためのDAPにアクセスする機能は全て実装されているので、そのうちウェブブラウザ上でマイコンのデバッグが出来るようになるのかも知れませんね。