Copyright 2021-2024 Moddable Tech, Inc.
改訂: 2024年1月19日
このドキュメントは、Moddable SDKを使用してNordicのnRF52840 SoC向けにアプリを構築するためのガイドです。
-
セットアップ手順
• インストール
• トラブルシューティング• インストール
• トラブルシューティング• インストール
• トラブルシューティング
アプリケーションをビルドする前に、以下のことを行う必要があります:
- Moddable SDKをインストールし、そのツールをビルドする
- nRF52プラットフォーム用の必要なドライバと開発ツールをインストールする
以下の手順では、Moddable SDKを使用してアプリケーションをビルドおよび実行するためのコマンドラインツールであるmcconfig
を使用して、デバイス上でhelloworld
の例を実行することでセットアップを確認します。
mcconfig
の詳細については、ツールのドキュメントを参照してください。
Moddable Four用にビルドするには、プラットフォーム識別子としてnrf52/moddable_four
を指定してmcconfig
を実行します:
mcconfig -d -m -p nrf52/moddable_four
利用可能なnRF52サブプラットフォームとそのプラットフォーム識別子のリストは、以下のプラットフォームセクションにあります。
nRF52840には以下の機能があります:
- 64 MHz Cortex-M4 with FPU
- BLE
- 256 KB RAM
- 1 MB Flash
名前 | プラットフォーム識別子 | 主な機能 | リンク |
---|---|---|---|
Moddable Four |
nrf52/moddable_four simulator/moddable_four |
- 1.28" 128x128 モノクローム - シャープミラーディスプレイ - BLE - ジョグダイヤル - 加速度計 - ボタンとLED - CR2032コインセル電源 - 12 外部GPIOピン |
|
Moddable Display 4 |
nrf52/moddable_display_4 simulator/moddable_four |
- 1.28" 128x128 モノクローム - シャープミラーディスプレイ - BLE - ジョグダイヤル - 加速度計 - ボタンとLED - CR2032コインセル電源 - 12 外部GPIOピン |
|
Nordic nRF52840 DK pca10056 |
nrf52/dk |
- 4つのLED - 4つのボタン - すべてのピンにアクセス可能 - BLE - CR2032コインセル電源 |
|
Sparkfun Pro nRF52840 Mini |
nrf52/sparkfun |
- 1つのLED - 1つのボタン - BLE - JST電源コネクタ - Qwiicコネクタ - 17 GPIOピン |
|
Makerdiary nRF58240 MDK |
nrf52/makerdiary |
- 1つの3色LED - 1つのボタン - BLE - 12 GPIOピン |
|
Seeed Studio XIAO nRF52840 |
nrf52/xiao |
- 1つの3色LED - 1つのボタン - BLE - 11 GPIOピン |
|
Adafruit ItsyBitsy nRF52840 Express |
nrf52/itsybitsy |
- 1つのLED - 1つのボタン - BLE - 21 GPIOピン |
|
ili9341 |
nrf52/xiao_ili9341 |
ili9341 QVGAディスプレイ 320 x 240 16ビットカラー |
nRF52は、デバッグ、instrumented、およびリリースの3種類のビルドをサポートしています。それぞれは製品開発プロセスの異なる段階に適しています。mcconfig
を実行する際にコマンドラインからどの種類のビルドを行うか選択します。
注: ディープスリープAPIはinstrumentedおよびリリースビルドでのみ利用可能です。
デバッグビルドはJavaScriptのデバッグに使用されます。デバッグビルドでは、デバイスは起動時にUSBまたはシリアル経由でxsbugに接続しようとします(デバイスの設定によります)。ネイティブgdbデバッグ用のシンボルが含まれます。
mcconfig
コマンドラインの-d
オプションでデバッグビルドを選択します。
instrumentedビルドはネイティブコードのデバッグに使用されます。instrumentedビルドでは、JavaScriptデバッガーが無効になります。通常xsbugで利用可能な計測データは、1秒ごとにシリアルコンソールに出力されます。ディープスリープAPIはinstrumentedビルドで利用可能です。
mcconfig
コマンドラインの -i
オプションは、計測ビルドを選択します。
リリースビルドは、製品用です。リリースビルドでは、JavaScriptデバッガーが無効になり、計測統計が収集されず、シリアルコンソール出力が抑制されます。リリースビルドでは、ディープスリープAPIが利用可能です。
mcconfig
コマンドラインで -d
と -i
の両方のオプションを省略すると、リリースが選択されます。-r
はリリースビルドの選択ではなく、ディスプレイの回転を指定することに注意してください。
Moddable SDKのnRF52用ビルドは、現在Nordic nRF5 SDK v17.0.2を使用しています。
-
Getting Started ドキュメント の指示に従って、Moddable SDKツールをインストールします。
-
必要なサードパーティSDKとツールのために、ホームディレクトリに
~/nrf5
ディレクトリを作成します。 -
macOS Catalina (バージョン10.15) 以降を使用している場合、システムのセキュリティポリシーを満たさないソフトウェアをローカルで実行できるように、ターミナル (または選択した別のターミナルアプリケーション) に例外を追加します。この設定がないと、次のステップでダウンロードされる事前コンパイル済みのGNU Arm Embedded Toolchainを実行することができません。
ターミナルのセキュリティポリシーの例外を設定するには、セキュリティとプライバシーのシステム環境設定に移動し、プライバシータブを選択し、左側のリストから開発者ツールを選び、ターミナルまたはModdable SDKアプリをビルドするために使用する代替ターミナルアプリケーションのチェックボックスをオンにします。最終的には次のようになります:
-
x86 Macの場合、GNU Arm Embedded Toolchainのバージョン12.2.1 AArch32 bare-metal target (arm-none-eabi) をArm Developerウェブサイトからダウンロードします。アーカイブを解凍し、
arm-gnu-toolchain-12.2.rel1-darwin-x86_64-arm-none-eabi
ディレクトリをnrf5
ディレクトリに移動します。 -
ArmベースのMacの場合、GNU Arm Embedded Toolchainのバージョン12.2.1 AArch32 bare-metal target (arm-none-eabi) をArm Developerウェブサイトからダウンロードします。アーカイブを解凍し、
arm-gnu-toolchain-12.2.rel1-darwin-arm64-arm-none-eabi
ディレクトリをnrf5
ディレクトリに移動します。 -
Moddable Fourは、デバイスにファームウェアをフラッシュするためのUF2ファイル形式をサポートする修正されたAdafruit nRF52 Bootloaderを使用します。Moddableは、デバイスへの転送用にUF2バイナリをパッケージ化するMicrosoftの
uf2conv.py
Pythonツールを使用します。uf2convツールをダウンロードしてください。uf2conv.py
ファイルをnrf5
ディレクトリに移動またはコピーします。chmod
を使用してuf2conv
のアクセス権限を変更し、実行可能にします。cd ~/nrf5 chmod 755 uf2conv.py
-
Moddable Fourの修正が加えられたNordic nRF5 SDKをダウンロードします。
アーカイブを解凍し、
nRF5_SDK_17.0.2_d674dde
ディレクトリをnrf5
ディレクトリにコピーします。FYI – nRF5 SDKの変更に関する情報については、nRF5 SDK modificationsのセクションを参照してください。これらの変更は、先ほどダウンロードしたアーカイブに既に適用されています。
-
NRF_SDK_DIR
環境変数をnRF5 SDKディレクトリに設定します:export NRF_SDK_DIR=$HOME/nrf5/nRF5_SDK_17.0.2_d674dde
-
デバイスターゲット用に
helloworld
をビルドしてセットアップを確認します:cd ${MODDABLE}/examples/helloworld mcconfig -d -m -p nrf52/<YOUR_SUBPLATFORM_HERE>
-
macOSでDISK NOT EJECTED PROPERLYが画面に残る場合は、
ejectfix.py
ツールをダウンロードして使用することで、自動的に解除できます。詳細については、Adafruitブログの記事を参照してください。
-
開始ガイドの指示に従って、Moddable SDKツールをインストールします。
-
必要なサードパーティSDKおよびツールのために、
%USERPROFILE%
ディレクトリにnrf5
ディレクトリを作成します。例:C:\Users\<your-user-name>
。cd %USERPROFILE% mkdir nrf5 cd nrf5
-
Arm Developerウェブサイトから、GNU Arm Embedded Toolchainのバージョン12.2.1
AArch32 bare-metal target (arm-none-eabi)
をダウンロードします。アーカイブを解凍し、arm-gnu-toolchain-12.2.rel1-mingw-w64-i686-arm-none-eabi
ディレクトリをnrf5
ディレクトリに移動します。 -
Moddable Fourは、デバイスにファームウェアをフラッシュするためのUF2ファイル形式をサポートする修正されたAdafruit nRF52 Bootloaderを使用します。
uf2conv.py
は、デバイスへの転送用にUF2バイナリをパッケージ化するMicrosoftのPythonツールです。uf2convツールをダウンロードします。uf2conv.py
ファイルをnrf5
ディレクトリに移動またはコピーします。 -
Moddable Fourの修正が加えられたNordic nRF5 SDKをダウンロードします。
アーカイブを解凍し、
nRF5_SDK_17.0.2_d674dde
ディレクトリをnrf5
ディレクトリにコピーします。FYI – nRF5 SDKの修正に関する情報は、nRF5 SDK modificationsのセクションを参照してください。これらの修正は、今ダウンロードしたアーカイブに既に適用されています。
-
NRF52_SDK_PATH
環境変数をnRF5 SDKディレクトリに設定します:set NRF52_SDK_PATH = %USERPROFILE%\nrf5\nRF5_SDK_17.0.2_d674dde
-
Windows用のPythonインストーラーをダウンロードして実行します。デフォルトのオプションを選択します。
-
システムの
PATH
環境変数を編集して、Pythonディレクトリを含めます:C:\Python27 C:\Python27\Scripts
-
デバイスターゲット用に
helloworld
をビルドしてセットアップを確認します:cd %MODDABLE%\examples\piu\balls mcconfig -d -m -p nrf52/moddable_four
-
Getting Started document の指示に従って、Moddable SDKツールをインストールします。
-
必要なサードパーティのSDKとツールのために、ホームディレクトリに
nrf5
ディレクトリを作成します。cd $HOME mkdir nrf5 cd nrf5
-
GNU Arm Embedded Toolchainのバージョン12.2.1 AArch32 bare-metal target (arm-none-eabi) を Arm Developer ウェブサイトからダウンロードします。アーカイブを解凍し、
arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi
ディレクトリをnrf5
ディレクトリに移動します。 -
Moddable Fourは、デバイスにファームウェアをフラッシュするためのUF2ファイル形式をサポートする修正された Adafruit nRF52 Bootloader を使用します。
uf2conv.py
は、デバイスへの転送用にUF2バイナリをパッケージ化するMicrosoftのPythonツールです。uf2conv ツールをダウンロードします。uf2conv.py
ファイルをnrf5
ディレクトリに移動またはコピーします。 -
Moddable Fourの修正が加えられたNordic nRF5 SDKをダウンロードします。
アーカイブを解凍し、
nRF5_SDK_17.0.2_d674dde
ディレクトリをnrf5
ディレクトリにコピーします。FYI – nRF5 SDKの修正に関する情報は、nRF5 SDK modificationsのセクションを参照してください。これらの修正は、ダウンロードしたアーカイブに既に適用されています。
-
NRF_SDK_DIR
環境変数をnRF5 SDKディレクトリに設定します:export NRF_SDK_DIR=$HOME/nrf5/nRF5_SDK_17.0.2_d674dde
-
デバイスターゲット用に
helloworld
をビルドしてセットアップを確認します:cd ${MODDABLE}/examples/helloworld mcconfig -d -m -p nrf52/<YOUR_SUBPLATFORM_HERE>
アプリケーションをインストールしようとすると、エラーや警告の形で障害に遭遇することがあります。このセクションでは、Linux上での一般的な問題とその解決方法について説明します。
macOS、Windows、Linuxで共通のその他の問題については、このドキュメントの下部にあるトラブルシューティングセクションを参照してください。
nrf52はttyACM0デバイスを介してLinuxホストと通信します。Ubuntu Linuxでは、ttyACM0デバイスはdialout
グループによって所有されています。xsbug
デバッガに接続しようとしたときに許可が拒否されましたエラーが発生した場合は、ユーザーをdialout
グループに追加してください:
sudo adduser <username> dialout
sudo reboot
nrf52デバイスがプログラミングモード(つまり、リセットボタンをダブルプレス)にある場合、デスクトップに表示されるはずです。許可の問題がある場合は、次のコマンドを試してディスクをマウントしてください:
udisksctl mount -b /dev/sdb -t FAT
region RAM overflowed with stack
アプリケーションをビルドしていて、リンクがarm-none-eabi/bin/ld: region RAM overflowed with stack
エラーで失敗する場合、ヒープに割り当てられるRAMの量を減らす必要があります。
デフォルトでは、NRF52_HEAP_SIZE
は0x35000に設定されています。
アプリケーションマニフェストで、NRF52_HEAP_SIZE
の割り当てを変更できます:
"build": {
"NRF52_HEAP_SIZE": "0x30000"
}
ld: region FLASH overflowed with .data and user data
section '.text' will not fit in region 'FLASH'
ld: region `FLASH' overflowed by 2285384 bytes
アプリケーションをビルドしていて、上記のようなエラーでリンクに失敗する場合、アプリケーションが大きすぎます。アプリケーションリソースのサイズを減らすか、コードを再構成してください。
カスタムデバイスや一部の開発ボードには、デバッグ用のUSBポートがない場合があります。
Moddable SDKはシリアル接続を介して xsbug
に接続できます。
build
セクションで、以下の設定を確認してください:
"USE_USB": "0",
"FTDI_TRACE": "-DUSE_FTDI_TRACE=0"
defines
セクションで、ピンとボーレートを設定する debugger
条項を設定します:
"debugger": {
"tx_pin": "NRF_GPIO_PIN_MAP(0,30)",
"rx_pin": "NRF_GPIO_PIN_MAP(0,31)",
"baudrate": "NRF_UARTE_BAUDRATE_460800"
},
DEBUGGER_PORT
環境変数をシリアルアダプタに設定し、DEBUGGER_SPEED
を設定します。
export DEBUGGER_PORT=/dev/cu.usbserial-0001
export DEBUGGER_SPEED=460800
アプリケーションをビルドしてインストールします。
xsbug
が実行されていない場合は、起動します:
macOS:
open $MODDABLE/build/bin/mac/release/xsbug.app
WindowsとLinuxでは、次のコマンドを入力するだけです:
xsbug
接続するために serial2xsbug
を実行します:
serial2xsbug $DEBUGGER_PORT $DEBUGGER_SPEED 8N1
デバイスをリセットすると、xsbug
に接続されます。
ブートローダーとModdable SDKは、シリアルポートを使用したファームウェアのインストールをサポートしています。ブートローダーのビルドは、USB経由またはシリアル経由のいずれかのプログラミングをサポートしますが、両方はサポートしません。
シリアル経由でインストールするには、次の手順を実行する必要があります:
- ブートローダーの
board.h
ファイルを修正する - ブートローダーをビルドしてインストールする
- 特別なターゲットでModdableアプリをビルドする
これらの手順は以下で詳しく説明されています。
ブートローダーは、ターゲットデバイスに特化してビルドする必要があります。BOARD
定義ファイルを修正し、ビルド定義を使用する必要があります。
このセクションを src/boards/<boardname>/board.h
ファイルに追加します:
//--------------------------------------------------------------------+
// UART update
//--------------------------------------------------------------------+
#define RX_PIN_NUMBER 31
#define TX_PIN_NUMBER 30
#define CTS_PIN_NUMBER 0
#define RTS_PIN_NUMBER 0
#define HWFC false
RX_PIN_NUMBER
と TX_PIN_NUMBER
をボードに適した値に設定します。
ステータスLEDは、デバイスがプログラミングモードにあるときに急速に点滅するため便利です。このファイルでは LED_PRIMARY_PIN
として定義されています。
ブートローダーをビルドする際に、ビルドラインに SERIAL_DFU=1
を追加します。例えば:
make BOARD=<boardname> SERIAL_DFU=1 flash
ブートローダーのビルドに関する詳細は、ブートローダー を参照してください。
USBではなくシリアルポート経由でインストールするためには、installDFU
または debugDFU
のいずれかのターゲットを使用します。
mcconfig -d -m -p nrf52/<boardname> -t debugDFU
installDFU
は単にアプリをデバイスにインストールします。
debugDFU
はアプリをインストールし、xsbugを起動し、serial2xsbugで接続します。
インストールはAdafruitのadafruit-nrfutilを使用してmcconfigによって行われます。
Adafruitの adafruit-nrfutil
をGitHubリポジトリで説明されているようにインストールします:
https://github.com/adafruit/Adafruit_nRF52_nrfutil
環境変数 UPLOAD_PORT
をデバイスに接続されているシリアルポートに設定します。
export UPLOAD_PORT=/dev/cu.usbserial-0001
デバイスターゲットの manifest.json
ファイルで、デバッガーのtxおよびrxピンとボーレートが定義されていることを確認します。
manifest.jsonファイルは $MODDABLE/build/devices/nrf52/targets/<boardname>/manifest.json
にあります。
"defines"
セクションで:
"defines": {
"debugger": {
"tx_pin": "30",
"rx_pin": "31",
"baudrate": "NRF_UARTE_BAUDRATE_921600"
},
...
インストールを受け取るためには、デバイスをファームウェア更新モードにする必要があります。リセットボタンをダブルタップしてデバイスをプログラミングモードにします。ステータスLEDが急速に点滅します。
mcconfig -d -m -p nrf52/<boardname> -t debugDFU
ビルド情報がスクロールした後、コンソールはインストールに進みます:
Sending DFU start packet
Sending DFU init packet
Sending firmware file
########################################
########################################
...
########################################
###########################
Activating new firmware
DFU upgrade took 69.43805122375488s
Device programmed.
Moddable SDKは、iOSおよびAndroidのNordicの「nRF Connect for Mobile」アプリを使用して、BLE経由でnRF52ファームウェアを更新することをサポートしています。これは、Moddable Fourおよび他のサポートされているnRF52搭載ボードで動作します。
デバイスを準備し、BLE経由でnRF52ファームウェアを更新するための5つのステップは次のとおりです。
- nRF52デバイスがAdaFruitブートローダーのModdableフォークのバージョン8(またはそれ以降)を持っていることを確認します。(https://github.com/Moddable-OpenSource/Adafruit_nRF52_Bootloader)
- プロジェクトファームウェアをビルドして更新パッケージにします
- 更新パッケージをモバイルデバイスに転送します
- ターゲットデバイスをDFU OTAモードにします
- 「nRF Connect for Mobile」を使用してファームウェアをインストールし、BLEでデバイスにワイヤレスでインストールします
以下のセクションでは、これらの手順を詳細に説明します。
注: OTAファームウェアの更新に失敗した場合、デバイスはソフトウェアが正常に更新されるまでDFU OTAモードで再起動します。
デバイスをプログラミングモードにして(リセットボタンをダブルタップ)、デスクトップに表示されるボリュームを開きます。INFO_UF2.TXTファイルを開きます。以下のような情報を探します。
Bootloader: Moddable 8.1
Date: Nov 8 2023
バージョンが8.1よりも前の場合は、ブートローダーを更新してください。
Moddable nRF52ブートローダーは、ボード用に事前にビルドされたバージョンで更新することも、自分でカスタマイズしてビルドすることもできます。
Moddable Four Bootloaderは、リポジトリの$MODDABLE/build/devices/nrf52/bootloader/
にあります。デバイスをプログラミングモードにして、current.uf2ファイルをデバイスにコピーします。
もし異なるデバイスをお持ちの場合は、まずブートローダーを構成し、次にブートローダーをビルドして、更新されたブートローダーをnRF52デバイスにインストールしてください。
ModdableのAdafruit nRF52ブートローダーのフォークを使用してください。DFU OTAを使用するための最低バージョンはバージョン8です。
ブート中にGPIOピンの状態をチェックしてデバイスをDFU OTAモードにするようにブートローダーを構成できます。
board.h
ファイルでBUTTON_DFU
定義を設定して、使用するGPIOを指定します。board.h
ファイルはAdafruit_nRF52_Bootloader/src/boards/<boardname>/board.h
にあります。
GPIOを定義しない場合は、プログラムでデバイスをDFU OTAモードで再起動するように設定できます。以下を参照
USB経由で通信するデバイスの場合、ブートローダー更新ファイルをビルドします:
cd .../Adafruit_nRF52_Bootloader
rm -rf _build
git pull --rebase
make BOARD=moddable_four bootloaderuf2
デバイスをプログラミングモードにして、current.uf2
ファイルをデバイスにコピーします:
cp current.uf2 /Volumes/MODDABLE4
シリアル経由で更新するデバイスの場合、新しいブートローダーをインストールするためにJTAGを使用します:
cd .../Adafruit_nRF52_Bootloader
rm -rf _build
git pull --rebase
make SERIAL_DFU=1 BOARD=test flash
注:
SERIAL_DFU=1
を使用すると、上記の例はUSBではなくシリアルを使用してプログラムするデバイス用です。このブートローダーをインストールすると、USB経由での更新が無効になります。
-t ble-package
ターゲットを使用してアプリケーションをビルドします。ビルドが完了し、ble-package.zip
ファイルの場所が表示されます。
% cd .../my_app
% mcconfig -d -m -p nrf52/moddable_four -t ble-package
....
# Packaging .../my_app/xs_nrf52.hex for BLE
Zip created at .../my_app/ble-package.zip
ble-package.zip
ファイルをモバイルデバイスに転送し、「nRF Connect for Mobile」でアクセスできるようにします。
デバイスがDFU OTAモードにあると、ステータスLEDが定期的にダブルブリンクします。
nRF52デバイスをBLE DFUアップデートモードにするには、nrf52_rebootToOTA()
C関数を呼び出します。$(MODDABLE)/build/devices/nrf52/examples/BLE_DFU
アプリは、アプリからそれを使用する方法の例です。
cd $MODDABLE/build/devices/nrf52/examples/BLE_DFU
mcconfig -d -m -p nrf52/moddable_four
デバイスとブートローダーにBUTTON_DFU
として定義されたボタンがある場合、そのボタンを押しながらデバイスをリセットします。
nRF52がBLE DFUアップデートモードになったら、nRF Connect for Mobileを使用して、ble-package.zip
ファイルに含まれるファームウェアをnRF52デバイスに転送します。
アプリケーションを起動し、以下の手順に従います:
-
フィルターを開く
-
Nordic DFUサービスを有効にする
-
"Remove Unconnectable"を有効にする
-
DFUタブを選択する
-
"Connect"ボタンをクリックする デバイスが接続されたら、
-
アップロードパッケージを選択する
-
フラッシュ領域が消去される間、ステータスエリアに「Starting」と表示されます。
-
転送が完了すると、「Success!」と表示されます。デバイスは新しくインストールされたファームウェアイメージに再起動します。
すべてのModdableプラットフォームと同様に、Moddable FourではUSBシリアルインターフェースを介してxsbug
を使用してスクリプトコードをデバッグできます。詳細については、xsbug
のドキュメントを参照してください。ネイティブコードのソースレベルデバッグには、GDBを使用できます。
Moddable Fourでネイティブコードをデバッグするには、Nordic nRF52840-DKボード、Segger J-Link Plusまたは互換デバイスが必要です。
例えば、Moddable FourをnRF52840-DKボードに次のように接続します:
nRF52840 DK | Moddable Four | |
---|---|---|
SWD CLK | SWDCLK | |
SWD IO | SWDIO | |
RESET | RESET | (オプション) |
GND DETECT | GND | |
VTG | 3V3 |
セガー J-Link Plusをお持ちの場合、J-Linkへの接続は以下の通りです:
Moddable Four | J-Link | |
---|---|---|
SWDCLK | TCK | |
SWDIO | TMS | |
RESET | RESET | (オプション) |
GND | GND | |
3V3 | VTref |
GDB は、Unix系のビルドホストでネイティブコードをデバッグするために広く使用されているGNUデバッガです。GDBは、SDKおよびホスト環境のセットアップステップでダウンロードされたArm Embedded Toolchainアーカイブに含まれています。
GDBは、nRF52840-DKボード、セガー J-Link Plusまたは他のJ-Link互換デバイスのJ-Link接続を介してnRF58240デバイスと通信します。必要なツールをインストール/構成し、GDBを起動するために次の手順を実行してください:
-
nRFコマンドラインツールをインストールします。
JLinkGDBServer
が$PATH
のどこかにあることを確認してください。 -
nrf5
ディレクトリに、以下の内容でGDBスタートアップコマンドテキストファイルgdb_cmds.txt
を作成します:target remote localhost:2331 mon speed 10000 mon flash download=1 load break main mon reset 0 continue
-
デバイスとデバッガーの両方のUSBポートをコンピュータに接続します。両方のUSBポートはUSBハブを介してコンピュータに接続できます。
-
デバッグする予定のネイティブコードを含むModdableアプリをビルドします。この例では、BLEのheart-rate-serverの例をビルドします:
cd $MODDABLE/examples/network/ble/heart-rate-server mcconfig -d -m -p nrf52/moddable_four -t build
-
コマンドラインコンソールからJ-Link GDBサーバーを起動します:
JLinkGDBServer -device nRF52840_xxAA -if swd -port 2331
GDBサーバーはnRF52840-DKターゲットに接続し、クライアント接続を待ちます:
Connecting to J-Link... J-Link is connected. Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Mar 17 2020 14:43:00 Hardware: V1.00 S/N: 683214408 Checking target voltage... Target voltage: 3.30 V Listening on TCP/IP port 2331 Connecting to target...Connected to target Waiting for GDB connection...
-
別のコマンドラインコンソールからGDBクライアントを起動し、アプリケーションELFとGDBスタートアップコマンドテキストファイルをコマンドライン引数として渡します:
arm-none-eabi-gdb $MODDABLE/build/tmp/nrf52/moddable_four/debug/heart-rate-server/xs_nrf52.out -x ~/nrf5/gdb_cmds.txt
GDBサーバーはクライアントと接続し、アプリケーションをダウンロードし、GDBセットアップコマンドファイルで指定されたブレークポイントmain
で停止します:
Breakpoint 1 at 0x46550: file /Users/<user>/Projects/moddable/build/devices/nrf52/xsProj/main.c, line 149.
Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
Breakpoint 1, main () at /Users/<user>/Projects/moddable/build/devices/nrf52/xsProj/main.c:149
149 clock_init();
(gdb)
(gdb)
プロンプトで、c
と入力して実行を続行するか、他のブレークポイントを設定します。
nRF52 SoC上で動作するModdable SDKを使用するアプリケーションは、通常、デバイスにファームウェアをフラッシュするためのUF2ファイル形式をサポートする修正されたAdafruit nRF52 Bootloaderを使用します。
デバイスにModdable SDKアプリのデバッグビルドがインストールされている場合、Moddableツールはデバイスを自動的にプログラミングモードに設定するため、ボードを手動でリセットする必要はありません。
それ以外の場合は、デバイスのリセットボタンをダブルタップしてプログラミングモードにします。オンボードLEDが毎秒点滅し、MODDABLE4という名前のUSBディスクがデスクトップに表示されます。
.uf2
ファイルをMODDABLE4ディスクにドラッグしてプログラムします。
注: ブートローダーは同じ方法で更新できます。
注: 表示されるディスクは MODDABLEnRF と名付けられている場合があります。
Moddable SDKを使用するためには、nRF52840デバイスにブートローダーをインストールする必要があります。これにより、以前のブートローダーの機能が置き換えられます。
注: Moddable Fourにはブートローダーが事前にインストールされています。
注: デバイスが壊れる可能性があります。
初めてブートローダーをプログラムするには、Segger J-Linkまたは同等のものが必要です。一度Moddableブートローダーがインストールされると、UF2インストール方法を使用できます。
-
デバイスをJ-Linkに接続します。デバッガーと同じ方法で接続します。詳細は ネイティブコードのデバッグ セクションを参照してください。
-
ブートローダーリポジトリを取得します:
git clone https://github.com/Moddable-OpenSource/Adafruit_nRF52_Bootloader --recurse-submodules
-
デバイス用にビルドします
cd Adafruit_nRF52_Bootloader make BOARD=moddable_four
注: 以下のBOARD構成はModdableをサポートするように更新されました。
moddable_four
moddable_itsybitsy_nrf52
moddable_makerdiary_nrf52
moddable_pca10056
moddable_sparkfun52840
moddable_xiao
-
デバイスにインストールします。まずSoftDeviceをインストールし、次にブートローダーをフラッシュします:
make BOARD=moddable_four sd make BOARD=moddable_four flash
-
リセットボタンをダブルタップしてデバイスをプログラミングモードに設定します。LEDが定期的に点滅し、デスクトップに
MODDABLEnRF
ボリュームが表示されます。これでデバイスをプログラムできます。
-
デバイスにModdableブートローダーがインストールされたら、bootloaderuf2 Makefileターゲットを使用して更新ファイルをビルドし、そのファイルをデバイスにコピーできます。
bootloaderuf2
ターゲットでブートローダーをビルドしますcd .../Adafruit_nRF52_Bootloader make BOARD=moddable_four bootloaderuf2
デバイスをプログラミングモードにして、
current.uf2
ファイルをデバイスにコピーします。
Moddable Fourには、Nordic nRF5 SDKにいくつかの小さな調整が必要です。準備されたSDKはNordic nRF5 SDKから使用できます。
または、以下の手順に従ってSDKを変更することで、自分で作成することもできます:
-
次の手順に従ってNordic nRF5 SDKをダウンロードします:
-
nRF5 SDKバージョンセクションから
v17.0.2
を選択します。 -
すべてのSoftDevicesのチェックを外します。
-
ページの下部にあるDownload Filesボタンをクリックします。以下の画像と同じ選択が表示されるはずです。
ダウンロードされたアーカイブは
DeviceDownload.zip
という名前です。アーカイブを解凍し、nRF5_SDK_17.0.2_d674dde
ディレクトリをnrf5
ディレクトリにコピーします。 -
-
NRF_SDK_DIR
環境変数をnRF5 SDKディレクトリに設定します:export NRF_SDK_DIR=$HOME/nrf5/nRF5_SDK_17.0.2_d674dde
-
Moddable Fourのボード定義ファイルをNordic nRF5 SDKに追加します。ボード定義ファイルにはModdable FourのLED、ボタン、およびピンの定義が含まれています。Moddable Fourボード定義ファイルを追加するには、次の手順を実行します:
moddable_four.h
ボード定義ファイルは$MODDABLE/build/devices/nrf52/config/moddable_four.h
にあります。moddable_four.h
ファイルをNordic nRF5 SDKのcomponents/boards/
ディレクトリにコピーします。
cp $MODDABLE/build/devices/nrf52/config/moddable_four.h $NRF_SDK_DIR/components/boards
$NRF_SDK_DIR/components/boards/boards.h
を修正し、次の内容を#elif defined(BOARD_CUSTOM)
の前に追加します:
#elif defined (BOARD_MODDABLE_FOUR) #include "moddable_four.h"
-
SPIM3
サポートを追加します:nRF5 SDKには
integration/nrfx/legacy/apply_old_config.h
というファイルがあり、少し変更が必要です。以下の行に示すように、NRFX_SPIM2_ENABLED
の後に|| NRFX_SPIM3_ENABLED
を追加します:
#define NRFX_SPIM_ENABLED \
(SPI_ENABLED && (NRFX_SPIM0_ENABLED || NRFX_SPIM1_ENABLED || NRFX_SPIM2_ENABLED || NRFX_SPIM3_ENABLED))
-
LEセキュア接続サポートを有効にする:
Nordic SDKの
nrf_stack_info.h
ファイル内のnrf_stack_info_overflowed
関数でスタックオーバーフローチェックを無効にします:
__STATIC_INLINE bool nrf_stack_info_overflowed(void)
{
#if 0
if (NRF_STACK_INFO_GET_SP() < NRF_STACK_INFO_BASE)
{
return true;
}
#endif
return false;
}